void NagiosCheckTask::ScriptFunc(const ScriptTask::Ptr& task, const vector<Value>& arguments) { if (arguments.size() < 1) throw_exception(invalid_argument("Missing argument: Service must be specified.")); Value vservice = arguments[0]; if (!vservice.IsObjectType<DynamicObject>()) throw_exception(invalid_argument("Argument must be a config object.")); Service::Ptr service = static_cast<Service::Ptr>(vservice); String checkCommand = service->GetCheckCommand(); vector<Dictionary::Ptr> macroDicts; macroDicts.push_back(service->GetMacros()); macroDicts.push_back(service->GetHost()->GetMacros()); macroDicts.push_back(IcingaApplication::GetInstance()->GetMacros()); String command = MacroProcessor::ResolveMacros(checkCommand, macroDicts); Process::Ptr process = boost::make_shared<Process>(command); NagiosCheckTask ct(task, process); ct.m_Result = boost::make_shared<Dictionary>(); ct.m_Result->Set("schedule_start", Utility::GetTime()); process->Start(boost::bind(&NagiosCheckTask::ProcessFinishedHandler, ct)); }