mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-26 23:24:09 +02:00
Livestatus: Call addRowFn directly in UpdateLogEntries().
Refs #5351 Refs #5369
This commit is contained in:
parent
333ba6ee7e
commit
be78579dea
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
using namespace icinga;
|
using namespace icinga;
|
||||||
|
|
||||||
void HistoryTable::UpdateLogEntries(const Dictionary::Ptr&, int, int)
|
void HistoryTable::UpdateLogEntries(const Dictionary::Ptr&, int, int, const AddRowFunction&)
|
||||||
{
|
{
|
||||||
/* does nothing by default */
|
/* does nothing by default */
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ namespace icinga
|
|||||||
class HistoryTable : public Table
|
class HistoryTable : public Table
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void UpdateLogEntries(const Dictionary::Ptr& bag, int line_count, int lineno);
|
virtual void UpdateLogEntries(const Dictionary::Ptr& bag, int line_count, int lineno, const AddRowFunction& addRowFn);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -57,13 +57,7 @@ LogTable::LogTable(const String& compat_log_path, time_t from, time_t until)
|
|||||||
AddColumns(this);
|
AddColumns(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LogTable::UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno)
|
|
||||||
{
|
|
||||||
/* additional attributes only for log table */
|
|
||||||
log_entry_attrs->Set("lineno", lineno);
|
|
||||||
|
|
||||||
m_RowsCache[line_count] = log_entry_attrs;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LogTable::AddColumns(Table *table, const String& prefix,
|
void LogTable::AddColumns(Table *table, const String& prefix,
|
||||||
const Column::ObjectAccessor& objectAccessor)
|
const Column::ObjectAccessor& objectAccessor)
|
||||||
@ -103,14 +97,16 @@ void LogTable::FetchRows(const AddRowFunction& addRowFn)
|
|||||||
LogUtility::CreateLogIndex(m_CompatLogPath, m_LogFileIndex);
|
LogUtility::CreateLogIndex(m_CompatLogPath, m_LogFileIndex);
|
||||||
|
|
||||||
/* generate log cache */
|
/* generate log cache */
|
||||||
LogUtility::CreateLogCache(m_LogFileIndex, this, m_TimeFrom, m_TimeUntil);
|
LogUtility::CreateLogCache(m_LogFileIndex, this, m_TimeFrom, m_TimeUntil, addRowFn);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long line_count;
|
/* gets called in LogUtility::CreateLogCache */
|
||||||
|
void LogTable::UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno, const AddRowFunction& addRowFn)
|
||||||
|
{
|
||||||
|
/* additional attributes only for log table */
|
||||||
|
log_entry_attrs->Set("lineno", lineno);
|
||||||
|
|
||||||
BOOST_FOREACH(boost::tie(line_count, boost::tuples::ignore), m_RowsCache) {
|
addRowFn(log_entry_attrs);
|
||||||
/* pass a dictionary with "line_count" as key */
|
|
||||||
addRowFn(m_RowsCache[line_count]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Object::Ptr LogTable::HostAccessor(const Value& row, const Column::ObjectAccessor& parentObjectAccessor)
|
Object::Ptr LogTable::HostAccessor(const Value& row, const Column::ObjectAccessor& parentObjectAccessor)
|
||||||
|
@ -43,7 +43,7 @@ public:
|
|||||||
|
|
||||||
virtual String GetName(void) const;
|
virtual String GetName(void) const;
|
||||||
|
|
||||||
void UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno);
|
void UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno, const AddRowFunction& addRowFn);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void FetchRows(const AddRowFunction& addRowFn);
|
virtual void FetchRows(const AddRowFunction& addRowFn);
|
||||||
|
@ -74,7 +74,7 @@ void LogUtility::CreateLogIndexFileHandler(const String& path, std::map<time_t,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LogUtility::CreateLogCache(std::map<time_t, String> index, HistoryTable *table,
|
void LogUtility::CreateLogCache(std::map<time_t, String> index, HistoryTable *table,
|
||||||
time_t from, time_t until)
|
time_t from, time_t until, const AddRowFunction& addRowFn)
|
||||||
{
|
{
|
||||||
ASSERT(table);
|
ASSERT(table);
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ void LogUtility::CreateLogCache(std::map<time_t, String> index, HistoryTable *ta
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
table->UpdateLogEntries(log_entry_attrs, line_count, lineno);
|
table->UpdateLogEntries(log_entry_attrs, line_count, lineno, addRowFn);
|
||||||
|
|
||||||
line_count++;
|
line_count++;
|
||||||
lineno++;
|
lineno++;
|
||||||
@ -118,8 +118,6 @@ void LogUtility::CreateLogCache(std::map<time_t, String> index, HistoryTable *ta
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Dictionary::Ptr LogUtility::GetAttributes(const String& text)
|
Dictionary::Ptr LogUtility::GetAttributes(const String& text)
|
||||||
{
|
{
|
||||||
Dictionary::Ptr bag = make_shared<Dictionary>();
|
Dictionary::Ptr bag = make_shared<Dictionary>();
|
||||||
@ -261,9 +259,9 @@ Dictionary::Ptr LogUtility::GetAttributes(const String& text)
|
|||||||
|
|
||||||
bag->Set("contact_name", tokens[0]);
|
bag->Set("contact_name", tokens[0]);
|
||||||
bag->Set("host_name", tokens[1]);
|
bag->Set("host_name", tokens[1]);
|
||||||
bag->Set("state_type", tokens[2]);
|
bag->Set("state_type", tokens[2].CStr());
|
||||||
bag->Set("state", Service::StateFromString(tokens[3]));
|
bag->Set("state", Service::StateFromString(tokens[3]));
|
||||||
bag->Set("command_name", atoi(tokens[4].CStr()));
|
bag->Set("command_name", tokens[4]);
|
||||||
bag->Set("plugin_output", tokens[5]);
|
bag->Set("plugin_output", tokens[5]);
|
||||||
|
|
||||||
bag->Set("log_class", LogEntryClassNotification);
|
bag->Set("log_class", LogEntryClassNotification);
|
||||||
@ -277,9 +275,9 @@ Dictionary::Ptr LogUtility::GetAttributes(const String& text)
|
|||||||
bag->Set("contact_name", tokens[0]);
|
bag->Set("contact_name", tokens[0]);
|
||||||
bag->Set("host_name", tokens[1]);
|
bag->Set("host_name", tokens[1]);
|
||||||
bag->Set("service_description", tokens[2]);
|
bag->Set("service_description", tokens[2]);
|
||||||
bag->Set("state_type", tokens[3]);
|
bag->Set("state_type", tokens[3].CStr());
|
||||||
bag->Set("state", Service::StateFromString(tokens[4]));
|
bag->Set("state", Service::StateFromString(tokens[4]));
|
||||||
bag->Set("command_name", atoi(tokens[5].CStr()));
|
bag->Set("command_name", tokens[5]);
|
||||||
bag->Set("plugin_output", tokens[6]);
|
bag->Set("plugin_output", tokens[6]);
|
||||||
|
|
||||||
bag->Set("log_class", LogEntryClassNotification);
|
bag->Set("log_class", LogEntryClassNotification);
|
||||||
|
@ -66,7 +66,7 @@ class LogUtility
|
|||||||
public:
|
public:
|
||||||
static void CreateLogIndex(const String& path, std::map<time_t, String>& index);
|
static void CreateLogIndex(const String& path, std::map<time_t, String>& index);
|
||||||
static void CreateLogIndexFileHandler(const String& path, std::map<time_t, String>& index);
|
static void CreateLogIndexFileHandler(const String& path, std::map<time_t, String>& index);
|
||||||
static void CreateLogCache(std::map<time_t, String> index, HistoryTable *table, time_t from, time_t until);
|
static void CreateLogCache(std::map<time_t, String> index, HistoryTable *table, time_t from, time_t until, const AddRowFunction& addRowFn);
|
||||||
static Dictionary::Ptr GetAttributes(const String& text);
|
static Dictionary::Ptr GetAttributes(const String& text);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -58,7 +58,7 @@ StateHistTable::StateHistTable(const String& compat_log_path, time_t from, time_
|
|||||||
AddColumns(this);
|
AddColumns(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateHistTable::UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno)
|
void StateHistTable::UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno, const AddRowFunction& addRowFn)
|
||||||
{
|
{
|
||||||
unsigned int time = log_entry_attrs->Get("time");
|
unsigned int time = log_entry_attrs->Get("time");
|
||||||
String host_name = log_entry_attrs->Get("host_name");
|
String host_name = log_entry_attrs->Get("host_name");
|
||||||
@ -203,6 +203,8 @@ void StateHistTable::UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, in
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_ServicesCache[state_hist_service] = state_hist_service_states;
|
m_ServicesCache[state_hist_service] = state_hist_service_states;
|
||||||
|
|
||||||
|
/* TODO find a way to directly call addRowFn() - right now m_ServicesCache depends on historical lines ("already seen service") */
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateHistTable::AddColumns(Table *table, const String& prefix,
|
void StateHistTable::AddColumns(Table *table, const String& prefix,
|
||||||
@ -253,7 +255,7 @@ void StateHistTable::FetchRows(const AddRowFunction& addRowFn)
|
|||||||
LogUtility::CreateLogIndex(m_CompatLogPath, m_LogFileIndex);
|
LogUtility::CreateLogIndex(m_CompatLogPath, m_LogFileIndex);
|
||||||
|
|
||||||
/* generate log cache */
|
/* generate log cache */
|
||||||
LogUtility::CreateLogCache(m_LogFileIndex, this, m_TimeFrom, m_TimeUntil);
|
LogUtility::CreateLogCache(m_LogFileIndex, this, m_TimeFrom, m_TimeUntil, addRowFn);
|
||||||
|
|
||||||
Service::Ptr state_hist_service;
|
Service::Ptr state_hist_service;
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ public:
|
|||||||
|
|
||||||
virtual String GetName(void) const;
|
virtual String GetName(void) const;
|
||||||
|
|
||||||
void UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno);
|
void UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno, const AddRowFunction& addRowFn);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void FetchRows(const AddRowFunction& addRowFn);
|
virtual void FetchRows(const AddRowFunction& addRowFn);
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
namespace icinga
|
namespace icinga
|
||||||
{
|
{
|
||||||
|
|
||||||
|
typedef boost::function<void (const Value&)> AddRowFunction;
|
||||||
|
|
||||||
class Filter;
|
class Filter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -38,8 +40,6 @@ class Table : public Object
|
|||||||
public:
|
public:
|
||||||
DECLARE_PTR_TYPEDEFS(Table);
|
DECLARE_PTR_TYPEDEFS(Table);
|
||||||
|
|
||||||
typedef boost::function<void (const Value&)> AddRowFunction;
|
|
||||||
|
|
||||||
static Table::Ptr GetByName(const String& name, const String& compat_log_path = "", const unsigned long& from = 0, const unsigned long& until = 0);
|
static Table::Ptr GetByName(const String& name, const String& compat_log_path = "", const unsigned long& from = 0, const unsigned long& until = 0);
|
||||||
|
|
||||||
virtual String GetName(void) const = 0;
|
virtual String GetName(void) const = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user