]> granicus.if.org Git - icinga2/blob - lib/livestatus/livestatusquery.hpp
Docs: Explain across midnight time periods with an overlapping range
[icinga2] / lib / livestatus / livestatusquery.hpp
1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
2
3 #ifndef LIVESTATUSQUERY_H
4 #define LIVESTATUSQUERY_H
5
6 #include "livestatus/filter.hpp"
7 #include "livestatus/aggregator.hpp"
8 #include "base/object.hpp"
9 #include "base/array.hpp"
10 #include "base/stream.hpp"
11 #include "base/scriptframe.hpp"
12 #include <deque>
13
14 using namespace icinga;
15
16 namespace icinga
17 {
18
19 enum LivestatusError
20 {
21         LivestatusErrorOK = 200,
22         LivestatusErrorNotFound = 404,
23         LivestatusErrorQuery = 452
24 };
25
26 /**
27  * @ingroup livestatus
28  */
29 class LivestatusQuery final : public Object
30 {
31 public:
32         DECLARE_PTR_TYPEDEFS(LivestatusQuery);
33
34         LivestatusQuery(const std::vector<String>& lines, const String& compat_log_path);
35
36         bool Execute(const Stream::Ptr& stream);
37
38         static int GetExternalCommands();
39
40 private:
41         String m_Verb;
42
43         bool m_KeepAlive;
44
45         /* Parameters for GET queries. */
46         String m_Table;
47         std::vector<String> m_Columns;
48         std::vector<String> m_Separators;
49
50         Filter::Ptr m_Filter;
51         std::deque<Aggregator::Ptr> m_Aggregators;
52
53         String m_OutputFormat;
54         bool m_ColumnHeaders;
55         int m_Limit;
56
57         String m_ResponseHeader;
58
59         /* Parameters for COMMAND/SCRIPT queries. */
60         String m_Command;
61         String m_Session;
62
63         /* Parameters for invalid queries. */
64         int m_ErrorCode;
65         String m_ErrorMessage;
66
67         unsigned long m_LogTimeFrom;
68         unsigned long m_LogTimeUntil;
69         String m_CompatLogPath;
70
71         void BeginResultSet(std::ostream& fp) const;
72         void EndResultSet(std::ostream& fp) const;
73         void AppendResultRow(std::ostream& fp, const Array::Ptr& row, bool& first_row) const;
74         void PrintCsvArray(std::ostream& fp, const Array::Ptr& array, int level) const;
75         void PrintPythonArray(std::ostream& fp, const Array::Ptr& array) const;
76         static String QuoteStringPython(const String& str);
77
78         void ExecuteGetHelper(const Stream::Ptr& stream);
79         void ExecuteCommandHelper(const Stream::Ptr& stream);
80         void ExecuteErrorHelper(const Stream::Ptr& stream);
81
82         void SendResponse(const Stream::Ptr& stream, int code, const String& data);
83         void PrintFixed16(const Stream::Ptr& stream, int code, const String& data);
84
85         static Filter::Ptr ParseFilter(const String& params, unsigned long& from, unsigned long& until);
86 };
87
88 }
89
90 #endif /* LIVESTATUSQUERY_H */