0
0
Fork 0
mirror of https://github.com/netdata/netdata.git synced 2025-04-13 09:11:50 +00:00
netdata_netdata/libnetdata/json/json.h
thiagoftsm 60a73e90de Easily disable alarms, by persisting the silencers configuration ()
* Alarms begin!

* Alarms web interface comments!

* Alarms web interface comments 2!

* Alarms bringing Christopher work!

* Alarms bringing Christopher work!

* Alarms commenting code that will be rewritten!

* Alarms json-c begin!

* Alarms json-c end!

* Alarms missed script!

* Alarms fix json-c parser and change script to test LIST!

* Alarms fix test script!

* Alarms documentation!

* Alarms script step 1!

* Alarms fix script!

* Alarms fix testing script and code!

* Alarms missing arguments to pkg_check_modules

* SSL_backend indentation!

* Alarms, description in Makefile

* Alarms missing extern!

* Alarms compilation!

* Alarms libnetdata/health!

* Alarms fill library!

* Alarms fill CMakeList!

* Alarm fix version!

* Alarm remove readme!

* Alarm fix readme version!
2019-06-27 13:16:28 +02:00

72 lines
No EOL
2 KiB
C

#ifndef CHECKIN_JSON_H
#define CHECKIN_JSON_H 1
#if ENABLE_JSONC
# include <json-c/json.h>
#endif
#include "jsmn.h"
//https://www.ibm.com/support/knowledgecenter/en/SS9H2Y_7.6.0/com.ibm.dp.doc/json_parserlimits.html
#define JSON_NAME_LEN 256
#define JSON_FULLNAME_LEN 1024
typedef enum {
JSON_OBJECT = 0,
JSON_ARRAY = 1,
JSON_STRING = 2,
JSON_NUMBER = 3,
JSON_BOOLEAN = 4,
JSON_NULL = 5,
} JSON_ENTRY_TYPE;
typedef struct json_entry {
JSON_ENTRY_TYPE type;
char name[JSON_NAME_LEN + 1];
char fullname[JSON_FULLNAME_LEN + 1];
union {
char *string; // type == JSON_STRING
long double number; // type == JSON_NUMBER
int boolean; // type == JSON_BOOLEAN
size_t items; // type == JSON_ARRAY
} data;
size_t pos; // the position of this item in its parent
char *original_string;
void *callback_data;
int (*callback_function)(struct json_entry *);
} JSON_ENTRY;
// ----------------------------------------------------------------------------
// public functions
#define JSON_OK 0
#define JSON_CANNOT_DOWNLOAD 1
#define JSON_CANNOT_PARSE 2
int json_parse(char *js, void *callback_data, int (*callback_function)(JSON_ENTRY *));
// ----------------------------------------------------------------------------
// private functions
#ifdef ENABLE_JSONC
json_object *json_tokenise(char *js);
size_t json_walk(json_object *t, void *callback_data, int (*callback_function)(struct json_entry *));
#else
jsmntok_t *json_tokenise(char *js, size_t len, size_t *count);
size_t json_walk_tree(char *js, jsmntok_t *t, void *callback_data, int (*callback_function)(struct json_entry *));
#endif
size_t json_walk_object(char *js, jsmntok_t *t, size_t nest, size_t start, JSON_ENTRY *e);
size_t json_walk_array(char *js, jsmntok_t *t, size_t nest, size_t start, JSON_ENTRY *e);
size_t json_walk_string(char *js, jsmntok_t *t, size_t start, JSON_ENTRY *e);
size_t json_walk_primitive(char *js, jsmntok_t *t, size_t start, JSON_ENTRY *e);
int json_callback_print(JSON_ENTRY *e);
#endif