]> git.proxmox.com Git - mirror_frr.git/commitdiff
watchfrr: add status command
authorDavid Lamparter <equinox@opensourcerouting.org>
Fri, 30 Nov 2018 16:56:42 +0000 (17:56 +0100)
committerDavid Lamparter <equinox@opensourcerouting.org>
Thu, 6 Dec 2018 22:04:09 +0000 (23:04 +0100)
Just to see WTF is going on inside watchfrr...

Signed-off-by: David Lamparter <equinox@diac24.net>
watchfrr/watchfrr.c
watchfrr/watchfrr.h
watchfrr/watchfrr_vty.c

index b494eb68914c63b7797fd14a75e497ad88216c2b..5230ec383f2bd9fad47473ed262666d60058843e 100644 (file)
@@ -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");
index ee16846a1dc9029244e44b85a5d3bb6d3fce43c7..c5f54769bd3083087f809b3a9868b911b5c55e75 100644 (file)
@@ -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.
  *
index 1bfc41f255b90f08f73241e280d2ce3b70a72ddf..9b844d67f25d0aa427d945c51d4d7a75d52710fb 100644 (file)
@@ -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);
 }