]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
This patch adds to cgget option -a:
authorIvana Hutarova Varekova <varekova@redhat.com>
Mon, 8 Feb 2010 12:32:26 +0000 (13:32 +0100)
committerBalbir Singh <balbir@linux.vnet.ibm.com>
Wed, 10 Feb 2010 11:13:37 +0000 (16:43 +0530)
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 <varekova@redhat.com>
Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
doc/man/cgget.1
src/tools/cgget.c

index 67f6befa951838c20372c680ccddf59f48220233..f02fbbad64e4e0531f2dfdde54744075a77d6aca 100644 (file)
@@ -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).
@@ -28,6 +28,10 @@ This option can be used multiple times.
 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.
index d3c22de0029c6382b2e080f1673ffc6dbc77eb3e..4ca064e750eb456f4f67f10570477e9ae8d992ef 100644 (file)
@@ -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;