From 688f505f28b218a071a7534813a6a447eba2da27 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sun, 16 Jan 2022 19:44:52 -0600 Subject: [PATCH] Adds better error handling, changes expected location of janus.js --- src/zm_monitor.cpp | 29 ++++++++++++++++++++--------- web/skins/classic/views/cycle.php | 2 +- web/skins/classic/views/montage.php | 2 +- web/skins/classic/views/watch.php | 2 +- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index e638ed8c8..15a812f83 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -1100,12 +1100,13 @@ bool Monitor::connect() { set_credentials(soap); Debug(1, "ONVIF Endpoint: %s", proxyEvent.soap_endpoint); if (proxyEvent.CreatePullPointSubscription(&request, response) != SOAP_OK) { - Warning("Couldn't create subscription!"); + Error("Couldn't create subscription! %s, %s", soap_fault_string(soap), soap_fault_detail(soap)); } else { //Empty the stored messages set_credentials(soap); - if (proxyEvent.PullMessages(response.SubscriptionReference.Address, NULL, &tev__PullMessages, tev__PullMessagesResponse) != SOAP_OK) { - Warning("Couldn't do initial event pull! %s", response.SubscriptionReference.Address); + if ((proxyEvent.PullMessages(response.SubscriptionReference.Address, NULL, &tev__PullMessages, tev__PullMessagesResponse) != SOAP_OK) && + ( soap->error != SOAP_EOF)) { //SOAP_EOF could indicate no messages to pull. + Error("Couldn't do initial event pull! Error %i %s, %s", soap->error, soap_fault_string(soap), soap_fault_detail(soap)); } else { Debug(1, "Good Initial ONVIF Pull"); ONVIF_Healthy = TRUE; @@ -1120,7 +1121,9 @@ bool Monitor::connect() { #if HAVE_LIBCURL //janus setup. Depends on libcurl. if (janus_enabled && (path.find("rtsp://") != std::string::npos)) { if (add_to_janus() != 0) { - Warning("Failed to add monitor stream to Janus!"); + if (add_to_janus() != 0) { + Warning("Failed to add monitor stream to Janus!"); + } } } #endif @@ -1794,8 +1797,10 @@ bool Monitor::Poll() { set_credentials(soap); int result = proxyEvent.PullMessages(response.SubscriptionReference.Address, NULL, &tev__PullMessages, tev__PullMessagesResponse); if (result != SOAP_OK) { - if (result != -1) //Ignore the timeout error - Warning("Failed to get ONVIF messages! %i", result); + if (result != SOAP_EOF) { //Ignore the timeout error + Error("Failed to get ONVIF messages! %s", soap_fault_string(soap)); + ONVIF_Healthy = FALSE; + } } else { Debug(1, "Got Good Response! %i", result); for (auto msg : tev__PullMessagesResponse.wsnt__NotificationMessage) { @@ -1814,6 +1819,7 @@ bool Monitor::Poll() { if (!ONVIF_Trigger_State) { Debug(1,"Triggered Event"); ONVIF_Trigger_State = TRUE; + std::this_thread::sleep_for (std::chrono::seconds(1)); //thread sleep } } else { Debug(1, "Triggered off ONVIF"); @@ -1826,6 +1832,8 @@ bool Monitor::Poll() { } } } + } else { + std::this_thread::sleep_for (std::chrono::seconds(1)); //thread sleep to avoid the busy loop. } #endif return TRUE; @@ -2109,11 +2117,14 @@ bool Monitor::Analyse() { Debug(1, "Staying in %s", State_Strings[state].c_str()); } if (state == ALARM) { - last_alarm_count = analysis_image_count; + last_alarm_count = analysis_image_count; } // This is needed so post_event_count counts after last alarmed frames while in ALARM not single alarmed frames while ALERT - } else if (!score and (snap->score == 0)) { // snap->score means -1 which means didn't do motion detection so don't do state transition + + // snap->score -1 means didn't do motion detection so don't do state transition + // In Nodect, we may still have a triggered event, so need this code to run to end the event. + } else if (!score and ((snap->score == 0) or (function == NODECT))) { Debug(1, "!score %s", State_Strings[state].c_str()); - alert_to_alarm_frame_count = alarm_frame_count; // load same value configured for alarm_frame_count + alert_to_alarm_frame_count = alarm_frame_count; // load same value configured for alarm_frame_count if (state == ALARM) { Info("%s: %03d - Gone into alert state", name.c_str(), analysis_image_count); diff --git a/web/skins/classic/views/cycle.php b/web/skins/classic/views/cycle.php index 279d9bba5..ee9e03d4f 100644 --- a/web/skins/classic/views/cycle.php +++ b/web/skins/classic/views/cycle.php @@ -193,5 +193,5 @@ xhtmlHeaders(__FILE__, translate('CycleWatch')); - + diff --git a/web/skins/classic/views/montage.php b/web/skins/classic/views/montage.php index ed1869fab..bb99916dd 100644 --- a/web/skins/classic/views/montage.php +++ b/web/skins/classic/views/montage.php @@ -326,6 +326,6 @@ foreach (array_reverse($zones) as $zone) { - + diff --git a/web/skins/classic/views/watch.php b/web/skins/classic/views/watch.php index 3128f7767..f47bd1ccb 100644 --- a/web/skins/classic/views/watch.php +++ b/web/skins/classic/views/watch.php @@ -412,5 +412,5 @@ if ( ZM_WEB_SOUND_ON_ALARM ) { - +