Skip to content

Commit

Permalink
DB IDO: Send endpoint authority for status updates.
Browse files Browse the repository at this point in the history
Refs #5636
  • Loading branch information
Michael Friedrich committed Mar 7, 2014
1 parent e9aca5f commit 1db3868
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 9 deletions.
19 changes: 19 additions & 0 deletions components/db_ido_mysql/schema/mysql.sql
Expand Up @@ -1385,6 +1385,25 @@ CREATE TABLE IF NOT EXISTS icinga_endpointstatus (
PRIMARY KEY (endpointstatus_id)
) ENGINE=InnoDB COMMENT='Endpoint status';


ALTER TABLE icinga_servicestatus ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_hoststatus ADD COLUMN endpoint_object_id bigint default NULL;

ALTER TABLE icinga_acknowledgements ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_commenthistory ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_contactnotifications ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_downtimehistory ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_eventhandlers ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_externalcommands ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_flappinghistory ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_hostchecks ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_logentries ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_notifications ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_processevents ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_servicechecks ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_statehistory ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_systemcommands ADD COLUMN endpoint_object_id bigint default NULL;

-- -----------------------------------------
-- add index (delete)
-- -----------------------------------------
Expand Down
18 changes: 18 additions & 0 deletions components/db_ido_pgsql/schema/pgsql.sql
Expand Up @@ -1414,6 +1414,24 @@ CREATE TABLE IF NOT EXISTS icinga_endpointstatus (
) ;


ALTER TABLE icinga_servicestatus ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_hoststatus ADD COLUMN endpoint_object_id bigint default NULL;

ALTER TABLE icinga_acknowledgements ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_commenthistory ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_contactnotifications ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_downtimehistory ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_eventhandlers ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_externalcommands ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_flappinghistory ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_hostchecks ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_logentries ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_notifications ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_processevents ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_servicechecks ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_statehistory ADD COLUMN endpoint_object_id bigint default NULL;
ALTER TABLE icinga_systemcommands ADD COLUMN endpoint_object_id bigint default NULL;

-- -----------------------------------------
-- add index (delete)
-- -----------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion lib/base/dynamicobject.cpp
Expand Up @@ -44,7 +44,7 @@ INITIALIZE_ONCE(&DynamicObject::StaticInitialize);

boost::signals2::signal<void (const DynamicObject::Ptr&)> DynamicObject::OnStarted;
boost::signals2::signal<void (const DynamicObject::Ptr&)> DynamicObject::OnStopped;
boost::signals2::signal<void (const DynamicObject::Ptr&)> DynamicObject::OnStateChanged;
boost::signals2::signal<void (const DynamicObject::Ptr&, const String&)> DynamicObject::OnStateChanged;
boost::signals2::signal<void (const DynamicObject::Ptr&, const String&, bool)> DynamicObject::OnAuthorityChanged;

void DynamicObject::StaticInitialize(void)
Expand Down
2 changes: 1 addition & 1 deletion lib/base/dynamicobject.h
Expand Up @@ -56,7 +56,7 @@ class I2_BASE_API DynamicObject : public ObjectImpl<DynamicObject>

static boost::signals2::signal<void (const DynamicObject::Ptr&)> OnStarted;
static boost::signals2::signal<void (const DynamicObject::Ptr&)> OnStopped;
static boost::signals2::signal<void (const DynamicObject::Ptr&)> OnStateChanged;
static boost::signals2::signal<void (const DynamicObject::Ptr&, const String&)> OnStateChanged;
static boost::signals2::signal<void (const DynamicObject::Ptr&, const String&, bool)> OnAuthorityChanged;

Value InvokeMethod(const String& method, const std::vector<Value>& arguments);
Expand Down
15 changes: 11 additions & 4 deletions lib/db_ido/dbobject.cpp
Expand Up @@ -21,6 +21,7 @@
#include "db_ido/dbtype.h"
#include "db_ido/dbvalue.h"
#include "icinga/service.h"
#include "cluster/endpoint.h"
#include "base/dynamictype.h"
#include "base/objectlock.h"
#include "base/utility.h"
Expand All @@ -40,7 +41,7 @@ DbObject::DbObject(const shared_ptr<DbType>& type, const String& name1, const St

void DbObject::StaticInitialize(void)
{
DynamicObject::OnStateChanged.connect(boost::bind(&DbObject::StateChangedHandler, _1));
DynamicObject::OnStateChanged.connect(boost::bind(&DbObject::StateChangedHandler, _1, _2));
}

void DbObject::SetObject(const DynamicObject::Ptr& object)
Expand Down Expand Up @@ -94,10 +95,12 @@ void DbObject::SendConfigUpdate(void)
OnConfigUpdate();
}

void DbObject::SendStatusUpdate(void)
void DbObject::SendStatusUpdate(const String& authority)
{
Dictionary::Ptr fields = GetStatusFields();

Endpoint::Ptr endpoint = Endpoint::GetByName(authority);

if (!fields)
return;

Expand All @@ -108,6 +111,10 @@ void DbObject::SendStatusUpdate(void)
query.Fields = fields;
query.Fields->Set(GetType()->GetIDColumn(), GetObject());
query.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */

if (endpoint)
query.Fields->Set("endpoint_object_id", endpoint);

query.Fields->Set("status_update_time", DbValue::FromTimestamp(Utility::GetTime()));
query.WhereCriteria = make_shared<Dictionary>();
query.WhereCriteria->Set(GetType()->GetIDColumn(), GetObject());
Expand Down Expand Up @@ -182,12 +189,12 @@ DbObject::Ptr DbObject::GetOrCreateByObject(const DynamicObject::Ptr& object)
return dbobj;
}

void DbObject::StateChangedHandler(const DynamicObject::Ptr& object)
void DbObject::StateChangedHandler(const DynamicObject::Ptr& object, const String& authority)
{
DbObject::Ptr dbobj = GetOrCreateByObject(object);

if (!dbobj)
return;

dbobj->SendStatusUpdate();
dbobj->SendStatusUpdate(authority);
}
4 changes: 2 additions & 2 deletions lib/db_ido/dbobject.h
Expand Up @@ -79,7 +79,7 @@ class I2_DB_IDO_API DbObject : public Object
static boost::signals2::signal<void (const DbQuery&)> OnQuery;

void SendConfigUpdate(void);
void SendStatusUpdate(void);
void SendStatusUpdate(const String& authority = String());

double GetLastConfigUpdate(void) const;
double GetLastStatusUpdate(void) const;
Expand All @@ -100,7 +100,7 @@ class I2_DB_IDO_API DbObject : public Object
double m_LastConfigUpdate;
double m_LastStatusUpdate;

static void StateChangedHandler(const DynamicObject::Ptr& object);
static void StateChangedHandler(const DynamicObject::Ptr& object, const String& authority);

friend class DbType;
};
Expand Down
2 changes: 1 addition & 1 deletion lib/icinga/service-check.cpp
Expand Up @@ -405,7 +405,7 @@ void Service::ProcessCheckResult(const CheckResult::Ptr& cr, const String& autho
// "% current: " + Convert::ToString(GetFlappingCurrent()) + "%.");

OnNewCheckResult(GetSelf(), cr, authority);
OnStateChanged(GetSelf());
OnStateChanged(GetSelf(), authority);

if (hardChange)
OnStateChange(GetSelf(), cr, StateTypeHard, authority);
Expand Down

0 comments on commit 1db3868

Please sign in to comment.