-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstorageEngineSqlite.hpp
More file actions
81 lines (73 loc) · 4.45 KB
/
Copy pathstorageEngineSqlite.hpp
File metadata and controls
81 lines (73 loc) · 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#pragma once
#include "storageEngine.hpp"
#include "sermon_exception.hpp"
#include <sqlite3.h>
#include <map>
class SQLiteException : public SermonException
{
public:
/**
* SQLiteException
*
* @param code Error code
* @param message Error message
*
*/
SQLiteException(const int& code, const std::string &message): SermonException(message, code)
{
}
virtual ~SQLiteException() throw ()
{
}
};
class StorageEngineSqlite : public StorageEngine
{
public:
StorageEngineSqlite(const nlohmann::json &settings, Logger logger);
void close();
void addResponseTime(std::string& service, std::chrono::system_clock::time_point tm, uint64_t timeout);
uint64_t addOutage(std::string& service, std::chrono::system_clock::time_point tm, std::string& description);
void addBounce(uint64_t outageId, std::chrono::system_clock::time_point tm);
void solveOutage(uint64_t outageId, std::chrono::system_clock::time_point tm);
void setOutageError(uint64_t outageId, int error);
std::map < std::string, std::string > getByOutageId(uint64_t outageId);
std::map < std::string, std::string > getByOutageUuid(std::string uuid);
std::list <std::map < std::string, std::string > > getOutages(const std::map<std::string, std::string>& conditions);
std::list <std::map < std::string, std::string > > getOrphanOutages(const std::map<std::string, std::string>& conditions = {});
std::list <std::map < std::string, std::string > > fixOrphanOutages(uint32_t newCode, const std::map<std::string, std::string>& conditions = {});
/* std::list <std::map < std::string, std::string > > getResponseTimeStats(const std::map<std::string, std::string>& conditions); */
std::map <uint64_t, std::map < std::string, std::string > > getOutageStats(const std::map<std::string, std::string>& conditions);
std::list <std::map < std::string, std::string > > getResponseTimeStats(const std::map<std::string, std::string>& conditions);
std::list <std::map<std::string, std::string> > getAllResponseTimes(const std::map<std::string, std::string>& conditions);
std::list <std::map<std::string, std::string> > getAllOutages(const std::map<std::string, std::string>& conditions);
std::map<std::string, std::map < std::string, std::string > > getServicesDataByName(const std::map<std::string, std::string>& conditions);
std::map < std::string, std::string > getServiceData(uint64_t serviceId);
void setOutageDescription(uint64_t outageId, std::string description);
void setOutageTags(uint64_t outageId, std::string tags);
private:
sqlite3* db;
bool _readonly;
std::map<std::string, std::string> statusTable;
std::map<std::string, uint64_t> servicesTable;
void initialize(std::string filename);
void dbInitialize();
void createTables();
void shutdown();
void createTable(std::string name, std::list<std::pair<std::string, std::string> > fields, bool ifNotExists=false);
unsigned tableCount(std::string table, std::list <std::pair < std::string, std::string> > conditions = {}, std::string extra="");
long unsigned getRowid(std::string table, std::list <std::pair < std::string, std::string> > conditions);
long unsigned insert(std::string table, std::map<std::string, std::string> fields, bool clean=true);
long unsigned update(std::string table, long unsigned rowid, std::map<std::string, std::string> fields, bool clean=true);
long unsigned update(std::string table, std::map<std::string, std::string> fields, std::list <std::pair < std::string, std::string> > conditions = {}, bool clean=true);
long unsigned destroy(std::string table, long unsigned rowid);
long unsigned destroy(std::string table, std::list <std::pair < std::string, std::string> > conditions, std::string extra="");
std::list <std::map < std::string, std::string > > getData(std::string table, std::string fields, std::list <std::pair < std::string, std::string> > conditions = {}, std::string extra="");
void tragic(std::string error);
uint64_t getServiceId(const std::string& service, bool create=true);
void insertResponseTime(uint64_t serviceId, std::chrono::system_clock::time_point tm, uint64_t timeout, int error=0);
uint64_t insertOutage(uint64_t serviceId, std::chrono::system_clock::time_point tm, std::string& description);
uint64_t bounceOutage(uint64_t outageId, std::chrono::system_clock::time_point tm);
void flagOutageAsSolved(uint64_t outageId, std::chrono::system_clock::time_point tm);
void flagOutageAsError(uint64_t outageId, std::chrono::system_clock::time_point tm, int error);
uint64_t doFixOrphanOutages(int32_t newCode);
};