/** * Restart a monitor * @param dcb Client DCB * @param tree Parse tree */ void exec_restart_monitor(DCB *dcb, MAXINFO_TREE *tree) { char errmsg[120]; if (tree && tree->value) { MONITOR* monitor = monitor_find(tree->value); if (monitor) { monitorStart(monitor, NULL); maxinfo_send_ok(dcb); } else { if (strlen(tree->value) > 80) // Prevent buffer overrun { tree->value[80] = 0; } sprintf(errmsg, "Invalid argument '%s'", tree->value); maxinfo_send_error(dcb, 0, errmsg); } } else { sprintf(errmsg, "Missing argument for 'RESTART MONITOR'"); maxinfo_send_error(dcb, 0, errmsg); } }
static int stream_monitor_attach(STREAM_STATS_MONITOR_T *pMonitor, STREAM_STATS_T *pStats) { int rc = 0; STREAM_STATS_T *pNode = NULL; if(!pMonitor || !pMonitor->active || !pStats) { return -1; } pthread_mutex_lock(&pMonitor->mtx); if(monitor_find(pMonitor, pStats)) { pthread_mutex_unlock(&pMonitor->mtx); return -1; } if(!pMonitor->plist) { pMonitor->plist = pStats; } else { pNode = pMonitor->plist; pMonitor->plist = pStats; } pStats->pnext = pNode; gettimeofday(&pStats->tvstart, NULL); pStats->pMonitor = pMonitor; pMonitor->count++; //fprintf(stderr, "ATTACH COUNT:%d\n", pMonitor->count); pthread_mutex_unlock(&pMonitor->mtx); return rc; }