summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-01-19 00:22:34 +0100
committerLennart Poettering <lennart@poettering.net>2010-01-19 00:22:34 +0100
commita66d02c3290008d50b2b52f84cfbf46a546ba831 (patch)
treeba2c64f260e8a256c93f5b722dc926d2343b15ca
parent4609154d5513108478f603ff1589e486c001daa9 (diff)
add functions for dumping server state
-rw-r--r--job.c28
-rw-r--r--job.h1
-rw-r--r--main.c10
-rw-r--r--manager.c22
-rw-r--r--manager.h4
-rw-r--r--name.c29
-rw-r--r--name.h6
7 files changed, 94 insertions, 6 deletions
diff --git a/job.c b/job.c
index 689908aeb..87bcd289d 100644
--- a/job.c
+++ b/job.c
@@ -60,3 +60,31 @@ void job_free(Job *j) {
/* Free data and next 'smaller' objects */
free(j);
}
+
+void job_dump(Job *j, FILE*f) {
+
+ static const char* const job_type_table[_JOB_TYPE_MAX] = {
+ [JOB_START] = "START",
+ [JOB_STOP] = "STOP",
+ [JOB_VERIFY_STARTED] = "VERIFY_STARTED",
+ [JOB_RELOAD] = "RELOAD",
+ [JOB_RESTART] = "RESTART",
+ [JOB_TRY_RESTART] = "TRY_RESTART",
+ [JOB_RESTART_FINISH] = "RESTART_FINISH"
+ };
+
+ static const char* const job_state_table[_JOB_STATE_MAX] = {
+ [JOB_WAITING] = "WAITING",
+ [JOB_RUNNING] = "RUNNING",
+ [JOB_DONE] = "DONE"
+ };
+
+ assert(j);
+ assert(f);
+
+ fprintf(f, "Job %u: %s → %s in state %s\n",
+ j->id,
+ name_id(j->name),
+ job_type_table[j->type],
+ job_state_table[j->state]);
+}
diff --git a/job.h b/job.h
index d19f747db..0fc6fec46 100644
--- a/job.h
+++ b/job.h
@@ -53,5 +53,6 @@ struct Job {
Job* job_new(Manager *m, JobType type, Name *name);
int job_link(Job *job);
void job_free(Job *job);
+void job_dump(Job *j, FILE*f);
#endif
diff --git a/main.c b/main.c
index 08ccd4f8d..f19fb6b5c 100644
--- a/main.c
+++ b/main.c
@@ -23,10 +23,12 @@ int main(int argc, char *argv[]) {
goto finish;
}
- if ((r = manager_add_job(m, JOB_START, milestone, JOB_REPLACE, &job)) < 0) {
- fprintf(stderr, "Failed to start default milestone: %s\n", strerror(-r));
- goto finish;
- }
+ manager_dump_names(m, stdout);
+
+ /* if ((r = manager_add_job(m, JOB_START, milestone, JOB_REPLACE, &job)) < 0) { */
+ /* fprintf(stderr, "Failed to start default milestone: %s\n", strerror(-r)); */
+ /* goto finish; */
+ /* } */
retval = 0;
diff --git a/manager.c b/manager.c
index 0ad60b2b0..86ed086eb 100644
--- a/manager.c
+++ b/manager.c
@@ -333,3 +333,25 @@ finish:
*_ret = ret;
return 0;
}
+
+void manager_dump_jobs(Manager *s, FILE *f) {
+ void *state;
+ Job *j;
+
+ assert(s);
+ assert(f);
+
+ HASHMAP_FOREACH(j, s->jobs, state)
+ job_dump(j, f);
+}
+
+void manager_dump_names(Manager *s, FILE *f) {
+ void *state;
+ Name *n;
+
+ assert(s);
+ assert(f);
+
+ HASHMAP_FOREACH(n, s->names, state)
+ name_dump(n, f);
+}
diff --git a/manager.h b/manager.h
index 64c4c9d14..c08f3ccde 100644
--- a/manager.h
+++ b/manager.h
@@ -5,6 +5,7 @@
#include <stdbool.h>
#include <inttypes.h>
+#include <stdio.h>
typedef struct Manager Manager;
@@ -44,4 +45,7 @@ Name *manager_get_name(Manager *m, const char *name);
int manager_load_name(Manager *m, const char *name, Name **_ret);
int manager_add_job(Manager *m, JobType job, Name *name, JobMode mode, Job **_ret);
+void manager_dump_names(Manager *s, FILE *f);
+void manager_dump_jobs(Manager *s, FILE *f);
+
#endif
diff --git a/name.c b/name.c
index f29ce2298..80ce5d5b3 100644
--- a/name.c
+++ b/name.c
@@ -112,7 +112,6 @@ static void bidi_set_free(Name *name, Set *s) {
Name *other;
assert(name);
- assert(s);
/* Frees the set and makes sure we are dropped from the
* inverse pointers */
@@ -360,3 +359,31 @@ int name_merge(Name *name, Name *other) {
return 0;
}
+
+const char* name_id(Name *n) {
+ assert(n);
+
+ return set_first(n->meta.names);
+}
+
+void name_dump(Name *n, FILE *f) {
+
+ static const char* const state_table[_NAME_STATE_MAX] = {
+ [NAME_STUB] = "STUB",
+ [NAME_LOADED] = "LOADED",
+ [NAME_FAILED] = "FAILED"
+ };
+
+ assert(n);
+
+ fprintf(stderr,
+ "Name %s (%s), state %s\n",
+ name_id(n),
+ n->meta.description ? n->meta.description : name_id(n),
+ state_table[n->meta.state]);
+
+ if (n->meta.job) {
+ fprintf(f, "\t▶ ");
+ job_dump(n->meta.job, f);
+ }
+}
diff --git a/name.h b/name.h
index 696953108..116523453 100644
--- a/name.h
+++ b/name.h
@@ -39,7 +39,8 @@ typedef enum NameType {
typedef enum NameState {
NAME_STUB,
NAME_LOADED,
- NAME_FAILED
+ NAME_FAILED,
+ _NAME_STATE_MAX
} NameState;
typedef enum NameDependency {
@@ -276,5 +277,8 @@ void name_free(Name *name);
int name_link(Name *name);
int name_merge(Name *name, Name *other);
int name_augment(Name *n);
+const char* name_id(Name *n);
+
+void name_dump(Name *n, FILE *f);
#endif