Module: check_mk
Branch: master
Commit: 22608d00e0c4d9af1c65db70d66a9934490f8e1d
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=22608d00e0c4d9…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Mon Feb 25 11:32:59 2019 +0100
Move find_contact into MonitoringCore abstraction.
Change-Id: Ifd072839cc92d13bc2f2169c9ea355c7e008a133
---
livestatus/src/LogEntry.cc | 5 +++--
livestatus/src/LogEntry.h | 2 +-
livestatus/src/MonitoringCore.h | 1 +
livestatus/src/Query.cc | 11 +++++------
livestatus/src/Query.h | 2 +-
livestatus/src/TableContacts.cc | 3 ++-
livestatus/src/module.cc | 9 +++++++++
7 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/livestatus/src/LogEntry.cc b/livestatus/src/LogEntry.cc
index fe1d19c..2be6023 100644
--- a/livestatus/src/LogEntry.cc
+++ b/livestatus/src/LogEntry.cc
@@ -415,8 +415,9 @@ unsigned LogEntry::updateReferences(MonitoringCore *mc) {
updated++;
}
if (!_contact_name.empty()) {
- // Older Nagios headers are not const-correct... :-P
- _contact = find_contact(const_cast<char *>(_contact_name.c_str()));
+ // TODO(sp): Remove ugly cast.
+ _contact =
+ reinterpret_cast<const contact *>(mc->find_contact(_contact_name));
updated++;
}
if (!_command_name.empty()) {
diff --git a/livestatus/src/LogEntry.h b/livestatus/src/LogEntry.h
index 992e2f4..a35f209 100644
--- a/livestatus/src/LogEntry.h
+++ b/livestatus/src/LogEntry.h
@@ -123,7 +123,7 @@ public:
host *_host;
service *_service;
- contact *_contact;
+ const contact *_contact;
Command _command;
// NOTE: line gets modified!
diff --git a/livestatus/src/MonitoringCore.h b/livestatus/src/MonitoringCore.h
index 5f91f3c..9b408eb 100644
--- a/livestatus/src/MonitoringCore.h
+++ b/livestatus/src/MonitoringCore.h
@@ -75,6 +75,7 @@ public:
virtual Host *getHostByDesignation(const std::string &designation) = 0;
virtual ContactGroup *find_contactgroup(const std::string &name) = 0;
+ virtual const Contact *find_contact(const std::string &name) = 0;
virtual bool host_has_contact(const Host *host, const Contact *contact) = 0;
virtual bool is_contact_member_of_contactgroup(const ContactGroup *group,
const Contact *contact) = 0;
diff --git a/livestatus/src/Query.cc b/livestatus/src/Query.cc
index a19e8f3..cd45bcf 100644
--- a/livestatus/src/Query.cc
+++ b/livestatus/src/Query.cc
@@ -50,11 +50,8 @@
#include "opids.h"
#include "strutil.h"
-// for find_contact, ugly...
-#ifdef CMC
-#include "cmc.h"
-#else
-#include "nagios.h"
+#ifndef CMC
+#include "nagios.h" // for contact
#endif
namespace {
@@ -427,7 +424,9 @@ void Query::parseFilterLine(char *line, FilterStack &filters) {
}
void Query::parseAuthUserHeader(char *line) {
- _auth_user = find_contact(line);
+ // TODO(sp): Remove ugly cast.
+ _auth_user =
+ reinterpret_cast<const contact *>(_table.core()->find_contact(line));
if (_auth_user == nullptr) {
// Do not handle this as error any more. In a multi site setup
// not all users might be present on all sites by design.
diff --git a/livestatus/src/Query.h b/livestatus/src/Query.h
index f86c5a8..8977cae 100644
--- a/livestatus/src/Query.h
+++ b/livestatus/src/Query.h
@@ -98,7 +98,7 @@ private:
bool _keepalive;
using FilterStack = Filters;
std::unique_ptr<Filter> _filter;
- contact *_auth_user;
+ const contact *_auth_user;
std::unique_ptr<Filter> _wait_condition;
std::chrono::milliseconds _wait_timeout;
Triggers::Kind _wait_trigger;
diff --git a/livestatus/src/TableContacts.cc b/livestatus/src/TableContacts.cc
index cc42c4f..3501e4b 100644
--- a/livestatus/src/TableContacts.cc
+++ b/livestatus/src/TableContacts.cc
@@ -30,6 +30,7 @@
#include "CustomVarsDictColumn.h"
#include "CustomVarsNamesColumn.h"
#include "CustomVarsValuesColumn.h"
+#include "MonitoringCore.h"
#include "OffsetIntColumn.h"
#include "OffsetStringColumn.h"
#include "Query.h"
@@ -138,5 +139,5 @@ void TableContacts::answerQuery(Query *query) {
}
Row TableContacts::findObject(const std::string &objectspec) const {
- return Row(find_contact(const_cast<char *>(objectspec.c_str())));
+ return Row(core()->find_contact(objectspec));
}
diff --git a/livestatus/src/module.cc b/livestatus/src/module.cc
index d5ce4e7..4f59fc6 100644
--- a/livestatus/src/module.cc
+++ b/livestatus/src/module.cc
@@ -581,6 +581,11 @@ public:
return fromImpl(::find_contactgroup(const_cast<char *>(name.c_str())));
}
+ const Contact *find_contact(const std::string &name) override {
+ // Older Nagios headers are not const-correct... :-P
+ return fromImpl(::find_contact(const_cast<char *>(name.c_str())));
+ }
+
bool is_contact_member_of_contactgroup(const ContactGroup *group,
const Contact *contact) override {
// Older Nagios headers are not const-correct... :-P
@@ -685,6 +690,10 @@ public:
private:
void *implInternal() const override { return fl_store; }
+ static const Contact *fromImpl(const contact *c) {
+ return reinterpret_cast<const Contact *>(c);
+ }
+
static const contact *toImpl(const Contact *c) {
return reinterpret_cast<const contact *>(c);
}