trafilo 0.1.0
Streaming event-handler framework in C
Loading...
Searching...
No Matches
trafilo.h
Go to the documentation of this file.
1#ifndef TRAFILO
2#define TRAFILO
3
4#include <stddef.h>
5#include <stdint.h>
6#include <time.h>
7
11typedef struct {
12 char *key; /* dispatch key (by dispatching service)*/
13 void *payload; /* binary safe content of event*/
14 size_t payload_len; /* binary safe content of event*/
15 struct timespec t_secs; /* timestamp of event in nano second precision*/
16} event_t;
17
21typedef struct {
22 const char *key; /* bucket key */
23 size_t event_count; /* events currently in the window */
24 struct timespec window_start; /* timestamp of oldest retained event */
25 struct timespec window_end; /* timestamp of newest retained event */
27
28/*************************
29 * User callback functions
30 *************************
31*/
32
40typedef int (*trafilo_parse_fn)(const char *raw, size_t len, event_t **out);
41
46typedef void (*trafilo_event_free_fn)(event_t *event);
47
53typedef void (*trafilo_handle_fn)(const event_t *event, void *user_state);
54
61typedef void (*trafilo_sink_fn)(const char *key,
62 const window_result_t *result,
63 void *user_state);
64
70typedef void *(*trafilo_state_init_fn)(const char *key);
71
76typedef void (*trafilo_state_free_fn)(void *user_state);
77
81typedef struct {
82 /* Network */
83 const char *bind_addr; /* Stream output address*/
84 uint16_t port; /* UDP port to bind to */
85 int recv_timeout_ms; /* SO_RCVTIMEO; 0 = block forever*/
86
87 /* Threading and Concurrency*/
88 size_t num_workers; /* worker thread count */
89 size_t num_buckets; /* hashmap size, prime number*/
90
91 /* Sliding Window */
92 long window_size_ms; /* sliding window length */
93 long slide_interval_ms; /* slide interval, which also determines emit cadence */
94 long bucket_idle_timeout_ms; /* evict bucket if no events for this
95 long; 0 = never evict */
96
97 /* User callback functions */
105
106/****************
107 * API Lifecycle
108 ****************
109 */
110/* opaque framework handle */
111typedef struct trafilo trafilo_t;
112
118trafilo_t *trafilo_create(const trafilo_config_t *config);
119
125int trafilo_run(trafilo_t *trafilo);
126
131void trafilo_shutdown(trafilo_t *trafilo);
132
137void trafilo_destroy(trafilo_t *t);
138
146int trafilo_emit(trafilo_t *t, const char *raw, size_t len);
147
148#endif
A struct to hold event data.
Definition trafilo.h:11
size_t payload_len
Definition trafilo.h:14
void * payload
Definition trafilo.h:13
char * key
Definition trafilo.h:12
struct timespec t_secs
Definition trafilo.h:15
Configuration struct for Trafilo framework.
Definition trafilo.h:81
int recv_timeout_ms
Definition trafilo.h:85
trafilo_event_free_fn event_free
Definition trafilo.h:99
trafilo_sink_fn sink
Definition trafilo.h:101
long slide_interval_ms
Definition trafilo.h:93
trafilo_handle_fn handle
Definition trafilo.h:100
trafilo_state_free_fn state_free
Definition trafilo.h:103
trafilo_parse_fn parse
Definition trafilo.h:98
size_t num_workers
Definition trafilo.h:88
long bucket_idle_timeout_ms
Definition trafilo.h:94
size_t num_buckets
Definition trafilo.h:89
trafilo_state_init_fn state_init
Definition trafilo.h:102
uint16_t port
Definition trafilo.h:84
const char * bind_addr
Definition trafilo.h:83
long window_size_ms
Definition trafilo.h:92
Definition trafilo.c:11
trafilo_config_t config
Definition trafilo.c:12
A result to be piped to sinking module when a window emits.
Definition trafilo.h:21
struct timespec window_start
Definition trafilo.h:24
size_t event_count
Definition trafilo.h:23
const char * key
Definition trafilo.h:22
struct timespec window_end
Definition trafilo.h:25
void *(* trafilo_state_init_fn)(const char *key)
Initialize the state of a bucket, called the first time a key is seen.
Definition trafilo.h:70
int trafilo_run(trafilo_t *trafilo)
Run the framework. Blocks until trafilo_shutdown() is called.
Definition trafilo.c:94
void trafilo_destroy(trafilo_t *t)
Free all resources.
Definition trafilo.c:130
void trafilo_shutdown(trafilo_t *trafilo)
Signal the framework to shut down.
Definition trafilo.c:122
void(* trafilo_handle_fn)(const event_t *event, void *user_state)
Handling callback function provided by user.
Definition trafilo.h:53
int trafilo_emit(trafilo_t *t, const char *raw, size_t len)
Push a raw line into the framework's queue, bypassing the socket.
Definition trafilo.c:154
trafilo_t * trafilo_create(const trafilo_config_t *config)
Create a framework instance.
Definition trafilo.c:49
void(* trafilo_sink_fn)(const char *key, const window_result_t *result, void *user_state)
Sink window callback.
Definition trafilo.h:61
void(* trafilo_state_free_fn)(void *user_state)
Free the user defined state, when a bucket is evicted.
Definition trafilo.h:76
void(* trafilo_event_free_fn)(event_t *event)
Free a user allocated event from memory.
Definition trafilo.h:46
int(* trafilo_parse_fn)(const char *raw, size_t len, event_t **out)
Parse and fillout **out with a fresh event_t.
Definition trafilo.h:40