From a0eccbf3c07d89cf22d56afb5db1a3ceb7edf3e7 Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Fri, 30 Nov 2018 17:56:42 +0100 Subject: [PATCH] watchfrr: add status command Just to see WTF is going on inside watchfrr... Signed-off-by: David Lamparter --- watchfrr/watchfrr.c | 27 ++++++++++++++++++++++++++- watchfrr/watchfrr.h | 4 ++++ watchfrr/watchfrr_vty.c | 11 +++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/watchfrr/watchfrr.c b/watchfrr/watchfrr.c index b494eb689..5230ec383 100644 --- a/watchfrr/watchfrr.c +++ b/watchfrr/watchfrr.c @@ -73,7 +73,7 @@ typedef enum { } restart_phase_t; static const char *phase_str[] = { - "None", + "Idle", "Startup", "Stop jobs running", "Waiting for other daemons to come down", @@ -970,6 +970,31 @@ bool check_all_up(void) return true; } +void watchfrr_status(struct vty *vty) +{ + struct daemon *dmn; + struct timeval delay; + + vty_out(vty, "watchfrr global phase: %s\n", phase_str[gs.phase]); + if (gs.restart.pid) + vty_out(vty, " global restart running, pid %ld\n", + (long)gs.restart.pid); + + for (dmn = gs.daemons; dmn; dmn = dmn->next) { + vty_out(vty, " %-20s %s\n", dmn->name, state_str[dmn->state]); + if (dmn->restart.pid) + vty_out(vty, " restart running, pid %ld\n", + (long)dmn->restart.pid); + else if (dmn->state == DAEMON_DOWN && + time_elapsed(&delay, &dmn->restart.time)->tv_sec + < dmn->restart.interval) + vty_out(vty, " restarting in %ld seconds" + " (%lds backoff interval)\n", + dmn->restart.interval - delay.tv_sec, + dmn->restart.interval); + } +} + static void sigint(void) { zlog_notice("Terminating on signal"); diff --git a/watchfrr/watchfrr.h b/watchfrr/watchfrr.h index ee16846a1..c5f54769b 100644 --- a/watchfrr/watchfrr.h +++ b/watchfrr/watchfrr.h @@ -29,6 +29,10 @@ extern void watchfrr_vty_init(void); extern pid_t integrated_write_pid; extern void integrated_write_sigchld(int status); + +struct vty; +extern void watchfrr_status(struct vty *vty); + /* * Check if all daemons we are monitoring are in the DAEMON_UP state. * diff --git a/watchfrr/watchfrr_vty.c b/watchfrr/watchfrr_vty.c index 1bfc41f25..9b844d67f 100644 --- a/watchfrr/watchfrr_vty.c +++ b/watchfrr/watchfrr_vty.c @@ -124,6 +124,16 @@ DEFUN_NOSH (show_debugging_watchfrr, return CMD_SUCCESS; } +DEFUN (show_watchfrr, + show_watchfrr_cmd, + "show watchfrr", + SHOW_STR + WATCHFRR_STR) +{ + watchfrr_status(vty); + return CMD_SUCCESS; +} + void integrated_write_sigchld(int status) { uint8_t reply[4] = {0, 0, 0, CMD_WARNING}; @@ -159,4 +169,5 @@ void watchfrr_vty_init(void) install_element(ENABLE_NODE, &config_write_integrated_cmd); install_element(ENABLE_NODE, &show_debugging_watchfrr_cmd); install_element(CONFIG_NODE, &show_debugging_watchfrr_cmd); + install_element(VIEW_NODE, &show_watchfrr_cmd); } -- 2.39.5