bmsd/nodes.c

changeset 686
ca1fbb3bd3db
parent 684
ccb9f24d0fe9
child 695
cfe232710027
equal deleted inserted replaced
685:a4fcdf24b5e7 686:ca1fbb3bd3db
292 sys_fermenter_list *tmpf; 292 sys_fermenter_list *tmpf;
293 sys_co2meter_list *tmpc; 293 sys_co2meter_list *tmpc;
294 sys_ispindel_list *tmpi; 294 sys_ispindel_list *tmpi;
295 time_t now = time(NULL); 295 time_t now = time(NULL);
296 char *msg = NULL; 296 char *msg = NULL;
297 bool report = false;
298 297
299 for (tmpn = nodes; tmpn; tmpn = tmpn->next) { 298 for (tmpn = nodes; tmpn; tmpn = tmpn->next) {
300 // if (debug) 299 // if (debug)
301 // printf("%-20s online %s %ld %d\n", tmpn->node, tmpn->online ? "yes":"no ", tmpn->lastseen, tmpn->interval); 300 // printf("%-20s online %s %ld %d\n", tmpn->node, tmpn->online ? "yes":"no ", tmpn->lastseen, tmpn->interval);
302 if (tmpn->online && ((now - tmpn->lastseen) > (tmpn->interval * 2 + 5))) { // 2 times interval + 5 seconds 301 if (tmpn->online && ((now - tmpn->lastseen) > (tmpn->interval * 2 + 5))) { // 2 times interval + 5 seconds
303 syslog(LOG_NOTICE, "Timeout node `%s/%s' after %ld seconds", tmpn->group_id, tmpn->node, (now - tmpn->lastseen)); 302 syslog(LOG_NOTICE, "Timeout node `%s/%s' after %ld seconds", tmpn->group_id, tmpn->node, (now - tmpn->lastseen));
304 report = true;
305 tmpn->online = false; 303 tmpn->online = false;
306 node_mysql_death(tmpn->node); 304 node_mysql_death(tmpn->node);
307 msg = xstrcpy((char *)"{\"node\":\""); 305 msg = xstrcpy((char *)"{\"node\":\"");
308 msg = xstrcat(msg, tmpn->node); 306 msg = xstrcat(msg, tmpn->node);
309 msg = xstrcat(msg, (char *)"\",\"group\":\""); 307 msg = xstrcat(msg, (char *)"\",\"group\":\"");
370 } 368 }
371 } 369 }
372 } 370 }
373 } 371 }
374 } 372 }
375
376 if (report)
377 status_change();
378 } 373 }
379 374
380 375
381 376
382 void status_change(void)
383 {
384 sys_node_list *tmpn;
385 sys_fermenter_list *tmpf;
386 sys_co2meter_list *tmpc;
387 sys_ispindel_list *tmpi;
388 char *msg = NULL;
389 bool comma = false;
390
391 msg = xstrcpy((char *)"{\"status\":{\"nodes\":[");
392
393 for (tmpn = nodes; tmpn; tmpn = tmpn->next) {
394 if (comma)
395 msg = xstrcat(msg, (char *)",");
396 comma = true;
397 msg = xstrcat(msg, (char *)"{\"uuid\":\"");
398 msg = xstrcat(msg, tmpn->uuid);
399 msg = xstrcat(msg, (char *)"\",\"node\":\"");
400 msg = xstrcat(msg, tmpn->node);
401 msg = xstrcat(msg, (char *)"\",\"online\":");
402 msg = xstrcat(msg, (tmpn->online) ? (char *)"1":(char *)"0");
403 msg = xstrcat(msg, (char *)"}");
404 }
405
406 msg = xstrcat(msg, (char *)"],\"fermenters\":[");
407 comma = false;
408 for (tmpf = fermenters; tmpf; tmpf = tmpf->next) {
409 if (comma)
410 msg = xstrcat(msg, (char *)",");
411 comma = true;
412 msg = xstrcat(msg, (char *)"{\"uuid\":\"");
413 msg = xstrcat(msg, tmpf->uuid);
414 msg = xstrcat(msg, (char *)"\",\"node\":\"");
415 msg = xstrcat(msg, tmpf->node);
416 msg = xstrcat(msg, (char *)"\",\"unit\":\"");
417 msg = xstrcat(msg, tmpf->alias);
418 msg = xstrcat(msg, (char *)"\",\"online\":");
419 msg = xstrcat(msg, (tmpf->online) ? (char *)"1":(char *)"0");
420 msg = xstrcat(msg, (char *)"}");
421 }
422
423 msg = xstrcat(msg, (char *)"],\"co2meters\":[");
424 comma = false;
425 for (tmpc = co2meters; tmpc; tmpc = tmpc->next) {
426 if (comma)
427 msg = xstrcat(msg, (char *)",");
428 comma = true;
429 msg = xstrcat(msg, (char *)"{\"uuid\":\"");
430 msg = xstrcat(msg, tmpc->uuid);
431 msg = xstrcat(msg, (char *)"\",\"node\":\"");
432 msg = xstrcat(msg, tmpc->node);
433 msg = xstrcat(msg, (char *)"\",\"unit\":\"");
434 msg = xstrcat(msg, tmpc->alias);
435 msg = xstrcat(msg, (char *)"\",\"online\":");
436 msg = xstrcat(msg, (tmpc->online) ? (char *)"1":(char *)"0");
437 msg = xstrcat(msg, (char *)"}");
438 }
439
440 msg = xstrcat(msg, (char *)"],\"ispindels\":[");
441 comma = false;
442 for (tmpi = ispindels; tmpi; tmpi = tmpi->next) {
443 if (comma)
444 msg = xstrcat(msg, (char *)",");
445 comma = true;
446 msg = xstrcat(msg, (char *)"{\"uuid\":\"");
447 msg = xstrcat(msg, tmpi->uuid);
448 msg = xstrcat(msg, (char *)"\",\"node\":\"");
449 msg = xstrcat(msg, tmpi->node);
450 msg = xstrcat(msg, (char *)"\",\"unit\":\"");
451 msg = xstrcat(msg, tmpi->alias);
452 msg = xstrcat(msg, (char *)"\",\"online\":");
453 msg = xstrcat(msg, (tmpi->online) ? (char *)"1":(char *)"0");
454 msg = xstrcat(msg, (char *)"}");
455 }
456
457 msg = xstrcat(msg, (char *)"]}}");
458 // syslog(LOG_NOTICE, msg);
459 ws_broadcast(msg);
460 free(msg);
461 msg = NULL;
462 }
463
464

mercurial