[lxc-devel] [lxd/master] Add resource reporting to lxc info
stgraber on Github
lxc-bot at linuxcontainers.org
Sat Mar 26 00:08:08 UTC 2016
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 354 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20160326/877f33cd/attachment.bin>
-------------- next part --------------
From e46441d3c131c886cfde9c928e211b246ca80497 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 25 Mar 2016 20:07:12 -0400
Subject: [PATCH] Add resource reporting to lxc info
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
lxc/info.go | 60 ++++++++++++++++++++++++++++++++++++++--
po/lxd.pot | 86 +++++++++++++++++++++++++++++++++++++++++++++-------------
shared/util.go | 17 ++++++++++++
3 files changed, 142 insertions(+), 21 deletions(-)
diff --git a/lxc/info.go b/lxc/info.go
index 9f76181..58e495c 100644
--- a/lxc/info.go
+++ b/lxc/info.go
@@ -8,6 +8,7 @@ import (
"gopkg.in/yaml.v2"
"github.com/lxc/lxd"
+ "github.com/lxc/lxd/shared"
"github.com/lxc/lxd/shared/gnuflag"
"github.com/lxc/lxd/shared/i18n"
)
@@ -98,8 +99,8 @@ func (c *infoCmd) containerInfo(d *lxd.Client, name string, showLog bool) error
fmt.Printf(i18n.G("Profiles: %s")+"\n", strings.Join(ct.Profiles, ", "))
if cs.Pid != 0 {
fmt.Printf(i18n.G("Pid: %d")+"\n", cs.Pid)
- fmt.Printf(i18n.G("Processes: %d")+"\n", cs.Processes)
+ // IP addresses
ipInfo := ""
for netName, net := range cs.Network {
vethStr := ""
@@ -113,9 +114,64 @@ func (c *infoCmd) containerInfo(d *lxd.Client, name string, showLog bool) error
}
if ipInfo != "" {
- fmt.Printf(i18n.G("Ips:") + "\n")
+ fmt.Println(i18n.G("Ips:"))
fmt.Printf(ipInfo)
}
+ fmt.Println(i18n.G("Resources:"))
+
+ // Processes
+ fmt.Printf(" "+i18n.G("Processes: %d")+"\n", cs.Processes)
+
+ // Disk usage
+ diskInfo := ""
+ for entry, disk := range cs.Disk {
+ if disk.Usage != 0 {
+ diskInfo += fmt.Sprintf(" %s: %s\n", entry, shared.GetByteSizeString(disk.Usage))
+ }
+ }
+
+ if diskInfo != "" {
+ fmt.Println(i18n.G(" Disk usage:"))
+ fmt.Printf(diskInfo)
+ }
+
+ // Memory usage
+ memoryInfo := ""
+ if cs.Memory.Usage != 0 {
+ memoryInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Memory (current)"), shared.GetByteSizeString(cs.Memory.Usage))
+ }
+
+ if cs.Memory.UsagePeak != 0 {
+ memoryInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Memory (peak)"), shared.GetByteSizeString(cs.Memory.UsagePeak))
+ }
+
+ if cs.Memory.SwapUsage != 0 {
+ memoryInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Swap (current)"), shared.GetByteSizeString(cs.Memory.SwapUsage))
+ }
+
+ if cs.Memory.SwapUsagePeak != 0 {
+ memoryInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Swap (peak)"), shared.GetByteSizeString(cs.Memory.SwapUsagePeak))
+ }
+
+ if memoryInfo != "" {
+ fmt.Println(i18n.G(" Memory usage:"))
+ fmt.Printf(memoryInfo)
+ }
+
+ // Network usage
+ networkInfo := ""
+ for netName, net := range cs.Network {
+ networkInfo += fmt.Sprintf(" %s:\n", netName)
+ networkInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Bytes received"), shared.GetByteSizeString(net.Counters.BytesReceived))
+ networkInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Bytes sent"), shared.GetByteSizeString(net.Counters.BytesSent))
+ networkInfo += fmt.Sprintf(" %s: %d\n", i18n.G("Packets received"), net.Counters.PacketsReceived)
+ networkInfo += fmt.Sprintf(" %s: %d\n", i18n.G("Packets sent"), net.Counters.PacketsReceived)
+ }
+
+ if networkInfo != "" {
+ fmt.Println(i18n.G(" Network usage:"))
+ fmt.Printf(networkInfo)
+ }
}
// List snapshots
diff --git a/po/lxd.pot b/po/lxd.pot
index 5d98666..b78cf8a 100644
--- a/po/lxd.pot
+++ b/po/lxd.pot
@@ -7,7 +7,7 @@
msgid ""
msgstr "Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
- "POT-Creation-Date: 2016-03-23 17:02-0400\n"
+ "POT-Creation-Date: 2016-03-25 20:07-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -16,6 +16,18 @@ msgstr "Project-Id-Version: lxd\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
+#: lxc/info.go:134
+msgid " Disk usage:"
+msgstr ""
+
+#: lxc/info.go:157
+msgid " Memory usage:"
+msgstr ""
+
+#: lxc/info.go:172
+msgid " Network usage:"
+msgstr ""
+
#: lxc/config.go:37
msgid "### This is a yaml representation of the configuration.\n"
"### Any line starting with a '# will be ignored.\n"
@@ -107,7 +119,7 @@ msgstr ""
msgid "An environment variable of the form HOME=/home/foo"
msgstr ""
-#: lxc/image.go:316 lxc/info.go:87
+#: lxc/image.go:316 lxc/info.go:88
#, c-format
msgid "Architecture: %s"
msgstr ""
@@ -121,6 +133,14 @@ msgstr ""
msgid "Available commands:"
msgstr ""
+#: lxc/info.go:165
+msgid "Bytes received"
+msgstr ""
+
+#: lxc/info.go:166
+msgid "Bytes sent"
+msgstr ""
+
#: lxc/config.go:270
msgid "COMMON NAME"
msgstr ""
@@ -225,7 +245,7 @@ msgid "Create a read-only snapshot of a container.\n"
"lxc snapshot u1 snap0"
msgstr ""
-#: lxc/image.go:321 lxc/info.go:89
+#: lxc/image.go:321 lxc/info.go:90
#, c-format
msgid "Created: %s"
msgstr ""
@@ -403,7 +423,7 @@ msgstr ""
msgid "Invalid target %s"
msgstr ""
-#: lxc/info.go:116
+#: lxc/info.go:117
msgid "Ips:"
msgstr ""
@@ -429,7 +449,7 @@ msgid "Launch a container from a particular image.\n"
"lxc launch ubuntu u1"
msgstr ""
-#: lxc/info.go:24
+#: lxc/info.go:25
msgid "List information on containers.\n"
"\n"
"This will support remotes and images as well, but only containers for now.\n"
@@ -466,7 +486,7 @@ msgid "Lists the available resources.\n"
"Fast column layout: nsacPt"
msgstr ""
-#: lxc/info.go:159
+#: lxc/info.go:215
msgid "Log:"
msgstr ""
@@ -633,6 +653,14 @@ msgid "Manipulate container images.\n"
" List the aliases.\n"
msgstr ""
+#: lxc/info.go:141
+msgid "Memory (current)"
+msgstr ""
+
+#: lxc/info.go:145
+msgid "Memory (peak)"
+msgstr ""
+
#: lxc/help.go:86
msgid "Missing summary."
msgstr ""
@@ -677,7 +705,7 @@ msgstr ""
msgid "NO"
msgstr ""
-#: lxc/info.go:86
+#: lxc/info.go:87
#, c-format
msgid "Name: %s"
msgstr ""
@@ -735,6 +763,14 @@ msgstr ""
msgid "PUBLIC"
msgstr ""
+#: lxc/info.go:167
+msgid "Packets received"
+msgstr ""
+
+#: lxc/info.go:168
+msgid "Packets sent"
+msgstr ""
+
#: lxc/help.go:69
msgid "Path to an alternate client configuration directory."
msgstr ""
@@ -747,7 +783,7 @@ msgstr ""
msgid "Permisson denied, are you in the lxd group?"
msgstr ""
-#: lxc/info.go:100
+#: lxc/info.go:101
#, c-format
msgid "Pid: %d"
msgstr ""
@@ -784,7 +820,7 @@ msgid "Prints the version number of LXD.\n"
"lxc version"
msgstr ""
-#: lxc/info.go:101
+#: lxc/info.go:123
#, c-format
msgid "Processes: %d"
msgstr ""
@@ -808,7 +844,7 @@ msgstr ""
msgid "Profile to apply to the new container"
msgstr ""
-#: lxc/info.go:98
+#: lxc/info.go:99
#, c-format
msgid "Profiles: %s"
msgstr ""
@@ -845,6 +881,10 @@ msgstr ""
msgid "Require user confirmation."
msgstr ""
+#: lxc/info.go:120
+msgid "Resources:"
+msgstr ""
+
#: lxc/init.go:246
#, c-format
msgid "Retrieving image: %s"
@@ -907,7 +947,7 @@ msgstr ""
msgid "Show all commands (not just interesting ones)"
msgstr ""
-#: lxc/info.go:33
+#: lxc/info.go:34
msgid "Show the container's last 100 log lines?"
msgstr ""
@@ -916,7 +956,7 @@ msgstr ""
msgid "Size: %.2fMB"
msgstr ""
-#: lxc/info.go:130
+#: lxc/info.go:186
msgid "Snapshots:"
msgstr ""
@@ -929,7 +969,7 @@ msgstr ""
msgid "Starting %s"
msgstr ""
-#: lxc/info.go:92
+#: lxc/info.go:93
#, c-format
msgid "Status: %s"
msgstr ""
@@ -946,6 +986,14 @@ msgstr ""
msgid "Store the container state (only for stop)."
msgstr ""
+#: lxc/info.go:149
+msgid "Swap (current)"
+msgstr ""
+
+#: lxc/info.go:153
+msgid "Swap (peak)"
+msgstr ""
+
#: lxc/list.go:343
msgid "TYPE"
msgstr ""
@@ -984,11 +1032,11 @@ msgstr ""
msgid "Try `lxc info --show-log %s` for more info"
msgstr ""
-#: lxc/info.go:94
+#: lxc/info.go:95
msgid "Type: ephemeral"
msgstr ""
-#: lxc/info.go:96
+#: lxc/info.go:97
msgid "Type: persistent"
msgstr ""
@@ -1125,20 +1173,20 @@ msgstr ""
msgid "remote %s is static and cannot be modified"
msgstr ""
-#: lxc/info.go:139
+#: lxc/info.go:195
msgid "stateful"
msgstr ""
-#: lxc/info.go:141
+#: lxc/info.go:197
msgid "stateless"
msgstr ""
-#: lxc/info.go:135
+#: lxc/info.go:191
#, c-format
msgid "taken at %s"
msgstr ""
-#: lxc/exec.go:159
+#: lxc/exec.go:167
msgid "unreachable return reached"
msgstr ""
diff --git a/shared/util.go b/shared/util.go
index e851cfb..ec25140 100644
--- a/shared/util.go
+++ b/shared/util.go
@@ -657,6 +657,23 @@ func ParseBitSizeString(input string) (int64, error) {
return valueInt * multiplicator, nil
}
+func GetByteSizeString(input int64) string {
+ if input < 1024 {
+ return fmt.Sprintf("%d bytes", input)
+ }
+
+ value := float64(input)
+
+ for _, unit := range []string{"kB", "MB", "GB", "TB", "PB", "EB"} {
+ value = value / 1024
+ if value < 1024 {
+ return fmt.Sprintf("%.2f%s", value, unit)
+ }
+ }
+
+ return fmt.Sprintf("%.2fEB", value)
+}
+
type TransferProgress struct {
io.Reader
percentage float64
More information about the lxc-devel
mailing list