bmsd/nodes.c

changeset 684
ccb9f24d0fe9
parent 677
6e82fece1f8f
child 686
ca1fbb3bd3db
--- a/bmsd/nodes.c	Tue May 19 22:48:59 2020 +0200
+++ b/bmsd/nodes.c	Wed May 20 21:49:09 2020 +0200
@@ -294,12 +294,14 @@
     sys_ispindel_list	*tmpi;
     time_t		now = time(NULL);
     char		*msg = NULL;
+    bool		report = false;
 
     for (tmpn = nodes; tmpn; tmpn = tmpn->next) {
 //	if (debug)
 //	    printf("%-20s online %s  %ld  %d\n", tmpn->node, tmpn->online ? "yes":"no ", tmpn->lastseen, tmpn->interval);
 	if (tmpn->online && ((now - tmpn->lastseen) > (tmpn->interval * 2 + 5))) { // 2 times interval + 5 seconds
 	    syslog(LOG_NOTICE, "Timeout node `%s/%s' after %ld seconds", tmpn->group_id, tmpn->node, (now - tmpn->lastseen));
+	    report = true;
 	    tmpn->online = false;
 	    node_mysql_death(tmpn->node);
 	    msg = xstrcpy((char *)"{\"node\":\"");
@@ -370,6 +372,93 @@
 	    }
 	}
     }
+
+    if (report)
+	status_change();
 }
 
 
+
+void status_change(void)
+{
+    sys_node_list       *tmpn;
+    sys_fermenter_list  *tmpf;
+    sys_co2meter_list   *tmpc;
+    sys_ispindel_list   *tmpi;
+    char                *msg = NULL;
+    bool                comma = false;
+
+    msg = xstrcpy((char *)"{\"status\":{\"nodes\":[");
+
+    for (tmpn = nodes; tmpn; tmpn = tmpn->next) {
+	if (comma)
+	    msg = xstrcat(msg, (char *)",");
+	comma = true;
+	msg = xstrcat(msg, (char *)"{\"uuid\":\"");
+	msg = xstrcat(msg, tmpn->uuid);
+	msg = xstrcat(msg, (char *)"\",\"node\":\"");
+	msg = xstrcat(msg, tmpn->node);
+	msg = xstrcat(msg, (char *)"\",\"online\":");
+	msg = xstrcat(msg, (tmpn->online) ? (char *)"1":(char *)"0");
+	msg = xstrcat(msg, (char *)"}");
+    }
+
+    msg = xstrcat(msg, (char *)"],\"fermenters\":[");
+    comma = false;
+    for (tmpf = fermenters; tmpf; tmpf = tmpf->next) {
+	if (comma)
+            msg = xstrcat(msg, (char *)",");
+        comma = true;
+	msg = xstrcat(msg, (char *)"{\"uuid\":\"");
+        msg = xstrcat(msg, tmpf->uuid);
+        msg = xstrcat(msg, (char *)"\",\"node\":\"");
+        msg = xstrcat(msg, tmpf->node);
+        msg = xstrcat(msg, (char *)"\",\"unit\":\"");
+        msg = xstrcat(msg, tmpf->alias);
+        msg = xstrcat(msg, (char *)"\",\"online\":");
+        msg = xstrcat(msg, (tmpf->online) ? (char *)"1":(char *)"0");
+        msg = xstrcat(msg, (char *)"}");
+    }
+
+    msg = xstrcat(msg, (char *)"],\"co2meters\":[");
+    comma = false;
+    for (tmpc = co2meters; tmpc; tmpc = tmpc->next) {
+	if (comma)
+            msg = xstrcat(msg, (char *)",");
+        comma = true;
+        msg = xstrcat(msg, (char *)"{\"uuid\":\"");
+        msg = xstrcat(msg, tmpc->uuid);
+        msg = xstrcat(msg, (char *)"\",\"node\":\"");
+        msg = xstrcat(msg, tmpc->node);
+        msg = xstrcat(msg, (char *)"\",\"unit\":\"");
+        msg = xstrcat(msg, tmpc->alias);
+        msg = xstrcat(msg, (char *)"\",\"online\":");
+        msg = xstrcat(msg, (tmpc->online) ? (char *)"1":(char *)"0");
+        msg = xstrcat(msg, (char *)"}");
+    }
+
+    msg = xstrcat(msg, (char *)"],\"ispindels\":[");
+    comma = false;
+    for (tmpi = ispindels; tmpi; tmpi = tmpi->next) {
+	if (comma)
+            msg = xstrcat(msg, (char *)",");
+        comma = true;
+        msg = xstrcat(msg, (char *)"{\"uuid\":\"");
+        msg = xstrcat(msg, tmpi->uuid);
+        msg = xstrcat(msg, (char *)"\",\"node\":\"");
+        msg = xstrcat(msg, tmpi->node);
+        msg = xstrcat(msg, (char *)"\",\"unit\":\"");
+        msg = xstrcat(msg, tmpi->alias);
+        msg = xstrcat(msg, (char *)"\",\"online\":");
+        msg = xstrcat(msg, (tmpi->online) ? (char *)"1":(char *)"0");
+        msg = xstrcat(msg, (char *)"}");
+    }
+
+    msg = xstrcat(msg, (char *)"]}}");
+//    syslog(LOG_NOTICE, msg);
+    ws_broadcast(msg);
+    free(msg);
+    msg = NULL;
+}
+
+

mercurial