1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
2 
3 #ifndef LOGTABLE_H
4 #define LOGTABLE_H
5 
6 #include "livestatus/historytable.hpp"
7 
8 using namespace icinga;
9 
10 namespace icinga
11 {
12 
13 /**
14  * @ingroup livestatus
15  */
16 class LogTable final : public HistoryTable
17 {
18 public:
19 	DECLARE_PTR_TYPEDEFS(LogTable);
20 
21 	LogTable(const String& compat_log_path, time_t from, time_t until);
22 
23 	static void AddColumns(Table *table, const String& prefix = String(),
24 		const Column::ObjectAccessor& objectAccessor = Column::ObjectAccessor());
25 
26 	String GetName() const override;
27 	String GetPrefix() const override;
28 
29 	void UpdateLogEntries(const Dictionary::Ptr& log_entry_attrs, int line_count, int lineno, const AddRowFunction& addRowFn) override;
30 
31 protected:
32 	void FetchRows(const AddRowFunction& addRowFn) override;
33 
34 	static Object::Ptr HostAccessor(const Value& row, const Column::ObjectAccessor& parentObjectAccessor);
35 	static Object::Ptr ServiceAccessor(const Value& row, const Column::ObjectAccessor& parentObjectAccessor);
36 	static Object::Ptr ContactAccessor(const Value& row, const Column::ObjectAccessor& parentObjectAccessor);
37 	static Object::Ptr CommandAccessor(const Value& row, const Column::ObjectAccessor& parentObjectAccessor);
38 
39 	static Value TimeAccessor(const Value& row);
40 	static Value LinenoAccessor(const Value& row);
41 	static Value ClassAccessor(const Value& row);
42 	static Value MessageAccessor(const Value& row);
43 	static Value TypeAccessor(const Value& row);
44 	static Value OptionsAccessor(const Value& row);
45 	static Value CommentAccessor(const Value& row);
46 	static Value PluginOutputAccessor(const Value& row);
47 	static Value StateAccessor(const Value& row);
48 	static Value StateTypeAccessor(const Value& row);
49 	static Value AttemptAccessor(const Value& row);
50 	static Value ServiceDescriptionAccessor(const Value& row);
51 	static Value HostNameAccessor(const Value& row);
52 	static Value ContactNameAccessor(const Value& row);
53 	static Value CommandNameAccessor(const Value& row);
54 
55 private:
56 	std::map<time_t, String> m_LogFileIndex;
57 	std::map<time_t, Dictionary::Ptr> m_RowsCache;
58 	time_t m_TimeFrom;
59 	time_t m_TimeUntil;
60 	String m_CompatLogPath;
61 };
62 
63 }
64 
65 #endif /* LOGTABLE_H */
66