mirror of https://github.com/Icinga/icinga2.git
parent
30323f410f
commit
2699eb3682
|
@ -28,9 +28,11 @@
|
||||||
#include "icinga/notification.h"
|
#include "icinga/notification.h"
|
||||||
#include "icinga/checkcommand.h"
|
#include "icinga/checkcommand.h"
|
||||||
#include "icinga/eventcommand.h"
|
#include "icinga/eventcommand.h"
|
||||||
|
#include "icinga/externalcommandprocessor.h"
|
||||||
#include "icinga/compatutility.h"
|
#include "icinga/compatutility.h"
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/tuple/tuple.hpp>
|
#include <boost/tuple/tuple.hpp>
|
||||||
|
#include <boost/algorithm/string/join.hpp>
|
||||||
|
|
||||||
using namespace icinga;
|
using namespace icinga;
|
||||||
|
|
||||||
|
@ -63,6 +65,8 @@ void ServiceDbObject::StaticInitialize(void)
|
||||||
|
|
||||||
Service::OnFlappingChanged.connect(bind(&ServiceDbObject::AddFlappingHistory, _1, _2));
|
Service::OnFlappingChanged.connect(bind(&ServiceDbObject::AddFlappingHistory, _1, _2));
|
||||||
Service::OnNewCheckResult.connect(bind(&ServiceDbObject::AddServiceCheckHistory, _1, _2));
|
Service::OnNewCheckResult.connect(bind(&ServiceDbObject::AddServiceCheckHistory, _1, _2));
|
||||||
|
|
||||||
|
ExternalCommandProcessor::OnNewExternalCommand.connect(bind(&ServiceDbObject::AddExternalCommandHistory, _1, _2, _3));
|
||||||
}
|
}
|
||||||
|
|
||||||
ServiceDbObject::ServiceDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
|
ServiceDbObject::ServiceDbObject(const DbType::Ptr& type, const String& name1, const String& name2)
|
||||||
|
@ -1261,8 +1265,6 @@ void ServiceDbObject::AddServiceCheckHistory(const Service::Ptr& service, const
|
||||||
|
|
||||||
Log(LogDebug, "db_ido", "add service check history for '" + service->GetName() + "'");
|
Log(LogDebug, "db_ido", "add service check history for '" + service->GetName() + "'");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DbQuery query1;
|
DbQuery query1;
|
||||||
query1.Table = "servicechecks";
|
query1.Table = "servicechecks";
|
||||||
query1.Type = DbQueryInsert;
|
query1.Type = DbQueryInsert;
|
||||||
|
@ -1319,3 +1321,25 @@ void ServiceDbObject::AddServiceCheckHistory(const Service::Ptr& service, const
|
||||||
OnQuery(query1);
|
OnQuery(query1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* externalcommands */
|
||||||
|
void ServiceDbObject::AddExternalCommandHistory(double time, const String& command, const std::vector<String>& arguments)
|
||||||
|
{
|
||||||
|
Log(LogDebug, "db_ido", "add external command history");
|
||||||
|
|
||||||
|
DbQuery query1;
|
||||||
|
query1.Table = "externalcommands";
|
||||||
|
query1.Type = DbQueryInsert;
|
||||||
|
|
||||||
|
Dictionary::Ptr fields1 = boost::make_shared<Dictionary>();
|
||||||
|
|
||||||
|
fields1->Set("entry_time", DbValue::FromTimestamp(static_cast<long>(time)));
|
||||||
|
fields1->Set("command_type", Empty); // FIXME
|
||||||
|
fields1->Set("command_name", command);
|
||||||
|
fields1->Set("command_args", boost::algorithm::join(arguments, ";"));
|
||||||
|
|
||||||
|
fields1->Set("instance_id", 0); /* DbConnection class fills in real ID */
|
||||||
|
|
||||||
|
query1.Fields = fields1;
|
||||||
|
OnQuery(query1);
|
||||||
|
}
|
|
@ -110,6 +110,7 @@ private:
|
||||||
|
|
||||||
static void AddFlappingHistory(const Service::Ptr& service, FlappingState flapping_state);
|
static void AddFlappingHistory(const Service::Ptr& service, FlappingState flapping_state);
|
||||||
static void AddServiceCheckHistory(const Service::Ptr& service, const Dictionary::Ptr &cr);
|
static void AddServiceCheckHistory(const Service::Ptr& service, const Dictionary::Ptr &cr);
|
||||||
|
static void AddExternalCommandHistory(double time, const String& command, const std::vector<String>& arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,8 @@ boost::once_flag ExternalCommandProcessor::m_InitializeOnce = BOOST_ONCE_INIT;
|
||||||
boost::mutex ExternalCommandProcessor::m_Mutex;
|
boost::mutex ExternalCommandProcessor::m_Mutex;
|
||||||
std::map<String, ExternalCommandProcessor::Callback> ExternalCommandProcessor::m_Commands;
|
std::map<String, ExternalCommandProcessor::Callback> ExternalCommandProcessor::m_Commands;
|
||||||
|
|
||||||
|
boost::signals2::signal<void (double, const String&, const std::vector<String>&)> ExternalCommandProcessor::OnNewExternalCommand;
|
||||||
|
|
||||||
void ExternalCommandProcessor::Execute(const String& line)
|
void ExternalCommandProcessor::Execute(const String& line)
|
||||||
{
|
{
|
||||||
if (line.IsEmpty())
|
if (line.IsEmpty())
|
||||||
|
@ -90,6 +92,8 @@ void ExternalCommandProcessor::Execute(double time, const String& command, const
|
||||||
callback = it->second;
|
callback = it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OnNewExternalCommand(time, command, arguments);
|
||||||
|
|
||||||
callback(time, arguments);
|
callback(time, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <boost/thread/mutex.hpp>
|
#include <boost/thread/mutex.hpp>
|
||||||
#include <boost/thread/once.hpp>
|
#include <boost/thread/once.hpp>
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
|
#include <boost/signals2.hpp>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace icinga
|
namespace icinga
|
||||||
|
@ -35,6 +36,8 @@ 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 boost::signals2::signal<void (double, const String&, const std::vector<String>&)> OnNewExternalCommand;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef boost::function<void (double time, const std::vector<String>& arguments)> Callback;
|
typedef boost::function<void (double time, const std::vector<String>& arguments)> Callback;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue