228 lines
8.8 KiB
C
228 lines
8.8 KiB
C
|
/**************************************************************************
|
||
|
*
|
||
|
* JSONUTILS.H - Utility information for Nagios CGI for that return
|
||
|
* JSON-formatted data
|
||
|
*
|
||
|
* Copyright (c) 2013 Nagios Enterprises, LLC
|
||
|
* Last Modified: 04-13-2013
|
||
|
*
|
||
|
* License:
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License version 2 as
|
||
|
* published by the Free Software Foundation.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
|
*************************************************************************/
|
||
|
|
||
|
#ifndef NAGIOS_JSONUTILS_H_INCLUDED
|
||
|
#define NAGIOS_JSONUTILS_H_INCLUDED
|
||
|
|
||
|
/* JSON object definitions */
|
||
|
#define JSON_TYPE_INVALID 0
|
||
|
#define JSON_TYPE_OBJECT 1
|
||
|
#define JSON_TYPE_ARRAY 2
|
||
|
#define JSON_TYPE_INTEGER 3
|
||
|
#define JSON_TYPE_REAL 4
|
||
|
#define JSON_TYPE_TIME_T 5
|
||
|
#define JSON_TYPE_STRING 6
|
||
|
#define JSON_TYPE_BOOLEAN 7
|
||
|
#define JSON_TYPE_DURATION 8
|
||
|
|
||
|
struct json_object_struct;
|
||
|
|
||
|
typedef struct json_object_member_struct {
|
||
|
char *key;
|
||
|
unsigned type;
|
||
|
union {
|
||
|
long long integer;
|
||
|
unsigned long long unsigned_integer;
|
||
|
time_t time;
|
||
|
double real;
|
||
|
char * string;
|
||
|
unsigned boolean;
|
||
|
struct json_object_struct *object;
|
||
|
} value;
|
||
|
} json_object_member;
|
||
|
|
||
|
typedef struct json_object_struct {
|
||
|
unsigned member_count;
|
||
|
json_object_member **members;
|
||
|
} json_object;
|
||
|
|
||
|
typedef json_object json_array;
|
||
|
|
||
|
/* Mapping from CGI query string option to value */
|
||
|
typedef struct string_value_mapping_struct {
|
||
|
char *string; /* String to map from */
|
||
|
unsigned value; /* Value to map to */
|
||
|
char *description; /* Description of the meaning of the
|
||
|
string/value */
|
||
|
} string_value_mapping;
|
||
|
|
||
|
typedef struct option_help_struct {
|
||
|
const char * name; /* name used in query */
|
||
|
const char * label; /* short label for name */
|
||
|
const char * type; /* option type */
|
||
|
/* If the type is of the form nagios:<cgibase>/<objtype>, value values
|
||
|
for this option will be obtained by sending the query
|
||
|
'http://<whatever>/<cgibase>.cgi?objecttype=<objtype>' */
|
||
|
const char * required[25]; /* optiontypes required
|
||
|
for */
|
||
|
const char * optional[25]; /* optiontypes optional
|
||
|
for */
|
||
|
const char * depends_on; /* valid values dependent on
|
||
|
other option */
|
||
|
const char * description; /* longer description */
|
||
|
const string_value_mapping * valid_values; /* list of valid values */
|
||
|
} option_help;
|
||
|
|
||
|
/* String escaping structures */
|
||
|
typedef struct json_escape_pair_struct {
|
||
|
const wchar_t *from;
|
||
|
const wchar_t *to;
|
||
|
} json_escape_pair;
|
||
|
|
||
|
typedef struct json_escape_struct {
|
||
|
const int count;
|
||
|
const json_escape_pair *pairs;
|
||
|
} json_escape;
|
||
|
|
||
|
/* Output Format Version */
|
||
|
#define OUTPUT_FORMAT_VERSION 0
|
||
|
|
||
|
/* Result Types */
|
||
|
#define RESULT_SUCCESS 0
|
||
|
#define RESULT_MEMORY_ALLOCATION_ERROR 1
|
||
|
#define RESULT_FILE_OPEN_READ_ERROR 2
|
||
|
#define RESULT_OPTION_INVALID 3
|
||
|
#define RESULT_OPTION_MISSING 4
|
||
|
#define RESULT_OPTION_VALUE_MISSING 5
|
||
|
#define RESULT_OPTION_VALUE_INVALID 6
|
||
|
#define RESULT_OPTION_IGNORED 7
|
||
|
|
||
|
/* Boolean Values - Used when selecting true, false, or both */
|
||
|
#define BOOLEAN_TRUE 1
|
||
|
#define BOOLEAN_FALSE 2
|
||
|
#define BOOLEAN_EITHER (BOOLEAN_TRUE | BOOLEAN_FALSE)
|
||
|
|
||
|
/* Formatting Options */
|
||
|
#define JSON_FORMAT_WHITESPACE (1<<0)
|
||
|
#define JSON_FORMAT_ENUMERATE (1<<1)
|
||
|
#define JSON_FORMAT_BITMASK (1<<2)
|
||
|
#define JSON_FORMAT_DURATION (1<<3)
|
||
|
#if 0
|
||
|
#define JSON_FORMAT_DATETIME (1<<3)
|
||
|
#define JSON_FORMAT_DATE (1<<4)
|
||
|
#define JSON_FORMAT_TIME (1<<5)
|
||
|
#endif
|
||
|
|
||
|
/* Possible Query Statuses */
|
||
|
#define QUERY_STATUS_ALPHA 0
|
||
|
#define QUERY_STATUS_BETA 1
|
||
|
#define QUERY_STATUS_RELEASED 2
|
||
|
#define QUERY_STATUS_DEPRECATED 3
|
||
|
|
||
|
extern const string_value_mapping svm_format_options[];
|
||
|
extern const string_value_mapping svm_host_statuses[];
|
||
|
extern const string_value_mapping svm_host_states[];
|
||
|
extern const string_value_mapping svm_service_statuses[];
|
||
|
extern const string_value_mapping svm_service_states[];
|
||
|
extern const string_value_mapping svm_check_options[];
|
||
|
extern const string_value_mapping svm_host_check_types[];
|
||
|
extern const string_value_mapping svm_service_check_types[];
|
||
|
extern const string_value_mapping svm_state_types[];
|
||
|
extern const string_value_mapping svm_acknowledgement_types[];
|
||
|
extern const string_value_mapping svm_comment_types[];
|
||
|
extern const string_value_mapping svm_comment_entry_types[];
|
||
|
extern const string_value_mapping svm_downtime_types[];
|
||
|
extern const string_value_mapping parent_host_extras[];
|
||
|
extern const string_value_mapping child_host_extras[];
|
||
|
extern const string_value_mapping parent_service_extras[];
|
||
|
extern const string_value_mapping child_service_extras[];
|
||
|
#ifdef JSON_NAGIOS_4X
|
||
|
extern const string_value_mapping svm_option_types[];
|
||
|
#endif
|
||
|
|
||
|
extern const char *dayofweek[];
|
||
|
extern const char *month[];
|
||
|
|
||
|
extern json_object *json_new_object(void);
|
||
|
extern void json_free_object(json_object *, int);
|
||
|
extern json_array *json_new_array(void);
|
||
|
extern void json_free_member(json_object_member *, int);
|
||
|
extern void json_object_append_object(json_object *, char *, json_object *);
|
||
|
extern void json_object_append_array(json_object *, char *, json_array *);
|
||
|
extern void json_object_append_integer(json_object *, char *, int);
|
||
|
extern void json_object_append_real(json_object *, char *, double);
|
||
|
extern void json_object_append_time(json_object *, char *, unsigned long);
|
||
|
extern void json_object_append_time_t(json_object *, char *, time_t);
|
||
|
extern void json_set_time_t(json_object_member *, time_t);
|
||
|
extern void json_object_append_string(json_object *, char *,
|
||
|
const json_escape *, char *, ...);
|
||
|
extern void json_object_append_boolean(json_object *, char *, int);
|
||
|
extern void json_array_append_object(json_array *, json_object *);
|
||
|
extern void json_array_append_array(json_array *, json_array *);
|
||
|
extern void json_array_append_integer(json_array *, int);
|
||
|
extern void json_array_append_real(json_array *, double);
|
||
|
extern void json_array_append_time(json_array *, unsigned long);
|
||
|
extern void json_array_append_time_t(json_array *, time_t);
|
||
|
extern void json_array_append_string(json_array *, const json_escape *,
|
||
|
char *, ...);
|
||
|
extern void json_array_append_boolean(json_array *, int);
|
||
|
extern void json_object_append_duration(json_object *, char *, unsigned long);
|
||
|
extern void json_array_append_duration(json_object *, unsigned long);
|
||
|
extern json_object_member *json_get_object_member(json_object *, char *);
|
||
|
extern json_object_member *json_get_array_member(json_object *, char *);
|
||
|
extern void json_object_print(json_object *, int, int, char *, unsigned);
|
||
|
extern void json_array_print(json_array *, int, int, char *, unsigned);
|
||
|
extern void json_member_print(json_object_member *, int, int, char *, unsigned);
|
||
|
|
||
|
extern json_object *json_result(time_t, char *, char *, int, time_t, authdata *,
|
||
|
int, char *, ...);
|
||
|
extern json_object *json_help(option_help *);
|
||
|
extern int passes_start_and_count_limits(int, int, int, int);
|
||
|
extern void indentf(int, int, char *, ...);
|
||
|
extern void json_string(int, int, char *, char *);
|
||
|
extern void json_boolean(int, int, char *, int);
|
||
|
extern void json_int(int, int, char *, int);
|
||
|
extern void json_unsigned(int, int, char *, unsigned long long);
|
||
|
extern void json_float(int, int, char *, double);
|
||
|
extern void json_time(int, int, char *, unsigned long);
|
||
|
extern void json_time_t(int, int, char *, time_t, char *);
|
||
|
extern void json_duration(int, int, char *, unsigned long, int);
|
||
|
|
||
|
extern void json_enumeration(json_object *, unsigned, char *, int,
|
||
|
const string_value_mapping *);
|
||
|
extern void json_bitmask(json_object *, unsigned, char *, int,
|
||
|
const string_value_mapping *);
|
||
|
|
||
|
extern int parse_bitmask_cgivar(char *, char *, int, json_object *, time_t,
|
||
|
authdata *, char *, char *, const string_value_mapping *, unsigned *);
|
||
|
extern int parse_enumeration_cgivar(char *, char *, int, json_object *,
|
||
|
time_t, authdata *, char *, char *, const string_value_mapping *,
|
||
|
int *);
|
||
|
extern int parse_string_cgivar(char *, char *, int, json_object *, time_t,
|
||
|
authdata *, char *, char *, char **);
|
||
|
extern int parse_time_cgivar(char *, char *, int, json_object *, time_t,
|
||
|
authdata *, char *, char *, time_t *);
|
||
|
extern int parse_boolean_cgivar(char *, char *, int, json_object *, time_t,
|
||
|
authdata *, char *, char *, int *);
|
||
|
extern int parse_int_cgivar(char *, char *, int, json_object *, time_t,
|
||
|
authdata *, char *, char *, int *);
|
||
|
|
||
|
extern int get_query_status(const int[][2], int);
|
||
|
extern char *svm_get_string_from_value(int, const string_value_mapping *);
|
||
|
extern char *svm_get_description_from_value(int, const string_value_mapping *);
|
||
|
|
||
|
extern time_t compile_time(const char *, const char *);
|
||
|
extern char *json_escape_string(const char *, const json_escape *);
|
||
|
#endif
|