diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2018-11-30 17:56:42 +0100 | 
|---|---|---|
| committer | David Lamparter <equinox@opensourcerouting.org> | 2018-12-06 23:05:45 +0100 | 
| commit | af568444cba565370a978bdc61a43c024df913fd (patch) | |
| tree | 2738f123424c04ccfa229370e6390c734aa5d574 /watchfrr | |
| parent | 75f8b0e41b500b02675222515f3173c4effebdfe (diff) | |
watchfrr: add status command
Just to see WTF is going on inside watchfrr...
Signed-off-by: David Lamparter <equinox@diac24.net>
Diffstat (limited to 'watchfrr')
| -rw-r--r-- | watchfrr/watchfrr.c | 27 | ||||
| -rw-r--r-- | watchfrr/watchfrr.h | 4 | ||||
| -rw-r--r-- | watchfrr/watchfrr_vty.c | 11 | 
3 files changed, 41 insertions, 1 deletions
diff --git a/watchfrr/watchfrr.c b/watchfrr/watchfrr.c index 35a633b158..e28da6db8c 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 ee16846a1d..c5f54769bd 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 1bfc41f255..9b844d67f2 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);  }  | 
