1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#ifndef FACETS_H
#define FACETS_H 1
#include "../libnetdata.h"
#define FACET_VALUE_UNSET "-"
typedef enum __attribute__((packed)) {
FACET_KEY_OPTION_FACET = (1 << 0), // filterable values
FACET_KEY_OPTION_NO_FACET = (1 << 1), // non-filterable value
FACET_KEY_OPTION_STICKY = (1 << 2), // should be sticky in the table
FACET_KEY_OPTION_VISIBLE = (1 << 3), // should be in the default table
FACET_KEY_OPTION_FTS = (1 << 4), // the key is filterable by full text search (FTS)
FACET_KEY_OPTION_MAIN_TEXT = (1 << 5), // full width and wrap
FACET_KEY_OPTION_REORDER = (1 << 6), // give the key a new order id on first encounter
} FACET_KEY_OPTIONS;
typedef struct facet_row_key_value {
const char *tmp;
BUFFER *wb;
} FACET_ROW_KEY_VALUE;
typedef struct facet_row {
usec_t usec;
DICTIONARY *dict;
struct facet_row *prev, *next;
} FACET_ROW;
typedef struct facets FACETS;
typedef struct facet_key FACET_KEY;
#define FACET_STRING_HASH_SIZE 19
void facets_string_hash(const char *src, char *out);
typedef void (*facets_key_transformer_t)(FACETS *facets __maybe_unused, BUFFER *wb, void *data);
typedef void (*facet_dynamic_row_t)(FACETS *facets, BUFFER *json_array, FACET_ROW_KEY_VALUE *rkv, FACET_ROW *row, void *data);
FACET_KEY *facets_register_dynamic_key(FACETS *facets, const char *key, FACET_KEY_OPTIONS options, facet_dynamic_row_t cb, void *data);
FACET_KEY *facets_register_key_transformation(FACETS *facets, const char *key, FACET_KEY_OPTIONS options, facets_key_transformer_t cb, void *data);
typedef enum __attribute__((packed)) {
FACETS_OPTION_ALL_FACETS_VISIBLE = (1 << 0), // all facets, should be visible by default in the table
FACETS_OPTION_ALL_KEYS_FTS = (1 << 1), // all keys are searchable by full text search
} FACETS_OPTIONS;
FACETS *facets_create(uint32_t items_to_return, usec_t anchor, FACETS_OPTIONS options, const char *visible_keys, const char *facet_keys, const char *non_facet_keys);
void facets_destroy(FACETS *facets);
void facets_accepted_param(FACETS *facets, const char *param);
void facets_rows_begin(FACETS *facets);
void facets_row_finished(FACETS *facets, usec_t usec);
FACET_KEY *facets_register_key(FACETS *facets, const char *param, FACET_KEY_OPTIONS options);
void facets_set_query(FACETS *facets, const char *query);
void facets_set_items(FACETS *facets, uint32_t items);
void facets_set_anchor(FACETS *facets, usec_t anchor);
void facets_register_facet_filter(FACETS *facets, const char *key_id, char *value_ids, FACET_KEY_OPTIONS options);
void facets_add_key_value(FACETS *facets, const char *key, const char *value);
void facets_add_key_value_length(FACETS *facets, const char *key, const char *value, size_t value_len);
void facets_report(FACETS *facets, BUFFER *wb);
#endif
|