analyze: various cleanups

This commit is contained in:
Lennart Poettering 2013-04-08 19:42:48 +02:00
parent 903a0b07e0
commit 816f25e86a
2 changed files with 62 additions and 36 deletions

View File

@ -93,20 +93,21 @@
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
a 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>
@ -191,6 +192,23 @@
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>

View 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;
}
}
if (!match_found)
continue;
STRV_FOREACH(p, arg_dot_to_patterns) {
match_found = false;
if (fnmatch(*p, s, 0) == 0) {
match_found = true;
break;
}
}
if (!match_found)
continue;
STRV_FOREACH(p, arg_dot_from_patterns)
if (fnmatch(*p, name, 0) == 0) {
match_found = true;
break;
}
STRV_FOREACH(p, patterns) {
match_found = false;
if (fnmatch(*p, name, 0) == 0 || fnmatch(*p, s, 0) == 0) {
match_found = true;
break;
}
if (!match_found)
continue;
}
if (!strv_isempty(arg_dot_to_patterns)) {
match_found = false;
STRV_FOREACH(p, arg_dot_to_patterns)
if (fnmatch(*p, s, 0) == 0) {
match_found = true;
break;
}
if (!match_found)
continue;
}
if (!strv_isempty(patterns)) {
match_found = false;
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);
}