41 #define CK_METRICS_MAX_NAME_LEN 64
42 #define CK_METRICS_MAX_METRICS 32
43 #define CK_METRICS_MAX_URL_LEN 256
44 #define CK_METRICS_BUFFER_SIZE 4096
118 const char* model,
const char* dataset,
119 int batch_size,
double lr,
int max_steps);
199 #ifdef CK_METRICS_IMPLEMENTATION
205 #include <sys/time.h>
208 #include <sys/sysinfo.h>
213 #ifdef CK_METRICS_USE_CURL
214 #include <curl/curl.h>
224 static void metrics_build_json(
CKMetricsContext* ctx,
char* buffer,
size_t size) {
226 offset += snprintf(buffer + offset, size - offset,
227 "{\"run_id\":\"%s\",\"step\":%lld,\"timestamp\":%.6f,\"metrics\":{",
232 if (i > 0) offset += snprintf(buffer + offset, size - offset,
",");
236 offset += snprintf(buffer + offset, size - offset,
240 offset += snprintf(buffer + offset, size - offset,
241 "\"%s\":%lld", m->
name, (
long long)m->
value.
i);
244 offset += snprintf(buffer + offset, size - offset,
250 snprintf(buffer + offset, size - offset,
"}}");
254 #ifdef CK_METRICS_USE_CURL
258 struct curl_slist* headers = NULL;
259 headers = curl_slist_append(headers,
"Content-Type: application/json");
261 curl_easy_setopt(curl, CURLOPT_URL, ctx->
endpoint);
262 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json);
263 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
264 curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1L);
266 curl_easy_perform(curl);
267 curl_slist_free_all(headers);
269 (void)ctx; (void)json;
284 metrics_build_json(ctx, buffer,
sizeof(buffer));
288 metrics_send_http(ctx, buffer);
291 metrics_write_file(ctx, buffer);
294 printf(
"%s\n", buffer);
312 const char* model,
const char* dataset,
313 int batch_size,
double lr,
int max_steps) {
333 #ifdef CK_METRICS_USE_CURL
334 curl_global_init(CURL_GLOBAL_DEFAULT);
390 #ifdef CK_METRICS_USE_CURL
393 curl_global_cleanup();
420 if (!ctx)
return false;
461 time_t t = time(NULL);
462 struct tm* tm = localtime(&t);
463 snprintf(buffer, size,
"run_%04d%02d%02d_%02d%02d%02d",
464 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
465 tm->tm_hour, tm->tm_min, tm->tm_sec);
470 FILE* f = fopen(
"/proc/self/statm",
"r");
473 fscanf(f,
"%ld", &pages);
475 return (pages * sysconf(_SC_PAGESIZE)) / (1024 * 1024);
483 gettimeofday(&tv, NULL);
484 return tv.tv_sec + tv.tv_usec / 1000000.0;
void ck_metrics_log_i(const char *name, int64_t value)
void ck_metrics_ctx_step(CKMetricsContext *ctx, int64_t step)
#define CK_METRICS_BUFFER_SIZE
void ck_metrics_end(const char *status)
void ck_metrics_generate_run_id(char *buffer, size_t size)
void ck_metrics_ctx_log_f(CKMetricsContext *ctx, const char *name, double value)
void ck_metrics_cleanup(void)
#define CK_METRICS_MAX_METRICS
bool ck_metrics_ctx_init(CKMetricsContext *ctx, const char *run_id, const char *endpoint, CKMetricsMode mode)
#define CK_METRICS_MAX_URL_LEN
bool ck_metrics_init_full(const char *run_id, const char *endpoint, CKMetricsMode mode, const char *model, const char *dataset, int batch_size, double lr, int max_steps)
void ck_metrics_log_s(const char *name, const char *value)
bool ck_metrics_init(const char *run_id, const char *endpoint, CKMetricsMode mode)
void ck_metrics_ctx_log_i(CKMetricsContext *ctx, const char *name, int64_t value)
void ck_metrics_step(int64_t step)
int64_t ck_metrics_get_memory_mb(void)
void ck_metrics_log_f(const char *name, double value)
@ CK_METRICS_MODE_DISABLED
void ck_metrics_ctx_end(CKMetricsContext *ctx, const char *status)
void ck_metrics_destroy_context(CKMetricsContext *ctx)
CKMetricsContext * ck_metrics_create_context(void)
double ck_metrics_timestamp(void)
#define CK_METRICS_MAX_NAME_LEN
CKMetricsContext * ck_metrics_ctx