| 13 | REGISTER_FUNCTION_NONCONST(Internal, SleepCheck, &SleepCheckTask::ScriptFunc, "checkable:cr:producer:resolvedMacros:useResolvedMacros"); |
| 14 | |
| 15 | void SleepCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr, |
| 16 | const WaitGroup::Ptr& producer, const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros) |
| 17 | { |
| 18 | REQUIRE_NOT_NULL(checkable); |
| 19 | REQUIRE_NOT_NULL(cr); |
| 20 | |
| 21 | CheckCommand::Ptr commandObj = CheckCommand::ExecuteOverride ? CheckCommand::ExecuteOverride : checkable->GetCheckCommand(); |
| 22 | |
| 23 | Host::Ptr host; |
| 24 | Service::Ptr service; |
| 25 | tie(host, service) = GetHostService(checkable); |
| 26 | |
| 27 | MacroProcessor::ResolverList resolvers; |
| 28 | |
| 29 | if (MacroResolver::OverrideMacros) |
| 30 | resolvers.emplace_back("override", MacroResolver::OverrideMacros); |
| 31 | |
| 32 | if (service) |
| 33 | resolvers.emplace_back("service", service); |
| 34 | resolvers.emplace_back("host", host); |
| 35 | resolvers.emplace_back("command", commandObj); |
| 36 | |
| 37 | double sleepTime = MacroProcessor::ResolveMacros("$sleep_time$", resolvers, checkable->GetLastCheckResult(), |
| 38 | nullptr, MacroProcessor::EscapeCallback(), resolvedMacros, useResolvedMacros); |
| 39 | |
| 40 | if (resolvedMacros && !useResolvedMacros) |
| 41 | return; |
| 42 | |
| 43 | Utility::Sleep(sleepTime); |
| 44 | |
| 45 | String output = "Slept for " + Convert::ToString(sleepTime) + " seconds."; |
| 46 | |
| 47 | double now = Utility::GetTime(); |
| 48 | CheckCommand::Ptr command = checkable->GetCheckCommand(); |
| 49 | String commandName = command->GetName(); |
| 50 | |
| 51 | if (Checkable::ExecuteCommandProcessFinishedHandler) { |
| 52 | ProcessResult pr; |
| 53 | pr.PID = -1; |
| 54 | pr.Output = output; |
| 55 | pr.ExecutionStart = now - sleepTime; |
| 56 | pr.ExecutionEnd = now; |
| 57 | pr.ExitStatus = 0; |
| 58 | |
| 59 | Checkable::ExecuteCommandProcessFinishedHandler("", pr); |
| 60 | } else { |
| 61 | cr->SetOutput(output); |
| 62 | cr->SetExecutionStart(now); |
| 63 | cr->SetExecutionEnd(now); |
| 64 | cr->SetCommand(commandName); |
| 65 | |
| 66 | checkable->ProcessCheckResult(cr, producer); |
| 67 | } |
| 68 | } |
nothing calls this directly
no test coverage detected