Statlog in C (#23596)
* statlog in C * fix swaglog and the test * add missing files * fix context initialization todo * speed up testpull/23641/head
parent
ee71fd2fcc
commit
6366d1303f
8 changed files with 138 additions and 75 deletions
@ -0,0 +1,43 @@ |
||||
#ifndef _GNU_SOURCE |
||||
#define _GNU_SOURCE |
||||
#endif |
||||
|
||||
#include "selfdrive/common/statlog.h" |
||||
#include "selfdrive/common/util.h" |
||||
|
||||
#include <stdio.h> |
||||
#include <mutex> |
||||
#include <zmq.h> |
||||
|
||||
class StatlogState : public LogState { |
||||
public: |
||||
StatlogState() : LogState("ipc:///tmp/stats") {} |
||||
}; |
||||
|
||||
static StatlogState s = {}; |
||||
|
||||
static void log(const char* metric_type, const char* metric, const char* fmt, ...) { |
||||
char* value_buf = nullptr; |
||||
va_list args; |
||||
va_start(args, fmt); |
||||
int ret = vasprintf(&value_buf, fmt, args); |
||||
va_end(args); |
||||
|
||||
if (ret > 0 && value_buf) { |
||||
char* line_buf = nullptr; |
||||
ret = asprintf(&line_buf, "%s:%s|%s", metric, value_buf, metric_type); |
||||
if (ret > 0 && line_buf) { |
||||
zmq_send(s.sock, line_buf, ret, ZMQ_NOBLOCK); |
||||
free(line_buf); |
||||
} |
||||
free(value_buf); |
||||
} |
||||
} |
||||
|
||||
void statlog_log(const char* metric_type, const char* metric, int value) { |
||||
log(metric_type, metric, "%d", value); |
||||
} |
||||
|
||||
void statlog_log(const char* metric_type, const char* metric, float value) { |
||||
log(metric_type, metric, "%f", value); |
||||
} |
@ -0,0 +1,10 @@ |
||||
#pragma once |
||||
|
||||
#define STATLOG_GAUGE "g" |
||||
#define STATLOG_SAMPLE "sa" |
||||
|
||||
void statlog_log(const char* metric_type, const char* metric, int value); |
||||
void statlog_log(const char* metric_type, const char* metric, float value); |
||||
|
||||
#define statlog_gauge(metric, value) statlog_log(STATLOG_GAUGE, metric, value) |
||||
#define statlog_sample(metric, value) statlog_log(STATLOG_SAMPLE, metric, value) |
Loading…
Reference in new issue