static int _noit_check_log_delete(mtev_log_stream_t ls, noit_check_t *check) { stats_t *c; struct timeval *whence; char uuid_str[256*3+37]; SETUP_LOG(delete, ); MAKE_CHECK_UUID_STR(uuid_str, sizeof(uuid_str), status_log, check); c = noit_check_get_stats_current(check); whence = noit_check_stats_whence(c, NULL); return mtev_log(ls, whence, __FILE__, __LINE__, "D\t%lu.%03lu\t%s\t%s\n", SECPART(whence), MSECPART(whence), uuid_str, check->name); }
static void log_histo(struct histogram_config *conf, noit_check_t *check, u_int64_t whence_s, const char *metric_name, histogram_t *h, mtev_boolean live_feed) { mtev_boolean extended_id = mtev_false; char uuid_str[256*3+37]; const char *v; char *hist_serial = NULL; char *hist_encode = NULL; struct timeval whence; ssize_t est, enc_est; whence.tv_sec = whence_s; whence.tv_usec = 0; if(!conf->histogram) return; SETUP_LOG(metrics, ); if(metrics_log) { v = mtev_log_stream_get_property(metrics_log, "extended_id"); if(v && !strcmp(v, "on")) extended_id = mtev_true; } uuid_str[0] = '\0'; if(extended_id) { strlcat(uuid_str, check->target, sizeof(uuid_str)-37); strlcat(uuid_str, "`", sizeof(uuid_str)-37); strlcat(uuid_str, check->module, sizeof(uuid_str)-37); strlcat(uuid_str, "`", sizeof(uuid_str)-37); strlcat(uuid_str, check->name, sizeof(uuid_str)-37); strlcat(uuid_str, "`", sizeof(uuid_str)-37); } uuid_unparse_lower(check->checkid, uuid_str + strlen(uuid_str)); #define SECPART(a) ((unsigned long)(a)->tv_sec) #define MSECPART(a) ((unsigned long)((a)->tv_usec / 1000)) est = hist_serialize_estimate(h); hist_serial = malloc(est); if(!hist_serial) { mtevL(noit_error, "malloc(%d) failed\n", (int)est); goto cleanup; } enc_est = ((est + 2)/3)*4; hist_encode = malloc(enc_est); if(!hist_encode) { mtevL(noit_error, "malloc(%d) failed\n", (int)enc_est); goto cleanup; } if(hist_serialize(h, hist_serial, est) != est) { mtevL(noit_error, "histogram serialization failure\n"); goto cleanup; } enc_est = mtev_b64_encode((unsigned char *)hist_serial, est, hist_encode, enc_est); if(enc_est < 0) { mtevL(noit_error, "base64 histogram encoding failure\n"); goto cleanup; } if(live_feed && check->feeds) { mtev_skiplist_node *curr, *next; curr = next = mtev_skiplist_getlist(check->feeds); while(curr) { const char *feed_name = (char *)curr->data; mtev_log_stream_t ls = mtev_log_stream_find(feed_name); mtev_skiplist_next(check->feeds, &next); if(!ls || mtev_log(ls, &whence, __FILE__, __LINE__, "H1\t%lu.%03lu\t%s\t%s\t%.*s\n", SECPART(&whence), MSECPART(&whence), uuid_str, metric_name, (int)enc_est, hist_encode)) noit_check_transient_remove_feed(check, feed_name); curr = next; } } if(!live_feed) { SETUP_LOG(metrics, goto cleanup); mtev_log(metrics_log, &whence, __FILE__, __LINE__, "H1\t%lu.%03lu\t%s\t%s\t%.*s\n", SECPART(&whence), MSECPART(&whence), uuid_str, metric_name, (int)enc_est, hist_encode); }