chiark / gitweb /
analyze: port over to use bus_open_transport()
authorLennart Poettering <lennart@poettering.net>
Wed, 6 Nov 2013 16:30:39 +0000 (17:30 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 6 Nov 2013 16:30:39 +0000 (17:30 +0100)
man/systemd-analyze.xml
src/analyze/analyze.c

index aefbfc8af7493e92b985b1904d0735f23a7f0eb1..3141361e56306d8f84051eead99eb0418af5a55a 100644 (file)
                                 manager.</para></listitem>
                         </varlistentry>
 
                                 manager.</para></listitem>
                         </varlistentry>
 
+                        <varlistentry>
+                                <term><option>--system</option></term>
+
+                                <listitem><para>Shows performance data
+                                of the system manager. This is the
+                                implied default.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term><option>-H</option></term>
+                                <term><option>--host=</option></term>
+
+                                <listitem><para>Execute operation
+                                remotely. Specify a hostname, or
+                                username and hostname separated by
+                                <literal>@</literal>, to connect
+                                to. This will use SSH to talk to the
+                                remote machine manager
+                                instance.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term><option>-M</option></term>
+                                <term><option>--machine=</option></term>
+
+                                <listitem><para>Execute operation on a
+                                local container. Specify a container
+                                name to connect to.</para></listitem>
+                        </varlistentry>
+
                         <varlistentry>
                                 <term><option>--order</option></term>
                                 <term><option>--require</option></term>
                         <varlistentry>
                                 <term><option>--order</option></term>
                                 <term><option>--require</option></term>
index 9becc72309a5eee283f94f60cbe6afde0269ce0f..8f965e7a8b28ff61d9d268829d1153d554270aeb 100644 (file)
@@ -62,7 +62,6 @@
                 svg("</text>\n");                                       \
         } while(false)
 
                 svg("</text>\n");                                       \
         } while(false)
 
