add functions for dumping server state

This commit is contained in:
Lennart Poettering 2010-01-19 00:22:34 +01:00
parent 4609154d55
commit a66d02c329
7 changed files with 94 additions and 6 deletions

28
job.c
View File

@ -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]);
}

1
job.h
View File

@ -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

10
main.c
View File

@ -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;

View File

@ -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);
}

View File

@ -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

29
name.c
View File

@ -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);
}
}

6
name.h
View File

@ -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