Module: check_mk
Branch: master
Commit: c078ef5ec6f37fbaf03ca3f5c775f8257ad37970
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=c078ef5ec6f37f…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Fri Apr 5 14:59:10 2019 +0200
Add label columns.
CMK-1927
Change-Id: Ieb69737dda5db413a62366e411577a70a72ef1e1
---
livestatus/src/MonitoringCore.h | 2 +-
livestatus/src/TableContacts.cc | 14 ++++++++++++++
livestatus/src/TableHosts.cc | 15 +++++++++++++++
livestatus/src/TableServices.cc | 15 +++++++++++++++
livestatus/src/module.cc | 6 +++++-
5 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/livestatus/src/MonitoringCore.h b/livestatus/src/MonitoringCore.h
index e62fd6d..36b3387 100644
--- a/livestatus/src/MonitoringCore.h
+++ b/livestatus/src/MonitoringCore.h
@@ -63,7 +63,7 @@ struct CommentData {
};
using Attributes = std::unordered_map<std::string, std::string>;
-enum class AttributeKind { custom_variables, tags };
+enum class AttributeKind { custom_variables, tags, labels };
/// An abstraction layer for the monitoring core (nagios or cmc)
class MonitoringCore {
diff --git a/livestatus/src/TableContacts.cc b/livestatus/src/TableContacts.cc
index dff96b4..c7cb62b 100644
--- a/livestatus/src/TableContacts.cc
+++ b/livestatus/src/TableContacts.cc
@@ -135,6 +135,20 @@ void TableContacts::addColumns(Table *table, const std::string
&prefix,
DANGEROUS_OFFSETOF(contact, custom_variables), table->core(),
AttributeKind::tags));
+ table->addColumn(std::make_unique<CustomVarsNamesColumn>(
+ prefix + "label_names", "A list of all labels of the
contact",
+ indirect_offset, -1, -1, DANGEROUS_OFFSETOF(contact, custom_variables),
+ table->core(), AttributeKind::labels));
+ table->addColumn(std::make_unique<CustomVarsValuesColumn>(
+ prefix + "label_values",
+ "A list of the values of all labels of the contact", indirect_offset,
+ -1, -1, DANGEROUS_OFFSETOF(contact, custom_variables), table->core(),
+ AttributeKind::labels));
+ table->addColumn(std::make_unique<CustomVarsDictColumn>(
+ prefix + "labels", "A dictionary of the labels",
indirect_offset, -1,
+ -1, DANGEROUS_OFFSETOF(contact, custom_variables), table->core(),
+ AttributeKind::labels));
+
table->addColumn(std::make_unique<AttributeListAsIntColumn>(
prefix + "modified_attributes",
"A bitmask specifying which attributes have been modified",
diff --git a/livestatus/src/TableHosts.cc b/livestatus/src/TableHosts.cc
index a135e24..9c3ef2f 100644
--- a/livestatus/src/TableHosts.cc
+++ b/livestatus/src/TableHosts.cc
@@ -517,6 +517,21 @@ void TableHosts::addColumns(Table *table, const std::string
&prefix,
extra_offset, -1, DANGEROUS_OFFSETOF(host, custom_variables),
table->core(), AttributeKind::tags));
+ table->addColumn(std::make_unique<CustomVarsNamesColumn>(
+ prefix + "label_names", "A list of the names of all labels",
+ indirect_offset, extra_offset, -1,
+ DANGEROUS_OFFSETOF(host, custom_variables), table->core(),
+ AttributeKind::labels));
+ table->addColumn(std::make_unique<CustomVarsValuesColumn>(
+ prefix + "label_values", "A list of the values of the
labels",
+ indirect_offset, extra_offset, -1,
+ DANGEROUS_OFFSETOF(host, custom_variables), table->core(),
+ AttributeKind::labels));
+ table->addColumn(std::make_unique<CustomVarsDictColumn>(
+ prefix + "labels", "A dictionary of the labels",
indirect_offset,
+ extra_offset, -1, DANGEROUS_OFFSETOF(host, custom_variables),
+ table->core(), AttributeKind::labels));
+
// Add direct access to the custom macro _FILENAME. In a future version of
// Livestatus this will probably be configurable so access to further custom
// variable can be added, such that those variables are presented like
diff --git a/livestatus/src/TableServices.cc b/livestatus/src/TableServices.cc
index c7cfd87..0384588 100644
--- a/livestatus/src/TableServices.cc
+++ b/livestatus/src/TableServices.cc
@@ -473,6 +473,21 @@ void TableServices::addColumns(Table *table, const std::string
&prefix,
DANGEROUS_OFFSETOF(service, custom_variables), table->core(),
AttributeKind::tags));
+ table->addColumn(std::make_unique<CustomVarsNamesColumn>(
+ prefix + "label_names",
+ "A list of the names of all labels of the service", indirect_offset,
-1,
+ -1, DANGEROUS_OFFSETOF(service, custom_variables), table->core(),
+ AttributeKind::labels));
+ table->addColumn(std::make_unique<CustomVarsValuesColumn>(
+ prefix + "label_values",
+ "A list of the values of all labels of the service", indirect_offset,
+ -1, -1, DANGEROUS_OFFSETOF(service, custom_variables), table->core(),
+ AttributeKind::labels));
+ table->addColumn(std::make_unique<CustomVarsDictColumn>(
+ prefix + "labels", "A dictionary of the labels",
indirect_offset, -1,
+ -1, DANGEROUS_OFFSETOF(service, custom_variables), table->core(),
+ AttributeKind::labels));
+
table->addColumn(std::make_unique<ServiceGroupsColumn>(
prefix + "groups", "A list of all service groups the service is
in",
indirect_offset, -1, -1, DANGEROUS_OFFSETOF(service, servicegroups_ptr),
diff --git a/livestatus/src/module.cc b/livestatus/src/module.cc
index f7189cd..b8997e7 100644
--- a/livestatus/src/module.cc
+++ b/livestatus/src/module.cc
@@ -710,14 +710,18 @@ public:
Attributes attrs;
for (auto cvm = h; cvm != nullptr; cvm = cvm->next) {
bool is_tag = mk::starts_with(cvm->variable_name, "_TAG_");
+ bool is_label = mk::starts_with(cvm->variable_name, "_LABEL_");
bool part_of_result = false;
switch (kind) {
case AttributeKind::custom_variables:
- part_of_result = !is_tag;
+ part_of_result = !is_tag && !is_label;
break;
case AttributeKind::tags:
part_of_result = is_tag;
break;
+ case AttributeKind::labels:
+ part_of_result = is_label;
+ break;
}
if (part_of_result) {
attrs.emplace(cvm->variable_name, cvm->variable_value);