jshon icon indicating copy to clipboard operation
jshon copied to clipboard

json read error: too big integer

Open Napsty opened this issue 6 years ago • 0 comments

I created a script to parse availability reports from Nagios / Icinga but under some circumstances due to wrong downtime calculation, a huge integer appears as value. jshon then fails to parse the entire json output with an error "too big integer".

# curl -s -u user:pw "http://icinga.example.com/cgi-bin/icinga2-classicui/avail.cgi?show_log_entries=&host=internet&service=HTTP+mysite.example.com&assumeinitialstates=yes&assumestateretention=yes&assumestatesduringnotrunning=yes&includesoftstates=no&initialassumedhoststate=0&initialassumedservicestate=0&timeperiod=lastmonth&backtrack=8&jsonoutput" | jshon -k
json read error: line 31 column 1350: too big integer near '18446744073709548794'

As you can see from the json output below, the problem comes from the value of field time_critical_unscheduled inside the avail/service_availability/services array.

{ "cgi_json_version": "1.11.0",
"icinga_status": {
"status_data_age": 15,
"status_update_interval": 10,
"reading_status_data_ok": true,
"program_version": "r2.6.1-1",
"icinga_pid": 18010,
"timezone": "CEST",
"date_format": "us",
"program_start": 1522738805,
"total_running_time": "0d 0h 13m 32s",
"last_external_command_check": 0,
"last_log_file_rotation": 0,
"notifications_enabled": true,
"disable_notifications_expire_time": 0,
"service_checks_being_executed": true,
"passive_service_checks_being_accepted": true,
"host_checks_being_executed": true,
"passive_host_checks_being_accepted": true,
"obsessing_over_services": false,
"obsessing_over_hosts": false,
"check_service_freshness": true,
"check_host_freshness": true,
"event_handlers_enabled": true,
"flap_detection_enabled": true,
"performance_data_being_processed": true
},
"avail": {
"service_availability": {
"services": [
{ "host_name": "internet",  "host_display_name": "internet",  "service_description": "HTTP mysite.example.com",  "service_display_name": "HTTP mysite.example.com",  "time_ok_scheduled": 134221,  "percent_time_ok_scheduled": 5.018,  "percent_known_time_ok_scheduled": 5.081,  "time_ok_unscheduled": 2504799,  "percent_time_ok_unscheduled": 93.644,  "percent_known_time_ok_unscheduled": 94.815,  "total_time_ok": 2639020,  "percent_total_time_ok": 98.662,  "percent_known_time_ok": 99.895,  "time_warning_scheduled": 0,  "percent_time_warning_scheduled": 0.000,  "percent_known_time_warning_scheduled": 0.000,  "time_warning_unscheduled": 0,  "percent_time_warning_unscheduled": 0.000,  "percent_known_time_warning_unscheduled": 0.000,  "total_time_warning": 0,  "percent_total_time_warning": 0.000,  "percent_known_time_warning": 0.000,  "time_unknown_scheduled": 0,  "percent_time_unknown_scheduled": 0.000,  "percent_known_time_unknown_scheduled": 0.000,  "time_unknown_unscheduled": 0,  "percent_time_unknown_unscheduled": 0.000,  "percent_known_time_unknown_unscheduled": 0.000,  "total_time_unknown": 0,  "percent_total_time_unknown": 0.000,  "percent_known_time_unknown": 0.000,  "time_critical_scheduled": 5590,  "percent_time_critical_scheduled": 0.209,  "percent_known_time_critical_scheduled": 0.212,  "time_critical_unscheduled": 18446744073709548794,  "percent_time_critical_unscheduled": -0.106,  "percent_known_time_critical_unscheduled": -0.107,  "total_time_critical": 2768,  "percent_total_time_critical": 0.103,  "percent_known_time_critical": 0.105,  "time_undetermined_not_running": 0,  "percent_time_undetermined_not_running": 0.000,  "time_undetermined_no_data": 33011,  "percent_time_undetermined_no_data": 1.234,  "total_time_undetermined": 33011,  "percent_total_time_undetermined": 1.234,  "total_time_all": 2674799,  "percent_total_time_all": 100.000,  "percent_known_time_all": 100.000,
"log_entries": [
{ "start_time_string": "03-01-2018 00:59:04",  "start_time_timestamp": 1519862344,  "end_time_string": "03-01-2018 02:32:40",  "end_time_timestamp": 1519867960,  "duration_string": "0d 1h 33m 36s",  "duration_timestamp": 5616,  "entry_type": "SERVICE DOWNTIME START",  "state_type": "",  "state_information": "Start of scheduled downtime"},
{ "start_time_string": "03-29-2018 17:00:00",  "start_time_timestamp": 1522335600,  "end_time_string": "03-31-2018 23:59:59",  "end_time_timestamp": 1522533599,  "duration_string": "2d 6h 59m 59s+",  "duration_timestamp": 197999,  "entry_type": "SERVICE OK",  "state_type": "HARD",  "state_information": "HTTP OK: HTTP/1.1 200 OK - 8697 bytes in 0.304 second response time"}
]

}
]
}
}
}

I came across similar bug reports across other json projects (https://github.com/tc39/proposal-bigint/issues/24, https://github.com/akheron/jansson/issues/8), so this seems to be a json parsing problem in general. Is there a way to fix this in jshon or to simply ignore such a value, e.g. by returning 'int_too_big' ?

Napsty avatar Apr 03 '18 07:04 Napsty