[systemd-devel] [PATCHv2] systemctl, man: option to list units by state

Lennart Poettering lennart at poettering.net
Tue Jul 16 19:08:20 PDT 2013


On Fri, 17.05.13 12:09, m.wereski at partner.samsung.com (m.wereski at partner.samsung.com) wrote:

> From: Maciej Wereski <m.wereski at partner.samsung.com>
> 
> This allows to show only units with specified SUB or ACTIVE state.

Sounds like a worthwile addition. Sorry for the way too late review. But
in cse you are still interested:

We already support filtering for load states via --type= which is
overloaded for both load states and unit types. I think it would
probably be nicer to have --type= as you suggest, and then overload it
with load state, active state, and sub state. These three namespaces are
closer to each other so that we can avoid clashes easier.

> +static const char *arg_state = NULL;
> +static const char *const failed_str = "failed";

You can just use "failed" insted of failed_str where you need it, no
need to define this.

>  static enum action {
>          ACTION_INVALID,
>          ACTION_SYSTEMCTL,
> @@ -300,8 +301,8 @@ static int compare_unit_info(const void *a, const void *b) {
>  static bool output_show_unit(const struct unit_info *u) {
>          const char *dot;
>  
> -        if (arg_failed)
> -                return streq(u->active_state, "failed");
> +        if (arg_state != NULL)
> +                return (streq(u->sub_state, arg_state) ||
> -                streq(u->active_state, arg_state));

No need for the surrounding parenthesis.

>  
>          return (!arg_types || ((dot = strrchr(u->id, '.')) &&
>                                 strv_find(arg_types, dot+1))) &&
> @@ -4503,7 +4504,7 @@ static int systemctl_help(void) {
>                 "                      ones. To list all units installed on the system, use\n"
>                 "                      the 'list-unit-files' command instead.\n"
>                 "     --reverse        Show reverse dependencies with 'list-dependencies'\n"
> -               "     --failed         Show only failed units\n"
> +               "     --failed         Show only failed units (the same as --state=failed)\n"
>                 "     --full           Don't ellipsize unit names on output\n"
>                 "     --fail           When queueing a new job, fail if conflicting jobs are\n"
>                 "                      pending\n"
> @@ -4536,7 +4537,8 @@ static int systemctl_help(void) {
>                 "     --runtime        Enable unit files only temporarily until next reboot\n"
>                 "  -n --lines=INTEGER  Journal entries to show\n"
>                 "  -o --output=STRING  Change journal output mode (short, short-monotonic,\n"
> -               "                      verbose, export, json, json-pretty, json-sse, cat)\n\n"
> +               "                      verbose, export, json, json-pretty, json-sse, cat)\n"
> +               "     --state=STATE    Show only units with particular
>                                 sub or active state\n\n"

Please move this up to the other filter switches like --type=.

I'd really like to see support for passing multiple states at once, the
same way as we support filtering for multiple types at once.

Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list