From 2a341bb9d2a3cd28115e88291414fa67ca7035c3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 1 Jun 2021 15:25:44 +0200 Subject: [PATCH] core: split out core/manager-dump.[ch] This is a fairly specialized topic, let's create a separate file for it. --- src/core/dbus-manager.c | 1 + src/core/execute.c | 1 + src/core/fuzz-unit-file.c | 1 + src/core/main.c | 13 +----- src/core/manager-dump.c | 85 +++++++++++++++++++++++++++++++++++++++ src/core/manager-dump.h | 12 ++++++ src/core/manager.c | 69 +------------------------------ src/core/manager.h | 5 --- src/core/meson.build | 2 + src/test/test-engine.c | 1 + 10 files changed, 106 insertions(+), 84 deletions(-) create mode 100644 src/core/manager-dump.c create mode 100644 src/core/manager-dump.h diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index 128d7778f55..68a108742a3 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -26,6 +26,7 @@ #include "fs-util.h" #include "install.h" #include "log.h" +#include "manager-dump.h" #include "os-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/core/execute.c b/src/core/execute.c index 3d750ee06ea..5c30d0bcbe6 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -64,6 +64,7 @@ #include "log.h" #include "macro.h" #include "manager.h" +#include "manager-dump.h" #include "memory-util.h" #include "missing_fs.h" #include "mkdir.h" diff --git a/src/core/fuzz-unit-file.c b/src/core/fuzz-unit-file.c index 311ffcecc1c..aef29f4cf71 100644 --- a/src/core/fuzz-unit-file.c +++ b/src/core/fuzz-unit-file.c @@ -6,6 +6,7 @@ #include "fuzz.h" #include "install.h" #include "load-fragment.h" +#include "manager-dump.h" #include "string-util.h" #include "unit-serialize.h" #include "utf8.h" diff --git a/src/core/main.c b/src/core/main.c index 1336be494aa..906c1482d73 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -54,6 +54,7 @@ #include "loopback-setup.h" #include "machine-id-setup.h" #include "manager.h" +#include "manager-dump.h" #include "mkdir.h" #include "mount-setup.h" #include "os-util.h" @@ -2500,16 +2501,6 @@ static int initialize_security( return 0; } -static void test_summary(Manager *m) { - assert(m); - - printf("-> By units:\n"); - manager_dump_units(m, stdout, "\t"); - - printf("-> By jobs:\n"); - manager_dump_jobs(m, stdout, "\t"); -} - static int collect_fds(FDSet **ret_fds, const char **ret_error_message) { int r; @@ -2882,7 +2873,7 @@ int main(int argc, char *argv[]) { format_timespan(timespan, sizeof(timespan), after_startup - before_startup, 100 * USEC_PER_MSEC)); if (arg_action == ACTION_TEST) { - test_summary(m); + manager_test_summary(m); retval = EXIT_SUCCESS; goto finish; } diff --git a/src/core/manager-dump.c b/src/core/manager-dump.c new file mode 100644 index 00000000000..850ee365238 --- /dev/null +++ b/src/core/manager-dump.c @@ -0,0 +1,85 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "fd-util.h" +#include "fileio.h" +#include "hashmap.h" +#include "manager-dump.h" +#include "unit-serialize.h" + +void manager_dump_jobs(Manager *s, FILE *f, const char *prefix) { + Job *j; + + assert(s); + assert(f); + + HASHMAP_FOREACH(j, s->jobs) + job_dump(j, f, prefix); +} + +void manager_dump_units(Manager *s, FILE *f, const char *prefix) { + Unit *u; + const char *t; + + assert(s); + assert(f); + + HASHMAP_FOREACH_KEY(u, t, s->units) + if (u->id == t) + unit_dump(u, f, prefix); +} + +void manager_dump(Manager *m, FILE *f, const char *prefix) { + assert(m); + assert(f); + + for (ManagerTimestamp q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) { + const dual_timestamp *t = m->timestamps + q; + char buf[CONST_MAX(FORMAT_TIMESPAN_MAX, FORMAT_TIMESTAMP_MAX)]; + + if (dual_timestamp_is_set(t)) + fprintf(f, "%sTimestamp %s: %s\n", + strempty(prefix), + manager_timestamp_to_string(q), + timestamp_is_set(t->realtime) ? format_timestamp(buf, sizeof buf, t->realtime) : + format_timespan(buf, sizeof buf, t->monotonic, 1)); + } + + manager_dump_units(m, f, prefix); + manager_dump_jobs(m, f, prefix); +} + +int manager_get_dump_string(Manager *m, char **ret) { + _cleanup_free_ char *dump = NULL; + _cleanup_fclose_ FILE *f = NULL; + size_t size; + int r; + + assert(m); + assert(ret); + + f = open_memstream_unlocked(&dump, &size); + if (!f) + return -errno; + + manager_dump(m, f, NULL); + + r = fflush_and_check(f); + if (r < 0) + return r; + + f = safe_fclose(f); + + *ret = TAKE_PTR(dump); + + return 0; +} + +void manager_test_summary(Manager *m) { + assert(m); + + printf("-> By units:\n"); + manager_dump_units(m, stdout, "\t"); + + printf("-> By jobs:\n"); + manager_dump_jobs(m, stdout, "\t"); +} diff --git a/src/core/manager-dump.h b/src/core/manager-dump.h new file mode 100644 index 00000000000..317a4b641ce --- /dev/null +++ b/src/core/manager-dump.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include + +#include "manager.h" + +void manager_dump_jobs(Manager *s, FILE *f, const char *prefix); +void manager_dump_units(Manager *s, FILE *f, const char *prefix); +void manager_dump(Manager *s, FILE *f, const char *prefix); +int manager_get_dump_string(Manager *m, char **ret); +void manager_test_summary(Manager *m); diff --git a/src/core/manager.c b/src/core/manager.c index d96280667a6..dd6e7693d09 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -55,6 +55,7 @@ #include "log.h" #include "macro.h" #include "manager.h" +#include "manager-dump.h" #include "memory-util.h" #include "mkdir.h" #include "parse-util.h" @@ -2154,74 +2155,6 @@ int manager_load_startable_unit_or_warn( return 0; } -void manager_dump_jobs(Manager *s, FILE *f, const char *prefix) { - Job *j; - - assert(s); - assert(f); - - HASHMAP_FOREACH(j, s->jobs) - job_dump(j, f, prefix); -} - -void manager_dump_units(Manager *s, FILE *f, const char *prefix) { - Unit *u; - const char *t; - - assert(s); - assert(f); - - HASHMAP_FOREACH_KEY(u, t, s->units) - if (u->id == t) - unit_dump(u, f, prefix); -} - -void manager_dump(Manager *m, FILE *f, const char *prefix) { - assert(m); - assert(f); - - for (ManagerTimestamp q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) { - const dual_timestamp *t = m->timestamps + q; - char buf[CONST_MAX(FORMAT_TIMESPAN_MAX, FORMAT_TIMESTAMP_MAX)]; - - if (dual_timestamp_is_set(t)) - fprintf(f, "%sTimestamp %s: %s\n", - strempty(prefix), - manager_timestamp_to_string(q), - timestamp_is_set(t->realtime) ? format_timestamp(buf, sizeof buf, t->realtime) : - format_timespan(buf, sizeof buf, t->monotonic, 1)); - } - - manager_dump_units(m, f, prefix); - manager_dump_jobs(m, f, prefix); -} - -int manager_get_dump_string(Manager *m, char **ret) { - _cleanup_free_ char *dump = NULL; - _cleanup_fclose_ FILE *f = NULL; - size_t size; - int r; - - assert(m); - assert(ret); - - f = open_memstream_unlocked(&dump, &size); - if (!f) - return -errno; - - manager_dump(m, f, NULL); - - r = fflush_and_check(f); - if (r < 0) - return r; - - f = safe_fclose(f); - - *ret = TAKE_PTR(dump); - - return 0; -} - void manager_clear_jobs(Manager *m) { Job *j; diff --git a/src/core/manager.h b/src/core/manager.h index c4d4b2c375b..b3e7c68e6dd 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -485,11 +485,6 @@ int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode int manager_add_job_by_name_and_warn(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, Job **ret); int manager_propagate_reload(Manager *m, Unit *unit, JobMode mode, sd_bus_error *e); -void manager_dump_units(Manager *s, FILE *f, const char *prefix); -void manager_dump_jobs(Manager *s, FILE *f, const char *prefix); -void manager_dump(Manager *s, FILE *f, const char *prefix); -int manager_get_dump_string(Manager *m, char **ret); - void manager_clear_jobs(Manager *m); void manager_unwatch_pid(Manager *m, pid_t pid); diff --git a/src/core/meson.build b/src/core/meson.build index 06f0e8b5db3..e696d277271 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -85,6 +85,8 @@ libcore_sources = ''' locale-setup.h manager.c manager.h + manager-dump.c + manager-dump.h mount.c mount.h namespace.c diff --git a/src/test/test-engine.c b/src/test/test-engine.c index 1039709b892..6dc16193d37 100644 --- a/src/test/test-engine.c +++ b/src/test/test-engine.c @@ -5,6 +5,7 @@ #include "bus-util.h" #include "manager.h" +#include "manager-dump.h" #include "rm-rf.h" #include "service.h" #include "special.h" -- 2.47.3