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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
|
/**************************************************************************
*
* 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
|