From 97ef265e8823d972377d6889903e619f1690670a Mon Sep 17 00:00:00 2001 From: Mattia Codato Date: Thu, 2 Jul 2020 10:31:24 +0200 Subject: [PATCH] Update execMacros --- lib/icinga/apiactions.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/lib/icinga/apiactions.cpp b/lib/icinga/apiactions.cpp index b195d4405..8c86fcb03 100644 --- a/lib/icinga/apiactions.cpp +++ b/lib/icinga/apiactions.cpp @@ -562,12 +562,10 @@ Dictionary::Ptr ApiActions::ExecuteCommand(const ConfigObject::Ptr& object, endpoint = HttpUtility::GetLastParameter(params, "endpoint"); MacroProcessor::ResolverList resolvers; - Dictionary::Ptr macros; if (params->Contains("macros")) { - Value vmacros = HttpUtility::GetLastParameter(params, "macros"); - if (vmacros.IsObjectType()) { - resolvers.emplace_back("override", vmacros); - macros = vmacros; + Value macros = HttpUtility::GetLastParameter(params, "macros"); + if (macros.IsObjectType()) { + resolvers.emplace_back("override", macros); } else return ApiActions::CreateResult(400, "Parameter macros must be a dictionary."); @@ -653,6 +651,25 @@ Dictionary::Ptr ApiActions::ExecuteCommand(const ConfigObject::Ptr& object, MessageOrigin::Ptr origin = new MessageOrigin(); listener->RelayMessage(origin, checkable, updateMessage, true); + double scheduled_start = checkable->GetNextCheck(); + double before_check = Utility::GetTime(); + + CheckResult::Ptr cr = new CheckResult(); + cr->SetScheduleStart(scheduled_start); + cr->SetExecutionStart(before_check); + + Dictionary::Ptr execMacros = new Dictionary(); + if (command_type == "CheckCommand") { + CheckCommand::Ptr cmd = CheckCommand::GetByName(resolved_command); + cmd->Execute(checkable, cr, execMacros, false); + } else if (command_type == "EventCommand") { + EventCommand::Ptr cmd = EventCommand::GetByName(resolved_command); + cmd->Execute(checkable, execMacros, false); + } else if (command_type == "NotificationCommand") { + /* TODO */ + return ApiActions::CreateResult(501, "Not implementd."); + } + /* Create execution parameters */ Dictionary::Ptr execParams = new Dictionary(); execParams->Set("command_type", command_type); @@ -670,8 +687,7 @@ Dictionary::Ptr ApiActions::ExecuteCommand(const ConfigObject::Ptr& object, execParams->Set("source", uuid); execParams->Set("deadline", deadline); - if (macros) - execParams->Set("macros", macros); + execParams->Set("macros", execMacros); /* Execute command */ bool local = endpointPtr == Endpoint::GetLocalEndpoint();