-static UnitFileScope arg_scope = UNIT_FILE_SYSTEM;
 static enum dot {
         DEP_ALL,
         DEP_ORDER,
 static enum dot {
         DEP_ALL,
         DEP_ORDER,
@@ -72,6 +71,9 @@ static char** arg_dot_from_patterns = NULL;
 static char** arg_dot_to_patterns = NULL;
 static usec_t arg_fuzz = 0;
 static bool arg_no_pager = false;
 static char** arg_dot_to_patterns = NULL;
 static usec_t arg_fuzz = 0;
 static bool arg_no_pager = false;
+static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
+static char *arg_host = NULL;
+static bool arg_user = false;
 
 struct boot_times {
         usec_t firmware_time;
 
 struct boot_times {
         usec_t firmware_time;
@@ -1149,34 +1151,36 @@ static int set_log_level(sd_bus *bus, char **args) {
         return 0;
 }
 
         return 0;
 }
 
-static void analyze_help(void) {
+static void help(void) {
 
         pager_open_if_enabled();
 
         printf("%s [OPTIONS...] {COMMAND} ...\n\n"
 
         pager_open_if_enabled();
 
         printf("%s [OPTIONS...] {COMMAND} ...\n\n"
-               "Process systemd profiling information\n\n"
-               "  -h --help           Show this help\n"
-               "     --version        Show package version\n"
-               "     --system         Connect to system manager\n"
-               "     --user           Connect to user service manager\n"
-               "     --order          When generating a dependency graph, show only order\n"
-               "     --require        When generating a dependency graph, show only requirement\n"
+               "Process systemd profiling information.\n\n"
+               "  -h --help               Show this help\n"
+               "     --version            Show package version\n"
+               "     --system             Connect to system manager\n"
+               "     --user               Connect to user manager\n"
+               "  -H --host=[USER@]HOST   Operate on remote host\n"
+               "  -M --machine=CONTAINER  Operate on local container\n"
+               "     --order              When generating a dependency graph, show only order\n"
+               "     --require            When generating a dependency graph, show only requirement\n"
                "     --from-pattern=GLOB, --to-pattern=GLOB\n"
                "     --from-pattern=GLOB, --to-pattern=GLOB\n"
-               "                      When generating a dependency graph, filter only origins\n"
-               "                      or destinations, respectively\n"
-               "     --fuzz=TIMESPAN  When printing the tree of the critical chain, print also\n"
-               "                      services, which finished TIMESPAN earlier, than the\n"
-               "                      latest in the branch. The unit of TIMESPAN is seconds\n"
-               "                      unless specified with a different unit, i.e. 50ms\n"
-               "     --no-pager       Do not pipe output into a pager\n\n"
+               "                          When generating a dependency graph, filter only origins\n"
+               "                          or destinations, respectively\n"
+               "     --fuzz=TIMESPAN      When printing the tree of the critical chain, print also\n"
+               "                          services, which finished TIMESPAN earlier, than the\n"
+               "                          latest in the branch. The unit of TIMESPAN is seconds\n"
+               "                          unless specified with a different unit, i.e. 50ms\n"
+               "     --no-pager           Do not pipe output into a pager\n\n"
                "Commands:\n"
                "Commands:\n"
-               "  time                Print time spent in the kernel before reaching userspace\n"
-               "  blame               Print list of running units ordered by time to init\n"
-               "  critical-chain      Print a tree of the time critical chain of units\n"
-               "  plot                Output SVG graphic showing service initialization\n"
-               "  dot                 Output dependency graph in dot(1) format\n"
-               "  set-log-level LEVEL Set logging threshold for systemd\n"
-               "  dump                Output state serialization of service manager\n",
+               "  time                    Print time spent in the kernel before reaching userspace\n"
+               "  blame                   Print list of running units ordered by time to init\n"
+               "  critical-chain          Print a tree of the time critical chain of units\n"
+               "  plot                    Output SVG graphic showing service initialization\n"
+               "  dot                     Output dependency graph in dot(1) format\n"
+               "  set-log-level LEVEL     Set logging threshold for systemd\n"
+               "  dump                    Output state serialization of service manager\n",
                program_invocation_short_name);
 
         /* When updating this list, including descriptions, apply
                program_invocation_short_name);
 
         /* When updating this list, including descriptions, apply
@@ -1217,22 +1221,23 @@ static int parse_argv(int argc, char *argv[]) {
         assert(argv);
 
         for (;;) {
         assert(argv);
 
         for (;;) {
-                switch (getopt_long(argc, argv, "h", options, NULL)) {
+                switch (getopt_long(argc, argv, "hH:M:", options, NULL)) {
 
                 case 'h':
 
                 case 'h':
-                        analyze_help();
+                        help();
                         return 0;
 
                 case ARG_VERSION:
                         return 0;
 
                 case ARG_VERSION:
-                        puts(PACKAGE_STRING "\n" SYSTEMD_FEATURES);
+                        puts(PACKAGE_STRING);
+                        puts(SYSTEMD_FEATURES);
                         return 0;
 
                 case ARG_USER:
                         return 0;
 
                 case ARG_USER:
-                        arg_scope = UNIT_FILE_USER;
+                        arg_user = true;
                         break;
 
                 case ARG_SYSTEM:
                         break;
 
                 case ARG_SYSTEM:
-                        arg_scope = UNIT_FILE_SYSTEM;
+                        arg_user = false;
                         break;
 
                 case ARG_ORDER:
                         break;
 
                 case ARG_ORDER:
@@ -1265,6 +1270,16 @@ static int parse_argv(int argc, char *argv[]) {
                         arg_no_pager = true;
                         break;
 
                         arg_no_pager = true;
                         break;
 
+                case 'H':
+                        arg_transport = BUS_TRANSPORT_REMOTE;
+                        arg_host = optarg;
+                        break;
+
+                case 'M':
+                        arg_transport = BUS_TRANSPORT_CONTAINER;
+                        arg_host = optarg;
+                        break;
+
                 case -1:
                         return 1;
 
                 case -1:
                         return 1;
 
@@ -1290,13 +1305,9 @@ int main(int argc, char *argv[]) {
         if (r <= 0)
                 goto finish;
 
         if (r <= 0)
                 goto finish;
 
-        if (arg_scope == UNIT_FILE_SYSTEM)
-                r = sd_bus_open_system(&bus);
-        else
-                r = sd_bus_open_user(&bus);
-
+        r = bus_open_transport(arg_transport, arg_host, arg_user, &bus);
         if (r < 0) {
         if (r < 0) {
-                log_error("Failed to connect to bus: %s", strerror(-r));
+                log_error("Failed to create bus connection: %s", strerror(-r));
                 goto finish;
         }
 
                 goto finish;
         }