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 |
|