Skip to content

Commit 7119051

Browse files
committed
Truncate several macros if a notification command line gets too big to run
Namely $host.output$, $service.output$ and $notification.comment$.
1 parent 50f7923 commit 7119051

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

lib/icinga/pluginutility.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ using namespace icinga;
1616
void PluginUtility::ExecuteCommand(const Command::Ptr& commandObj, const Checkable::Ptr& checkable,
1717
const CheckResult::Ptr& cr, const MacroProcessor::ResolverList& macroResolvers,
1818
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros, int timeout,
19-
const std::function<void(const Value& commandLine, const ProcessResult&)>& callback)
19+
const std::function<void(const Value& commandLine, const ProcessResult&)>& callback,
20+
const Array::Ptr& safeToTruncate)
2021
{
2122
Value raw_command = commandObj->GetCommandLine();
2223
Dictionary::Ptr raw_arguments = commandObj->GetArguments();
@@ -74,7 +75,7 @@ void PluginUtility::ExecuteCommand(const Command::Ptr& commandObj, const Checkab
7475
if (resolvedMacros && !useResolvedMacros)
7576
return;
7677

77-
Process::Ptr process = new Process(Process::PrepareCommand(command), envMacros);
78+
Process::Ptr process = new Process(Process::PrepareCommand(command), envMacros, safeToTruncate);
7879

7980
process->SetTimeout(timeout);
8081
process->SetAdjustPriority(true);

lib/icinga/pluginutility.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ class PluginUtility
2525
static void ExecuteCommand(const Command::Ptr& commandObj, const Checkable::Ptr& checkable,
2626
const CheckResult::Ptr& cr, const MacroProcessor::ResolverList& macroResolvers,
2727
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros, int timeout,
28-
const std::function<void(const Value& commandLine, const ProcessResult&)>& callback = std::function<void(const Value& commandLine, const ProcessResult&)>());
28+
const std::function<void(const Value& commandLine, const ProcessResult&)>& callback = std::function<void(const Value& commandLine, const ProcessResult&)>(),
29+
const Array::Ptr& safeToTruncate = nullptr);
2930

3031
static ServiceState ExitStatusToState(int exitStatus);
3132
static std::pair<String, String> ParseCheckOutput(const String& output);

lib/methods/pluginnotificationtask.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,26 @@ void PluginNotificationTask::ScriptFunc(const Notification::Ptr& notification,
6262
callback = [checkable](const Value& commandline, const ProcessResult& pr) { ProcessFinishedHandler(checkable, commandline, pr); };
6363
}
6464

65+
Array::Ptr safeToTruncate = new Array();
66+
67+
auto hostCr (host->GetLastCheckResult());
68+
69+
if (hostCr) {
70+
safeToTruncate->Add(hostCr->GetOutput());
71+
}
72+
73+
if (service) {
74+
auto cr (service->GetLastCheckResult());
75+
76+
if (cr) {
77+
safeToTruncate->Add(cr->GetOutput());
78+
}
79+
}
80+
81+
safeToTruncate->Add(comment);
82+
6583
PluginUtility::ExecuteCommand(commandObj, checkable, cr, resolvers,
66-
resolvedMacros, useResolvedMacros, timeout, callback);
84+
resolvedMacros, useResolvedMacros, timeout, callback, safeToTruncate);
6785
}
6886

6987
void PluginNotificationTask::ProcessFinishedHandler(const Checkable::Ptr& checkable, const Value& commandLine, const ProcessResult& pr)

0 commit comments

Comments
 (0)