chiark / gitweb /
analyze: various cleanups
authorLennart Poettering <lennart@poettering.net>
Mon, 8 Apr 2013 17:42:48 +0000 (19:42 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 8 Apr 2013 18:35:25 +0000 (20:35 +0200)
man/systemd-analyze.xml
src/analyze/systemd-analyze.c

index c8d0b4743b743ba8d0fdefb0795039b2b07b5b50..9f313d76f111a956e574ad7d8f80e63a4379ed19 100644 (file)
                 been started at what time, highlighting the time they
                 spent on initialization.</para>
 
-                <para><command>systemd-analyze dot</command>
-                Generate textual dependency graph description in dot
-                format for further processing with the GraphViz
+                <para><command>systemd-analyze dot</command> Generate
+                textual dependency graph description in dot format for
+                further processing with the GraphViz
                 <citerefentry><refentrytitle>dot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                 tool. Use a command line like <command>systemd-analyze
-                dot | dot -Tsvg > systemd.svg</command> to generate
-                graphical dependency tree. Unless
+                dot | dot -Tsvg > systemd.svg</command> to generate a
+                graphical dependency tree. Unless
                 <option>--order</option> or <option>--require</option>
                 is passed the generated graph will show both ordering
-                and requirement dependencies.</para>
-
-                <para>Optional patterns may be given at the end. The
-                relationship is printed if any of these matches either
-                lefthand or righthand node.</para>
+                and requirement dependencies. Optional pattern
+                globbing style specifications
+                (e.g. <filename>*.target</filename>) may be given at
+                the end. A unit dependency is included in the graph if
+                any of these patterns match either the origin or
+                destination node.</para>
 
                 <para>If no command is passed <command>systemd-analyze
                 time</command> is implied.</para>
                 code otherwise.</para>
         </refsect1>
 
+        <refsect1>
+                <title>Examples</title>
+
+                <para>This plots all dependencies of any unit whose
+                name starts with "<literal>avahi-daemon.</literal>":</para>
+
+                <programlisting>$ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg
+$ eog avahi.svg</programlisting>
+
+                <para>This plots the dependencies between all known target units:</para>
+
+                <programlisting>systemd-analyze dot --to-pattern='*.target' --from-patter='*.target' | dot -Tsvg > targets.svg
+$ eog targets.svg</programlisting>
+
+
+        </refsect1>
+
         <refsect1>
                 <title>See Also</title>
                 <para>
index ec579282e706300ebe18ff6dfac5c329f1c793c0..e648a4449f04cb03622b5c4cf0728034dc4a6680 100644 (file)
@@ -626,40 +626,48 @@ static int graph_one_property(const char *name, const char *prop, DBusMessageIte
                      dbus_message_iter_next(&sub)) {
                         const char *s;
                         char **p;
-                        bool match_found = true;
+                        bool match_found;
 
                         assert(dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRING);
                         dbus_message_iter_get_basic(&sub, &s);
 
-                        STRV_FOREACH(p, arg_dot_from_patterns) {
+                        if (!strv_isempty(arg_dot_from_patterns)) {
                                 match_found = false;
-                                if (fnmatch(*p, name, 0) == 0) {
-                                        match_found = true;
-                                        break;
-                                }
+
+                                STRV_FOREACH(p, arg_dot_from_patterns)
+                                        if (fnmatch(*p, name, 0) == 0) {
+                                                match_found = true;
+                                                break;
+                                        }
+
+                                if (!match_found)
+                                        continue;
                         }
-                        if (!match_found)
-                                continue;
 
-                        STRV_FOREACH(p, arg_dot_to_patterns) {
+                        if (!strv_isempty(arg_dot_to_patterns)) {
                                 match_found = false;
-                                if (fnmatch(*p, s, 0) == 0) {
-                                        match_found = true;
-                                        break;
-                                }
+
+                                STRV_FOREACH(p, arg_dot_to_patterns)
+                                        if (fnmatch(*p, s, 0) == 0) {
+                                                match_found = true;
+                                                break;
+                                        }
+
+                                if (!match_found)
+                                        continue;
                         }
-                        if (!match_found)
-                                continue;
 
-                        STRV_FOREACH(p, patterns) {
+                        if (!strv_isempty(patterns)) {
                                 match_found = false;
-                                if (fnmatch(*p, name, 0) == 0 || fnmatch(*p, s, 0) == 0) {
-                                        match_found = true;
-                                        break;
-                                }
+
+                                STRV_FOREACH(p, patterns)
+                                        if (fnmatch(*p, name, 0) == 0 || fnmatch(*p, s, 0) == 0) {
+                                                match_found = true;
+                                                break;
+                                        }
+                                if (!match_found)
+                                        continue;
                         }
-                        if (!match_found)
-                                continue;
 
                         printf("\t\"%s\"->\"%s\" %s;\n", name, s, c);
                 }