mirror of
https://github.com/Icinga/icinga2.git
synced 2026-06-20 14:09:06 -04:00
Since perfdata is set once when a check result is created and never changed again, locking this is unnecessary. This avoids components unnecessarily waiting on each other when processing perfdata. This fixes the locking cascade observed sometimes when the perfdata writer work queue blocks, where it extends to a lock on the entire check result eventually, affecting even more components.
43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
// SPDX-FileCopyrightText: 2012 Icinga GmbH <https://icinga.com>
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#include "icinga/checkresult.hpp"
|
|
#include "icinga/checkresult-ti.cpp"
|
|
#include "base/scriptglobal.hpp"
|
|
|
|
using namespace icinga;
|
|
|
|
REGISTER_TYPE(CheckResult);
|
|
|
|
INITIALIZE_ONCE([]() {
|
|
ScriptGlobal::Set("Icinga.ServiceOK", ServiceOK);
|
|
ScriptGlobal::Set("Icinga.ServiceWarning", ServiceWarning);
|
|
ScriptGlobal::Set("Icinga.ServiceCritical", ServiceCritical);
|
|
ScriptGlobal::Set("Icinga.ServiceUnknown", ServiceUnknown);
|
|
|
|
ScriptGlobal::Set("Icinga.HostUp", HostUp);
|
|
ScriptGlobal::Set("Icinga.HostDown", HostDown);
|
|
})
|
|
|
|
double CheckResult::CalculateExecutionTime() const
|
|
{
|
|
return GetExecutionEnd() - GetExecutionStart();
|
|
}
|
|
|
|
double CheckResult::CalculateLatency() const
|
|
{
|
|
double latency = (GetScheduleEnd() - GetScheduleStart()) - CalculateExecutionTime();
|
|
|
|
if (latency < 0)
|
|
latency = 0;
|
|
|
|
return latency;
|
|
}
|
|
|
|
void CheckResult::SetPerformanceData(const Array::Ptr& value, bool suppress_events, const Value& cookie)
|
|
{
|
|
if (value) {
|
|
value->Freeze();
|
|
}
|
|
ObjectImpl<CheckResult>::SetPerformanceData(value, suppress_events, cookie);
|
|
}
|