mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-23 21:55:03 +02:00
Get rid of INITIALIZE_ONCE for the ExternalCommandProcessor
This commit is contained in:
parent
9ce950b0f1
commit
63fd6e3905
@ -43,40 +43,8 @@
|
|||||||
|
|
||||||
using namespace icinga;
|
using namespace icinga;
|
||||||
|
|
||||||
INITIALIZE_ONCE(&ExternalCommandProcessor::StaticInitialize);
|
|
||||||
|
|
||||||
typedef std::function<void (double, const std::vector<String>& arguments)> ExternalCommandCallback;
|
|
||||||
|
|
||||||
struct ExternalCommandInfo
|
|
||||||
{
|
|
||||||
ExternalCommandCallback Callback;
|
|
||||||
size_t MinArgs;
|
|
||||||
size_t MaxArgs;
|
|
||||||
};
|
|
||||||
|
|
||||||
static boost::mutex& GetMutex(void)
|
|
||||||
{
|
|
||||||
static boost::mutex mtx;
|
|
||||||
return mtx;
|
|
||||||
}
|
|
||||||
static std::map<String, ExternalCommandInfo>& GetCommands(void)
|
|
||||||
{
|
|
||||||
static std::map<String, ExternalCommandInfo> commands;
|
|
||||||
return commands;
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::signals2::signal<void(double, const String&, const std::vector<String>&)> ExternalCommandProcessor::OnNewExternalCommand;
|
boost::signals2::signal<void(double, const String&, const std::vector<String>&)> ExternalCommandProcessor::OnNewExternalCommand;
|
||||||
|
|
||||||
static void RegisterCommand(const String& command, const ExternalCommandCallback& callback, size_t minArgs = 0, size_t maxArgs = UINT_MAX)
|
|
||||||
{
|
|
||||||
boost::mutex::scoped_lock lock(GetMutex());
|
|
||||||
ExternalCommandInfo eci;
|
|
||||||
eci.Callback = callback;
|
|
||||||
eci.MinArgs = minArgs;
|
|
||||||
eci.MaxArgs = (maxArgs == UINT_MAX) ? minArgs : maxArgs;
|
|
||||||
GetCommands()[command] = eci;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ExternalCommandProcessor::Execute(const String& line)
|
void ExternalCommandProcessor::Execute(const String& line)
|
||||||
{
|
{
|
||||||
if (line.IsEmpty())
|
if (line.IsEmpty())
|
||||||
@ -156,7 +124,17 @@ void ExternalCommandProcessor::Execute(double time, const String& command, const
|
|||||||
eci.Callback(time, realArguments);
|
eci.Callback(time, realArguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExternalCommandProcessor::StaticInitialize(void)
|
void ExternalCommandProcessor::RegisterCommand(const String& command, const ExternalCommandCallback& callback, size_t minArgs, size_t maxArgs)
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(GetMutex());
|
||||||
|
ExternalCommandInfo eci;
|
||||||
|
eci.Callback = callback;
|
||||||
|
eci.MinArgs = minArgs;
|
||||||
|
eci.MaxArgs = (maxArgs == UINT_MAX) ? minArgs : maxArgs;
|
||||||
|
GetCommands()[command] = eci;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExternalCommandProcessor::RegisterCommands(void)
|
||||||
{
|
{
|
||||||
RegisterCommand("PROCESS_HOST_CHECK_RESULT", &ExternalCommandProcessor::ProcessHostCheckResult, 3);
|
RegisterCommand("PROCESS_HOST_CHECK_RESULT", &ExternalCommandProcessor::ProcessHostCheckResult, 3);
|
||||||
RegisterCommand("PROCESS_SERVICE_CHECK_RESULT", &ExternalCommandProcessor::ProcessServiceCheckResult, 4);
|
RegisterCommand("PROCESS_SERVICE_CHECK_RESULT", &ExternalCommandProcessor::ProcessServiceCheckResult, 4);
|
||||||
@ -2254,3 +2232,16 @@ void ExternalCommandProcessor::DisableServicegroupSvcNotifications(double, const
|
|||||||
service->ModifyAttribute("enable_notifications", false);
|
service->ModifyAttribute("enable_notifications", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::mutex& ExternalCommandProcessor::GetMutex(void)
|
||||||
|
{
|
||||||
|
static boost::mutex mtx;
|
||||||
|
return mtx;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<String, ExternalCommandInfo>& ExternalCommandProcessor::GetCommands(void)
|
||||||
|
{
|
||||||
|
static std::map<String, ExternalCommandInfo> commands;
|
||||||
|
return commands;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -29,13 +29,20 @@
|
|||||||
namespace icinga
|
namespace icinga
|
||||||
{
|
{
|
||||||
|
|
||||||
|
typedef std::function<void (double, const std::vector<String>& arguments)> ExternalCommandCallback;
|
||||||
|
|
||||||
|
struct ExternalCommandInfo
|
||||||
|
{
|
||||||
|
ExternalCommandCallback Callback;
|
||||||
|
size_t MinArgs;
|
||||||
|
size_t MaxArgs;
|
||||||
|
};
|
||||||
|
|
||||||
class I2_ICINGA_API ExternalCommandProcessor {
|
class I2_ICINGA_API ExternalCommandProcessor {
|
||||||
public:
|
public:
|
||||||
static void Execute(const String& line);
|
static void Execute(const String& line);
|
||||||
static void Execute(double time, const String& command, const std::vector<String>& arguments);
|
static void Execute(double time, const String& command, const std::vector<String>& arguments);
|
||||||
|
|
||||||
static void StaticInitialize(void);
|
|
||||||
|
|
||||||
static boost::signals2::signal<void(double, const String&, const std::vector<String>&)> OnNewExternalCommand;
|
static boost::signals2::signal<void(double, const String&, const std::vector<String>&)> OnNewExternalCommand;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -165,6 +172,13 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
static void ChangeCustomCommandVarInternal(const Command::Ptr& command, const String& name, const Value& value);
|
static void ChangeCustomCommandVarInternal(const Command::Ptr& command, const String& name, const Value& value);
|
||||||
|
|
||||||
|
static void RegisterCommand(const String& command, const ExternalCommandCallback& callback, size_t minArgs = 0, size_t maxArgs = UINT_MAX);
|
||||||
|
static void RegisterCommands(void);
|
||||||
|
|
||||||
|
static boost::mutex& GetMutex(void);
|
||||||
|
static std::map<String, ExternalCommandInfo>& GetCommands(void);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user