mirror of
https://github.com/systemd/systemd.git
synced 2025-01-27 18:04:05 +03:00
Merge pull request #14017 from poettering/analyze-calendar-tweaks
Add --base-time= for systemd-analyze calendar
This commit is contained in:
commit
a53c38f1a2
2
TODO
2
TODO
@ -37,6 +37,8 @@ Features:
|
|||||||
may be used to mark a whole binary as non-coredumpable. Would fix:
|
may be used to mark a whole binary as non-coredumpable. Would fix:
|
||||||
https://bugs.freedesktop.org/show_bug.cgi?id=69447
|
https://bugs.freedesktop.org/show_bug.cgi?id=69447
|
||||||
|
|
||||||
|
* teach parse_timestamp() timezones like the calendar spec already knows it
|
||||||
|
|
||||||
* beef up hibernation to optionally do swapon/swapoff immediately before/after
|
* beef up hibernation to optionally do swapon/swapoff immediately before/after
|
||||||
the hibernation
|
the hibernation
|
||||||
|
|
||||||
|
@ -778,6 +778,13 @@ Service b@0.service not loaded, b.socket cannot be started.
|
|||||||
iterations the specified calendar expression will elapse next. Defaults to 1.</para></listitem>
|
iterations the specified calendar expression will elapse next. Defaults to 1.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--base-time=<replaceable>TIMESTAMP</replaceable></option></term>
|
||||||
|
|
||||||
|
<listitem><para>When used with the <command>calendar</command> command, show next iterations relative
|
||||||
|
to the specified point in time. If not specified defaults to the current time.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<xi:include href="user-system-options.xml" xpointer="host" />
|
<xi:include href="user-system-options.xml" xpointer="host" />
|
||||||
<xi:include href="user-system-options.xml" xpointer="machine" />
|
<xi:include href="user-system-options.xml" xpointer="machine" />
|
||||||
|
|
||||||
|
@ -84,6 +84,7 @@ static bool arg_man = true;
|
|||||||
static bool arg_generators = false;
|
static bool arg_generators = false;
|
||||||
static const char *arg_root = NULL;
|
static const char *arg_root = NULL;
|
||||||
static unsigned arg_iterations = 1;
|
static unsigned arg_iterations = 1;
|
||||||
|
static usec_t arg_base_time = USEC_INFINITY;
|
||||||
|
|
||||||
STATIC_DESTRUCTOR_REGISTER(arg_dot_from_patterns, strv_freep);
|
STATIC_DESTRUCTOR_REGISTER(arg_dot_from_patterns, strv_freep);
|
||||||
STATIC_DESTRUCTOR_REGISTER(arg_dot_to_patterns, strv_freep);
|
STATIC_DESTRUCTOR_REGISTER(arg_dot_to_patterns, strv_freep);
|
||||||
@ -2136,7 +2137,10 @@ static int test_calendar(int argc, char *argv[], void *userdata) {
|
|||||||
char **p;
|
char **p;
|
||||||
usec_t n;
|
usec_t n;
|
||||||
|
|
||||||
n = now(CLOCK_REALTIME); /* We want to use the same "base" for all expressions */
|
if (arg_base_time != USEC_INFINITY)
|
||||||
|
n = arg_base_time;
|
||||||
|
else
|
||||||
|
n = now(CLOCK_REALTIME); /* We want to use the same "base" for all expressions */
|
||||||
|
|
||||||
STRV_FOREACH(p, strv_skip(argv, 1)) {
|
STRV_FOREACH(p, strv_skip(argv, 1)) {
|
||||||
r = test_calendar_one(n, *p);
|
r = test_calendar_one(n, *p);
|
||||||
@ -2258,6 +2262,7 @@ static int help(int argc, char *argv[], void *userdata) {
|
|||||||
" --man[=BOOL] Do [not] check for existence of man pages\n"
|
" --man[=BOOL] Do [not] check for existence of man pages\n"
|
||||||
" --generators[=BOOL] Do [not] run unit generators (requires privileges)\n"
|
" --generators[=BOOL] Do [not] run unit generators (requires privileges)\n"
|
||||||
" --iterations=N Show the specified number of iterations\n"
|
" --iterations=N Show the specified number of iterations\n"
|
||||||
|
" --base-time=TIMESTAMP Calculate calendar times relative to specified time\n"
|
||||||
"\nCommands:\n"
|
"\nCommands:\n"
|
||||||
" time Print time spent in the kernel\n"
|
" time Print time spent in the kernel\n"
|
||||||
" blame Print list of running units ordered by time to init\n"
|
" blame Print list of running units ordered by time to init\n"
|
||||||
@ -2307,6 +2312,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||||||
ARG_MAN,
|
ARG_MAN,
|
||||||
ARG_GENERATORS,
|
ARG_GENERATORS,
|
||||||
ARG_ITERATIONS,
|
ARG_ITERATIONS,
|
||||||
|
ARG_BASE_TIME,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct option options[] = {
|
static const struct option options[] = {
|
||||||
@ -2327,6 +2333,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||||||
{ "host", required_argument, NULL, 'H' },
|
{ "host", required_argument, NULL, 'H' },
|
||||||
{ "machine", required_argument, NULL, 'M' },
|
{ "machine", required_argument, NULL, 'M' },
|
||||||
{ "iterations", required_argument, NULL, ARG_ITERATIONS },
|
{ "iterations", required_argument, NULL, ARG_ITERATIONS },
|
||||||
|
{ "base-time", required_argument, NULL, ARG_BASE_TIME },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2433,6 +2440,13 @@ static int parse_argv(int argc, char *argv[]) {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ARG_BASE_TIME:
|
||||||
|
r = parse_timestamp(optarg, &arg_base_time);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to parse --base-time= parameter: %s", optarg);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -2472,7 +2486,6 @@ static int run(int argc, char *argv[]) {
|
|||||||
{ "get-log-level", VERB_ANY, 1, 0, get_log_level },
|
{ "get-log-level", VERB_ANY, 1, 0, get_log_level },
|
||||||
{ "set-log-target", 2, 2, 0, set_log_target },
|
{ "set-log-target", 2, 2, 0, set_log_target },
|
||||||
{ "get-log-target", VERB_ANY, 1, 0, get_log_target },
|
{ "get-log-target", VERB_ANY, 1, 0, get_log_target },
|
||||||
|
|
||||||
{ "dump", VERB_ANY, 1, 0, dump },
|
{ "dump", VERB_ANY, 1, 0, dump },
|
||||||
{ "cat-config", 2, VERB_ANY, 0, cat_config },
|
{ "cat-config", 2, VERB_ANY, 0, cat_config },
|
||||||
{ "unit-files", VERB_ANY, VERB_ANY, 0, do_unit_files },
|
{ "unit-files", VERB_ANY, VERB_ANY, 0, do_unit_files },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user