void Service::ApplyCheckResult(const CheckResult& cr)
{
+ time_t now;
+ time(&now);
+
+ ServiceState old_state = GetState();
+ ServiceStateType old_stateType = GetStateType();
+
long attempt = GetCurrentCheckAttempt();
if (cr.GetState() == StateOK) {
SetCurrentCheckAttempt(attempt);
SetState(cr.GetState());
+
+ SetLastCheckResult(cr);
+
+ if (old_state != GetState()) {
+ SetLastStateChange(now);
+
+ if (old_stateType != GetStateType())
+ SetLastHardStateChange(now);
+ }
+
+ UpdateNextCheck();
}
ServiceState Service::StateFromString(const string& state)
Set("state_type", static_cast<long>(type));
}
-bool ServiceStatusMessage::GetCurrentCheckAttempt(long *attempt) const
-{
- return Get("current_attempt", attempt);
-}
-
-void ServiceStatusMessage::SetCurrentCheckAttempt(long attempt)
-{
- Set("current_attempt", attempt);
-}
-
bool ServiceStatusMessage::GetCheckResult(CheckResult *cr) const
{
Dictionary::Ptr obj;
bool GetStateType(ServiceStateType *type) const;
void SetStateType(ServiceStateType type);
- bool GetCurrentCheckAttempt(long *attempt) const;
- void SetCurrentCheckAttempt(long attempt);
-
bool GetCheckResult(CheckResult *cr) const;
void SetCheckResult(CheckResult cr);
};
if (vresult.IsObjectType<Dictionary>()) {
CheckResult result = CheckResult(static_cast<Dictionary::Ptr>(vresult));
- /* update service state */
- service.ApplyCheckResult(result);
-
RequestMessage rm;
rm.SetMethod("checker::CheckResult");
ServiceStatusMessage params;
params.SetService(service.GetName());
- params.SetState(service.GetState());
- params.SetStateType(service.GetStateType());
- params.SetCurrentCheckAttempt(service.GetCurrentCheckAttempt());
params.SetCheckResult(result);
rm.SetParams(params);
Service service = Service::GetByName(svcname);
- ServiceState state;
- ServiceStateType stateType;
- if (params.GetState(&state) && params.GetStateType(&stateType)) {
- ServiceState old_state = service.GetState();
- ServiceStateType old_stateType = service.GetStateType();
-
- if (state != old_state) {
- time_t now;
- time(&now);
-
- service.SetLastStateChange(now);
-
- if (old_stateType != stateType)
- service.SetLastHardStateChange(now);
- }
-
- service.SetState(state);
- service.SetStateType(stateType);
- }
-
- long attempt;
- if (params.GetCurrentCheckAttempt(&attempt))
- service.SetCurrentCheckAttempt(attempt);
-
CheckResult cr;
if (params.GetCheckResult(&cr))
- service.SetLastCheckResult(cr);
-
- service.UpdateNextCheck();
+ service.ApplyCheckResult(cr);
time_t now;
time(&now);
if (oldServices) {
ConfigItem::Ptr service;
BOOST_FOREACH(tie(tuples::ignore, service), oldServices) {
+ if (!service)
+ continue;
+
if (!newServices->Contains(service->GetName()))
service->Unregister();
}