v2:
removed bunch of unnecessary error messages
This patch adds to cgget option -a:
-a     print the variables for all controllers which consists given cgroup


EXAMPLE:
$ ./cgget -a /daemons
/daemons:
cpuset.memory_spread_slab=0
cpuset.memory_spread_page=0
cpuset.memory_pressure=0
cpuset.memory_migrate=0
cpuset.sched_relax_domain_level=-1
cpuset.sched_load_balance=1
cpuset.mem_hardwall=0
cpuset.mem_exclusive=0
cpuset.cpu_exclusive=0
cpuset.mems=
cpuset.cpus=
cpuacct.stat=user 0
system 0
cpuacct.usage_percpu=0 0
cpuacct.usage=0


Signed-off-by: Ivana Hutarova Varekova <[email protected]>
---

 doc/man/cgget.1   |    6 ++++
 src/tools/cgget.c |   72 +++++++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 63 insertions(+), 15 deletions(-)

diff --git a/doc/man/cgget.1 b/doc/man/cgget.1
index 67f6bef..f02fbba 100644
--- a/doc/man/cgget.1
+++ b/doc/man/cgget.1
@@ -8,7 +8,7 @@ cgget \- print parameter(s) of given group(s)
 
 .SH SYNOPSIS
 \fBcgget\fR [\fB-n\fR] [\fB-v\fR] [\fB-r\fR <\fIname\fR>]
-[\fB-g\fR <\fIcontroller\fR>] <\fBcgroup_path\fR> ...
+[\fB-g\fR <\fIcontroller\fR>] [-a] <\fBcgroup_path\fR> ...
 
 .SH DESCRIPTION
 The command prints the parameter(s) of input cgroup(s).
@@ -29,6 +29,10 @@ defines controller which values should be displaied.
 This option can be used multiple times.
 
 .TP
+.B -a
+print the variables for all controllers which consists given cgroup
+
+.TP
 .B -n
 do not print headers, i.e. name of groups.
 
diff --git a/src/tools/cgget.c b/src/tools/cgget.c
index d3c22de..4ca064e 100644
--- a/src/tools/cgget.c
+++ b/src/tools/cgget.c
@@ -9,8 +9,10 @@
 
 #include "tools-common.h"
 
-#define MODE_SHOW_HEADERS      1
-#define MODE_SHOW_NAMES                2
+#define MODE_SHOW_HEADERS              1
+#define MODE_SHOW_NAMES                        2
+#define MODE_SHOW_ALL_CONTROLLERS      4
+
 
 void usage(int status, char *program_name)
 {
@@ -19,7 +21,7 @@ void usage(int status, char *program_name)
                        " try %s -h' for more information.\n",
                        program_name);
        else {
-               printf("Usage: %s [-nv] [-r <name>] [-g <controller>]..."\
+               printf("Usage: %s [-nv] [-r<name>] [-g<controller>] [-a] ..."\
                        "<path> ...\n", program_name);
        }
 }
@@ -134,8 +136,9 @@ int display_controller_values(char **controllers, int count,
 
        ret = cgroup_get_cgroup(group);
        if (ret != 0) {
-               fprintf(stderr, "%s: cannot read group '%s': %s\n",
-                       program_name, group_name, cgroup_strerror(ret));
+               if (!(mode && MODE_SHOW_ALL_CONTROLLERS))
+                       fprintf(stderr, "%s: cannot read group '%s': %s\n",
+                               program_name, group_name, cgroup_strerror(ret));
        }
 
        /* for all wanted controllers */
@@ -144,10 +147,16 @@ int display_controller_values(char **controllers, int 
count,
                /* read the controller group data */
                group_controller = cgroup_get_controller(group, controllers[j]);
                if (group_controller == NULL) {
-                       fprintf(stderr, "%s: cannot find controller "\
-                               "'%s' in group '%s'\n", program_name,
-                               controllers[j], group_name);
-                       result = -1;
+                       if (!(mode && MODE_SHOW_ALL_CONTROLLERS))
+                               fprintf(stderr, "%s: cannot find controller "\
+                                       "'%s' in group '%s'\n", program_name,
+                                       controllers[j], group_name);
+                       if (!(mode & MODE_SHOW_ALL_CONTROLLERS)) {
+                               fprintf(stderr, "%s: cannot find controller "\
+                                       "'%s' in group '%s'\n", program_name,
+                                       controllers[j], group_name);
+                               result = -1;
+                       }
                }
 
                /* for each variable of given group print the statistic */
@@ -157,17 +166,43 @@ int display_controller_values(char **controllers, int 
count,
                        if (name != NULL) {
                                ret = display_one_record(name, group_controller,
                                        program_name, mode);
-                               if (ret)
-                                       return ret;
+                               if (ret) {
+                                       result = ret;
+                                       goto err;
+                               }
                        }
                }
        }
 
+err:
        cgroup_free(&group);
        return result;
 
 }
 
+int display_all_controllers(const char *group_name,
+       const char *program_name, int mode)
+{
+       void *handle;
+       int ret;
+       struct cgroup_mount_point controller;
+       char *name;
+       int succ = 0;
+
+       ret = cgroup_get_controller_begin(&handle, &controller);
+
+       /* go through the list of controllers/mount point pairs */
+       while (ret == 0) {
+               name = controller.name;
+               succ |= display_controller_values(&name, 1,
+                       group_name, program_name, mode);
+               ret = cgroup_get_controller_next(&handle, &controller);
+       }
+
+       cgroup_get_controller_end(&handle);
+       return succ;
+}
+
 int add_record_to_buffer(int *p_number,
        int *p_max, char ***p_records, char *new_rec)
 {
@@ -211,7 +246,7 @@ int main(int argc, char *argv[])
        }
 
        /* Parse arguments. */
-       while ((c = getopt(argc, argv, "r:hnvg:")) != -1) {
+       while ((c = getopt(argc, argv, "r:hnvg:a")) != -1) {
                switch (c) {
                case 'h':
                        usage(0, argv[0]);
@@ -247,6 +282,10 @@ int main(int argc, char *argv[])
                                goto err;
                        }
                        break;
+               case 'a':
+                       /* go through cgroups for all possible controllers */
+                       mode |=  MODE_SHOW_ALL_CONTROLLERS;
+                       break;
                default:
                        usage(1, argv[0]);
                        result = -1;
@@ -288,8 +327,13 @@ int main(int argc, char *argv[])
                if (ret)
                        result = ret;
 
-               ret = display_controller_values(controllers,
-                       c_number, argv[i], argv[0], mode);
+               ret = display_controller_values(controllers, c_number, argv[i],
+                       argv[0], mode - (mode & MODE_SHOW_ALL_CONTROLLERS));
+               if (ret)
+                       goto err;
+
+               if (mode & MODE_SHOW_ALL_CONTROLLERS)
+                       display_all_controllers(argv[i], argv[0], mode);
                if (ret)
                        result = ret;
 


------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to