ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
otel.h
Go to the documentation of this file.
1#pragma once
3#include <stdarg.h>
4#include <stdbool.h>
6typedef enum {
7#define ASCII_OTEL_OPERATION(id, name, realtime) ASCII_OTEL_##id,
8#include <ascii-chat/otel_operations.def>
9#undef ASCII_OTEL_OPERATION
12typedef enum {
13#define ASCII_OTEL_METRIC(id, name, type, unit) ASCII_OTEL_METRIC_##id,
14#include <ascii-chat/otel_metrics.def>
15#undef ASCII_OTEL_METRIC
18#ifndef __EMSCRIPTEN__
19#include <gotel/gotel.h>
28asciichat_error_t ascii_otel_init(const char *mode, int argc, char **argv);
29void ascii_otel_shutdown(void);
30bool ascii_otel_enabled(void);
31const char *ascii_otel_current_operation(void);
32void ascii_otel_metric(ascii_otel_metric_t metric, double value);
35void ascii_otel_ui_usage(const char *screen, const char *event, uint64_t duration_ns);
36void ascii_otel_call_session_used(const char *session_string);
37void ascii_otel_packet(ascii_otel_scope_t *scope, uint16_t type, size_t payload_size, const char *action,
38 int transport);
39void ascii_otel_exit(int code);
40void ascii_otel_frame_rejected(const char *validator, const char *reason, size_t bytes, uint32_t width, uint32_t height,
42gotel_context_t ascii_otel_context(void);
43void ascii_otel_scope_int(ascii_otel_scope_t *scope, const char *key, int64_t value);
44void ascii_otel_scope_string(ascii_otel_scope_t *scope, const char *key, const char *value);
46 const gotel_context_t *parent);
49void ascii_otel_log(int level, const char *file, int line, const char *function, const char *format, va_list args);
50void ascii_otel_error(const char *message);
51void ascii_otel_error_code(asciichat_error_t code, const char *message);
53double ascii_otel_pipeline_age(uint64_t now, uint64_t capture, uint64_t progress, bool expected);
54// Stages: capture=0 (expected bits: display=1, encode=2), display=1, encode=2, stop=3.
55void ascii_otel_pipeline_progress(unsigned stage, unsigned expected);
56void ascii_otel_http(ascii_otel_scope_t *scope, const char *hostname, const char *path);
58void ascii_otel_sqlite(sqlite3 *db, const gotel_query_t *queries, size_t count);
60void ascii_otel_sqlite_catalog(sqlite3 *db, const gotel_query_catalog_t *catalog);
61
64int ascii_otel_sqlite_prepare(sqlite3 *db, const char *sql, sqlite3_stmt **statement);
65
66#define ASCII_OTEL_ATTR_STRING(key, value) ascii_otel_scope_string(&otel_scope, key, value)
67#define ASCII_OTEL_ATTR_INT(key, value) ascii_otel_scope_int(&otel_scope, key, value)
68#define ASCII_OTEL_PACKET(type, size, action, transport) ascii_otel_packet(&otel_scope, type, size, action, transport)
69#define ASCII_OTEL_SCOPE_PARENT(id, parent) \
70 ascii_otel_scope_t otel_scope __attribute__((cleanup(ascii_otel_scope_end))) = {0}; \
71 ascii_otel_scope_parent(&otel_scope, ASCII_OTEL_##id, parent)
72#define ASCII_OTEL_SCOPE(id) \
73 ascii_otel_scope_t otel_scope __attribute__((cleanup(ascii_otel_scope_end))) = {0}; \
74 ascii_otel_scope_begin(&otel_scope, ASCII_OTEL_##id)
75#else
76#define ASCII_OTEL_ATTR_STRING(key, value) ((void)(key), (void)(value))
77#define ASCII_OTEL_ATTR_INT(key, value) ((void)(key), (void)(value))
78#define ASCII_OTEL_PACKET(type, size, action, transport) ((void)0)
79#define ascii_otel_frame_rejected(validator, reason, bytes, width, height, code) \
80 ((void)(validator), (void)(reason), (void)(bytes), (void)(width), (void)(height), (void)(code))
81#define ascii_otel_pipeline_progress(stage, expected) ((void)(stage), (void)(expected))
82#define ascii_otel_ui_usage(screen, event, duration_ns) ((void)(screen), (void)(event), (void)(duration_ns))
83#define ascii_otel_sqlite_prepare(db, sql, statement) sqlite3_prepare_v2(db, sql, -1, statement, NULL)
84#define ascii_otel_enabled() false
85#define ascii_otel_current_operation() ""
86#define ascii_otel_call_session_used(session_string) ((void)(session_string))
87#define ascii_otel_metric(metric, value) ((void)(metric), (void)(value))
88#define ascii_otel_stats_attach(scope) ((void)(scope))
89#define ASCII_OTEL_SCOPE_PARENT(id, parent) ((void)0)
90#define ASCII_OTEL_SCOPE(id) ((void)0)
91#endif
92
93// Test executables may link the ordinary library; never initialize its exporter.
94#if !defined(ASCIICHAT_OTEL_IMPLEMENTATION) && (defined(TESTING) || defined(CRITERION_TEST) || defined(__CRITERION__))
95#define ascii_otel_init(mode, argc, argv) ((void)(mode), (void)(argc), (void)(argv), ASCIICHAT_OK)
96#endif
action_args_t args
Definition actions.c:78
deferred_action_t action
Definition actions.c:77
Synchronized per-thread pending error stacks and value snapshots. SET_ERRNO pushes,...
unsigned int height
Definition fft.c:23
unsigned int width
Definition fft.c:23
unsigned short uint16_t
Definition common.h:61
unsigned int uint32_t
Definition common.h:62
unsigned long long uint64_t
Definition common.h:63
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
struct stats_scope stats_scope_t
void ascii_otel_error_code(asciichat_error_t code, const char *message)
Definition otel.c:776
void ascii_otel_http_status(ascii_otel_scope_t *scope, int status)
Definition otel.c:828
void ascii_otel_http(ascii_otel_scope_t *scope, const char *hostname, const char *path)
Definition otel.c:812
bool ascii_otel_enabled(void)
Definition otel.c:158
void ascii_otel_scope_int(ascii_otel_scope_t *scope, const char *key, int64_t value)
Definition otel.c:728
ascii_otel_operation_t
Definition otel.h:6
@ ASCII_OTEL_OPERATION_COUNT
Definition otel.h:10
void ascii_otel_shutdown(void)
Definition otel.c:473
int ascii_otel_sqlite_prepare(sqlite3 *db, const char *sql, sqlite3_stmt **statement)
Definition otel.c:840
void ascii_otel_log(int level, const char *file, int line, const char *function, const char *format, va_list args)
Definition otel.c:700
gotel_context_t ascii_otel_context(void)
Definition otel.c:725
void ascii_otel_ui_usage(const char *screen, const char *event, uint64_t duration_ns)
Definition otel.c:434
void ascii_otel_exit(int code)
Definition otel.c:736
void ascii_otel_pipeline_progress(unsigned stage, unsigned expected)
Definition otel.c:270
void ascii_otel_stats_attach(stats_scope_t *scope)
Definition otel.c:218
ascii_otel_operation_t ascii_otel_failure_operation(asciichat_error_t code, const char *origin)
Definition otel.c:763
void ascii_otel_scope_end(ascii_otel_scope_t *scope)
Definition otel.c:425
void ascii_otel_scope_string(ascii_otel_scope_t *scope, const char *key, const char *value)
Definition otel.c:732
const char * ascii_otel_current_operation(void)
Definition otel.c:153
void ascii_otel_scope_parent(ascii_otel_scope_t *scope, ascii_otel_operation_t operation, const gotel_context_t *parent)
Definition otel.c:390
double ascii_otel_pipeline_age(uint64_t now, uint64_t capture, uint64_t progress, bool expected)
Definition otel.c:296
void ascii_otel_sqlite_catalog(sqlite3 *db, const gotel_query_catalog_t *catalog)
Definition otel.c:857
ascii_otel_metric_t ascii_otel_stats_metric(stats_record_kind_t kind, unsigned id)
Definition otel.c:181
void ascii_otel_sqlite(sqlite3 *db, const gotel_query_t *queries, size_t count)
Definition otel.c:844
void ascii_otel_error(const char *message)
Definition otel.c:804
struct ascii_otel_scope ascii_otel_scope_t
ascii otel scope is intentionally a small, concrete record. Fields such as scope, retained,...
ascii_otel_metric_t
Definition otel.h:12
@ ASCII_OTEL_METRIC_COUNT
Definition otel.h:16
void ascii_otel_packet(ascii_otel_scope_t *scope, uint16_t type, size_t payload_size, const char *action, int transport)
Definition otel.c:451
void ascii_otel_metric(ascii_otel_metric_t metric, double value)
Definition otel.c:161
void ascii_otel_call_session_used(const char *session_string)
Definition otel.c:443
void ascii_otel_frame_rejected(const char *validator, const char *reason, size_t bytes, uint32_t width, uint32_t height, asciichat_error_t code)
Definition otel.c:746
void ascii_otel_scope_begin(ascii_otel_scope_t *scope, ascii_otel_operation_t operation)
Definition otel.c:387
asciichat_error_t ascii_otel_init(const char *mode, int argc, char **argv)
Definition otel.c:555
ascii otel scope is intentionally a small, concrete record. Fields such as scope, retained,...
Definition otel.h:23
gotel_scope_t scope
Definition otel.h:24
bool retained
Definition otel.h:25
struct ascii_otel_scope * previous
Definition otel.h:26