mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-27 15:44:11 +02:00
compatido: fix config dump, add closesink, add host/service cyclic status dumps
This commit is contained in:
parent
ceb25ab1cc
commit
c0d3971792
@ -69,6 +69,9 @@ void CompatIdoComponent::Start(void)
|
|||||||
void CompatIdoComponent::Stop(void)
|
void CompatIdoComponent::Stop(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//FIXME cleanly close ido socket
|
||||||
|
GoodByeSink();
|
||||||
|
CloseSink();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
@ -159,6 +162,32 @@ void CompatIdoComponent::SendHello(String instancename)
|
|||||||
m_IdoSocket->SendMessage(message.str());
|
m_IdoSocket->SendMessage(message.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sends goodbye msg to ido
|
||||||
|
*/
|
||||||
|
void CompatIdoComponent::GoodByeSink()
|
||||||
|
{
|
||||||
|
time_t now;
|
||||||
|
time(&now);
|
||||||
|
|
||||||
|
stringstream message;
|
||||||
|
message << "\n"
|
||||||
|
<< IDO_API_ENDDATADUMP << "\n"
|
||||||
|
<< IDO_API_ENDTIME << ": " << now << "\n"
|
||||||
|
<< IDO_API_GOODBYE
|
||||||
|
<< "\n\n";
|
||||||
|
|
||||||
|
m_IdoSocket->SendMessage(message.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* closes sink
|
||||||
|
*/
|
||||||
|
void CompatIdoComponent::CloseSink()
|
||||||
|
{
|
||||||
|
m_IdoSocket->Close();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sends config dump start signal to ido
|
* sends config dump start signal to ido
|
||||||
*/
|
*/
|
||||||
@ -262,11 +291,17 @@ void CompatIdoComponent::DumpHostObject(const Host::Ptr& host)
|
|||||||
<< IDO_DATA_HAVE3DCOORDS << "=" << 0 << "\n"
|
<< IDO_DATA_HAVE3DCOORDS << "=" << 0 << "\n"
|
||||||
<< IDO_DATA_X3D << "=" << 0.0 << "\n"
|
<< IDO_DATA_X3D << "=" << 0.0 << "\n"
|
||||||
<< IDO_DATA_Y3D << "=" << 0.0 << "\n"
|
<< IDO_DATA_Y3D << "=" << 0.0 << "\n"
|
||||||
<< IDO_DATA_Z3D<< "=" << 0.0 << "\n";
|
<< IDO_DATA_Z3D<< "=" << 0.0 << "\n"
|
||||||
/* FIXME add more related config items
|
/* FIXME add more related config items
|
||||||
* parents, contactgroups, contacts, custom vars
|
* parents, contactgroups, contacts, custom vars
|
||||||
* before sending the message
|
* before sending the message
|
||||||
*/
|
*/
|
||||||
|
<< IDO_DATA_PARENTHOST << "=" << "i2_parent" << "\n"
|
||||||
|
<< IDO_DATA_CONTACTGROUP << "=" << "i2_contactgroup" << "\n"
|
||||||
|
<< IDO_DATA_CONTACT << "=" << "i2_contact" << "\n"
|
||||||
|
<< IDO_DATA_CUSTOMVARIABLE << "=" << "i2_customvar" << ":" << 1 << ":" << "i2_custom_var_mod" << "\n"
|
||||||
|
<< IDO_API_ENDDATA << "\n\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_IdoSocket->SendMessage(message.str());
|
m_IdoSocket->SendMessage(message.str());
|
||||||
@ -278,7 +313,73 @@ void CompatIdoComponent::DumpHostObject(const Host::Ptr& host)
|
|||||||
void CompatIdoComponent::DumpHostStatus(const Host::Ptr& host)
|
void CompatIdoComponent::DumpHostStatus(const Host::Ptr& host)
|
||||||
{
|
{
|
||||||
|
|
||||||
//FIXME
|
int state;
|
||||||
|
if (!host->IsReachable())
|
||||||
|
state = 2; /* unreachable */
|
||||||
|
else if (!host->IsUp())
|
||||||
|
state = 1; /* down */
|
||||||
|
else
|
||||||
|
state = 0; /* up */
|
||||||
|
|
||||||
|
struct timeval now;
|
||||||
|
gettimeofday(&now, NULL);
|
||||||
|
|
||||||
|
stringstream message;
|
||||||
|
message << "\n"
|
||||||
|
<< IDO_API_HOSTSTATUSDATA << ":" << "\n"
|
||||||
|
<< IDO_DATA_TYPE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_FLAGS << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_ATTRIBUTES << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_TIMESTAMP << "=" << now.tv_sec << "." << now.tv_usec << "\n"
|
||||||
|
<< IDO_DATA_HOST << "=" << host->GetName() << "\n"
|
||||||
|
<< IDO_DATA_OUTPUT << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LONGOUTPUT << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_PERFDATA << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_CURRENTSTATE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_HASBEENCHECKED << "=" << 1 << "\n"
|
||||||
|
<< IDO_DATA_SHOULDBESCHEDULED << "=" << 1 << "\n"
|
||||||
|
<< IDO_DATA_CURRENTCHECKATTEMPT << "=" << 1 << "\n"
|
||||||
|
<< IDO_DATA_MAXCHECKATTEMPTS << "=" << 1 << "\n"
|
||||||
|
<< IDO_DATA_LASTHOSTCHECK << "=" << Utility::GetTime() << "\n"
|
||||||
|
<< IDO_DATA_NEXTHOSTCHECK << "=" << Utility::GetTime() << "\n"
|
||||||
|
<< IDO_DATA_CHECKTYPE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTSTATECHANGE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTHARDSTATECHANGE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTHARDSTATE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTTIMEUP << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTTIMEDOWN << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTTIMEUNREACHABLE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_STATETYPE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTHOSTNOTIFICATION << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_NEXTHOSTNOTIFICATION << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_NOMORENOTIFICATIONS << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_NOTIFICATIONSENABLED << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_PROBLEMHASBEENACKNOWLEDGED << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_ACKNOWLEDGEMENTTYPE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_CURRENTNOTIFICATIONNUMBER << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_PASSIVEHOSTCHECKSENABLED << "=" << 1 << "\n"
|
||||||
|
<< IDO_DATA_EVENTHANDLERENABLED << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_ACTIVEHOSTCHECKSENABLED << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_FLAPDETECTIONENABLED << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_ISFLAPPING << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_PERCENTSTATECHANGE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LATENCY << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_EXECUTIONTIME << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_SCHEDULEDDOWNTIMEDEPTH << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_FAILUREPREDICTIONENABLED << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_PROCESSPERFORMANCEDATA << "=" << 1 << "\n"
|
||||||
|
<< IDO_DATA_OBSESSOVERHOST << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_MODIFIEDHOSTATTRIBUTES << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_EVENTHANDLER << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_CHECKCOMMAND << "=" << "i2_virtual_check" << "\n"
|
||||||
|
<< IDO_DATA_NORMALCHECKINTERVAL << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_RETRYCHECKINTERVAL << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_HOSTCHECKPERIOD << "=" << "" << "\n"
|
||||||
|
/* FIXME dump all customvars in a loop */
|
||||||
|
<< IDO_DATA_CUSTOMVARIABLE << "=" << "i2_customvar" << ":" << "1" << ":" << "i2_customvarmod" << "\n"
|
||||||
|
<< IDO_API_ENDDATA << "\n\n";
|
||||||
|
|
||||||
|
m_IdoSocket->SendMessage(message.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -339,11 +440,15 @@ void CompatIdoComponent::DumpServiceObject(const Service::Ptr& service)
|
|||||||
<< IDO_DATA_NOTESURL << "=" << "" << "\n"
|
<< IDO_DATA_NOTESURL << "=" << "" << "\n"
|
||||||
<< IDO_DATA_ACTIONURL << "=" << "" << "\n"
|
<< IDO_DATA_ACTIONURL << "=" << "" << "\n"
|
||||||
<< IDO_DATA_ICONIMAGE << "=" << "" << "\n"
|
<< IDO_DATA_ICONIMAGE << "=" << "" << "\n"
|
||||||
<< IDO_DATA_ICONIMAGEALT << "=" << "" << "\n";
|
<< IDO_DATA_ICONIMAGEALT << "=" << "" << "\n"
|
||||||
/* FIXME add more related config items
|
/* FIXME add more related config items
|
||||||
* contactgroups, contacts, custom vars
|
* contactgroups, contacts, custom vars
|
||||||
* before sending the message
|
* before sending the message, in a loop
|
||||||
*/
|
*/
|
||||||
|
<< IDO_DATA_CONTACTGROUP << "=" << "i2_contactgroup" << "\n"
|
||||||
|
<< IDO_DATA_CONTACT << "=" << "i2_contact" << "\n"
|
||||||
|
<< IDO_DATA_CUSTOMVARIABLE << "=" << "i2_customvar" << ":" << 1 << ":" << "i2_custom_var_mod" << "\n"
|
||||||
|
<< IDO_API_ENDDATA << "\n\n";
|
||||||
|
|
||||||
Logger::Write(LogInformation, "compatido", "Writing compat ido service");
|
Logger::Write(LogInformation, "compatido", "Writing compat ido service");
|
||||||
m_IdoSocket->SendMessage(message.str());
|
m_IdoSocket->SendMessage(message.str());
|
||||||
@ -354,8 +459,90 @@ void CompatIdoComponent::DumpServiceObject(const Service::Ptr& service)
|
|||||||
*/
|
*/
|
||||||
void CompatIdoComponent::DumpServiceStatus(const Service::Ptr& service)
|
void CompatIdoComponent::DumpServiceStatus(const Service::Ptr& service)
|
||||||
{
|
{
|
||||||
|
String output;
|
||||||
|
String perfdata;
|
||||||
|
double schedule_start = -1, schedule_end = -1;
|
||||||
|
double execution_start = -1, execution_end = -1;
|
||||||
|
|
||||||
//FIXME
|
Dictionary::Ptr cr = service->GetLastCheckResult();
|
||||||
|
if (cr) {
|
||||||
|
output = cr->Get("output");
|
||||||
|
schedule_start = cr->Get("schedule_start");
|
||||||
|
schedule_end = cr->Get("schedule_end");
|
||||||
|
execution_start = cr->Get("execution_start");
|
||||||
|
execution_end = cr->Get("execution_end");
|
||||||
|
perfdata = cr->Get("performance_data_raw");
|
||||||
|
}
|
||||||
|
|
||||||
|
double execution_time = (execution_end - execution_start);
|
||||||
|
double latency = (schedule_end - schedule_start) - execution_time;
|
||||||
|
|
||||||
|
int state = service->GetState();
|
||||||
|
|
||||||
|
if (state > StateUnknown)
|
||||||
|
state = StateUnknown;
|
||||||
|
|
||||||
|
struct timeval now;
|
||||||
|
gettimeofday(&now, NULL);
|
||||||
|
|
||||||
|
stringstream message;
|
||||||
|
message << "\n"
|
||||||
|
<< IDO_API_SERVICESTATUSDATA << ":" << "\n"
|
||||||
|
<< IDO_DATA_TYPE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_FLAGS << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_ATTRIBUTES << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_TIMESTAMP << "=" << now.tv_sec << "." << now.tv_usec << "\n"
|
||||||
|
<< IDO_DATA_HOST << "=" << service->GetHost()->GetName() << "\n"
|
||||||
|
<< IDO_DATA_SERVICE << "=" << service->GetAlias() << "\n"
|
||||||
|
<< IDO_DATA_OUTPUT << "=" << output << "\n"
|
||||||
|
<< IDO_DATA_LONGOUTPUT << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_PERFDATA << "=" << perfdata << "\n"
|
||||||
|
<< IDO_DATA_CURRENTSTATE << "=" << state << "\n"
|
||||||
|
<< IDO_DATA_HASBEENCHECKED << "=" << (service->GetLastCheckResult() ? 1 : 0) << "\n"
|
||||||
|
<< IDO_DATA_SHOULDBESCHEDULED << "=" << "1" << "\n"
|
||||||
|
<< IDO_DATA_CURRENTCHECKATTEMPT << "=" << service->GetCurrentCheckAttempt() << "\n"
|
||||||
|
<< IDO_DATA_MAXCHECKATTEMPTS << "=" << service->GetMaxCheckAttempts() << "\n"
|
||||||
|
<< IDO_DATA_LASTSERVICECHECK << "=" << schedule_end << "\n"
|
||||||
|
<< IDO_DATA_NEXTSERVICECHECK << "=" << service->GetNextCheck() << "\n"
|
||||||
|
<< IDO_DATA_CHECKTYPE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTSTATECHANGE << "=" << service->GetLastStateChange() << "\n"
|
||||||
|
<< IDO_DATA_LASTHARDSTATECHANGE << "=" << service->GetLastHardStateChange() << "\n"
|
||||||
|
<< IDO_DATA_LASTHARDSTATE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTTIMEOK << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTTIMEWARNING << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTTIMEUNKNOWN << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LASTTIMECRITICAL << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_STATETYPE << "=" << service->GetStateType() << "\n"
|
||||||
|
<< IDO_DATA_LASTSERVICENOTIFICATION << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_NEXTSERVICENOTIFICATION << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_NOMORENOTIFICATIONS << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_NOTIFICATIONSENABLED << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_PROBLEMHASBEENACKNOWLEDGED << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_ACKNOWLEDGEMENTTYPE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_CURRENTNOTIFICATIONNUMBER << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_PASSIVESERVICECHECKSENABLED << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_EVENTHANDLERENABLED << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_ACTIVESERVICECHECKSENABLED << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_FLAPDETECTIONENABLED << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_ISFLAPPING << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_PERCENTSTATECHANGE << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_LATENCY << "=" << latency << "\n"
|
||||||
|
<< IDO_DATA_EXECUTIONTIME << "=" << execution_time << "\n"
|
||||||
|
<< IDO_DATA_SCHEDULEDDOWNTIMEDEPTH << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_FAILUREPREDICTIONENABLED << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_PROCESSPERFORMANCEDATA << "=" << 1 << "\n"
|
||||||
|
<< IDO_DATA_OBSESSOVERSERVICE << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_MODIFIEDSERVICEATTRIBUTES << "=" << 0 << "\n"
|
||||||
|
<< IDO_DATA_EVENTHANDLER << "=" << "" << "\n"
|
||||||
|
<< IDO_DATA_CHECKCOMMAND << "=" << "i2_check_service" << "\n"
|
||||||
|
<< IDO_DATA_NORMALCHECKINTERVAL << "=" << service->GetCheckInterval() / 60.0 << "\n"
|
||||||
|
<< IDO_DATA_RETRYCHECKINTERVAL << "=" << service->GetRetryInterval() / 60.0 << "\n"
|
||||||
|
<< IDO_DATA_SERVICECHECKPERIOD << "=" << "" << "\n"
|
||||||
|
/* FIXME dump customvars in a loop */
|
||||||
|
<< IDO_DATA_CUSTOMVARIABLE << "=" << "" << ":" << "1" << ":" << "\n"
|
||||||
|
<< IDO_API_ENDDATA << "\n\n";
|
||||||
|
|
||||||
|
m_IdoSocket->SendMessage(message.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -492,12 +679,23 @@ void CompatIdoComponent::DumpConfigObjects(void)
|
|||||||
void CompatIdoComponent::DumpStatusData(void)
|
void CompatIdoComponent::DumpStatusData(void)
|
||||||
{
|
{
|
||||||
Logger::Write(LogInformation, "compatido", "Writing compat ido status information");
|
Logger::Write(LogInformation, "compatido", "Writing compat ido status information");
|
||||||
|
//FIXME update programstatus data more frequently
|
||||||
|
//
|
||||||
|
/* hosts */
|
||||||
|
DynamicObject::Ptr object;
|
||||||
|
BOOST_FOREACH(tie(tuples::ignore, object), DynamicObject::GetObjects("Host")) {
|
||||||
|
const Host::Ptr& host = static_pointer_cast<Host>(object);
|
||||||
|
|
||||||
stringstream message;
|
DumpHostStatus(host);
|
||||||
|
}
|
||||||
|
|
||||||
/* program status - should probably done more often */
|
|
||||||
message << "\n\n";
|
|
||||||
|
|
||||||
|
/* services */
|
||||||
|
BOOST_FOREACH(tie(tuples::ignore, object), DynamicObject::GetObjects("Service")) {
|
||||||
|
Service::Ptr service = static_pointer_cast<Service>(object);
|
||||||
|
|
||||||
|
DumpServiceStatus(service);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,6 +40,8 @@ private:
|
|||||||
|
|
||||||
void OpenSink(String node, String service );
|
void OpenSink(String node, String service );
|
||||||
void SendHello(String instancename);
|
void SendHello(String instancename);
|
||||||
|
void GoodByeSink();
|
||||||
|
void CloseSink();
|
||||||
void StartConfigDump();
|
void StartConfigDump();
|
||||||
void EndConfigDump();
|
void EndConfigDump();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user