]> granicus.if.org Git - icinga2/commitdiff
Checker: don't report missed checks after restarting Icinga
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 23 Jan 2013 14:25:00 +0000 (15:25 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 23 Jan 2013 14:28:32 +0000 (15:28 +0100)
Fixes #3253

components/checker/checkercomponent.cpp
lib/icinga/service.cpp
lib/icinga/service.h

index b35b51664160a7cd61824fef8d3fb54683d4b585..4cb1f198709019c26ebbdb0da45c8abfdf5c0b35 100644 (file)
@@ -90,12 +90,14 @@ void CheckerComponent::CheckTimerHandler(void)
                        double lastCheck = cr->Get("execution_end");
                        int missed = (Utility::GetTime() - lastCheck) / service->GetCheckInterval() - 1;
 
-                       if (missed > 0) {
+                       if (missed > 0 && !service->GetFirstCheck()) {
                                missedChecks += missed;
                                missedServices++;
                        }
                }
 
+               service->SetFirstCheck(false);
+
                Logger::Write(LogDebug, "checker", "Executing service check for '" + service->GetName() + "'");
 
                m_PendingServices.insert(service);
index a0ba70e1b7f452f4131af2de8abc593448a8450c..c33d4e6001083cecd4fc6235a6e7c8bdf283242b 100644 (file)
@@ -34,6 +34,7 @@ static AttributeDescription serviceAttributes[] = {
        { "checkers", Attribute_Config },
 
        { "scheduling_offset", Attribute_Transient },
+       { "first_check", Attribute_Transient },
        { "next_check", Attribute_Replicated },
        { "checker", Attribute_Replicated },
        { "check_attempt", Attribute_Replicated },
@@ -225,6 +226,22 @@ long Service::GetSchedulingOffset(void)
        return value;
 }
 
+void Service::SetFirstCheck(bool first)
+{
+       Set("first_check", first ? 1 : 0);
+}
+
+bool Service::GetFirstCheck(void) const
+{
+       Value value = Get("first_check");
+
+       if (value.IsEmpty())
+               return true;
+
+       return static_cast<long>(value);
+}
+
+
 void Service::SetNextCheck(double nextCheck)
 {
        Set("next_check", nextCheck);
index 91bbc92b08b771fcc2ffed3f1456a31eedcbbbfb..e97afff218f668d0775738c4006d198b17d398fe 100644 (file)
@@ -100,7 +100,10 @@ public:
 
        long GetSchedulingOffset(void);
        void SetSchedulingOffset(long offset);
-       
+
+       void SetFirstCheck(bool first);
+       bool GetFirstCheck(void) const; 
+
        void SetNextCheck(double nextCheck);
        double GetNextCheck(void);
        void UpdateNextCheck(void);