forked from zeek/zeek
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStore.cc
98 lines (69 loc) · 3.21 KB
/
Store.cc
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// See the file "COPYING" in the main distribution directory for copyright.
#include "zeek/broker/Store.h"
#include "zeek/Desc.h"
#include "zeek/ID.h"
#include "zeek/broker/Manager.h"
zeek::OpaqueTypePtr zeek::Broker::detail::opaque_of_store_handle;
namespace zeek::Broker::detail {
EnumValPtr query_status(bool success) {
static EnumType* store_query_status = nullptr;
static int success_val;
static int failure_val;
if ( ! store_query_status ) {
store_query_status = id::find_type("Broker::QueryStatus")->AsEnumType();
success_val = store_query_status->Lookup("Broker", "SUCCESS");
failure_val = store_query_status->Lookup("Broker", "FAILURE");
}
auto rval = store_query_status->GetEnumVal(success ? success_val : failure_val);
return rval;
}
void StoreHandleVal::Put(BrokerData&& key, BrokerData&& value, std::optional<BrokerTimespan> expiry) {
store.put(std::move(key).value_, std::move(value).value_, expiry);
}
void StoreHandleVal::Erase(BrokerData&& key) { store.erase(std::move(key).value_); }
void StoreHandleVal::ValDescribe(ODesc* d) const {
d->Add("broker::store::");
d->Add("{");
d->Add(store.name());
d->Add("}");
}
IMPLEMENT_OPAQUE_VALUE(StoreHandleVal)
std::optional<BrokerData> StoreHandleVal::DoSerializeData() const {
// Cannot serialize.
return std::nullopt;
}
bool StoreHandleVal::DoUnserializeData(BrokerDataView) {
// Cannot unserialize.
return false;
}
broker::backend to_backend_type(BifEnum::Broker::BackendType type) {
switch ( type ) {
case BifEnum::Broker::MEMORY: return broker::backend::memory;
case BifEnum::Broker::SQLITE: return broker::backend::sqlite;
}
throw std::runtime_error("unknown broker backend");
}
broker::backend_options to_backend_options(broker::backend backend, RecordVal* options) {
static auto failure_mode_type = id::find_type("Broker::SQLiteFailureMode")->AsEnumType();
static auto sqlite_synchronous_type = id::find_type("Broker::SQLiteSynchronous")->AsEnumType();
static auto sqlite_journal_mode_type = id::find_type("Broker::SQLiteJournalMode")->AsEnumType();
broker::backend_options result;
switch ( backend ) {
case broker::backend::sqlite: {
auto sqlite_opts = options->GetField<RecordVal>("sqlite");
result["path"] = sqlite_opts->GetField<StringVal>("path")->CheckString();
if ( auto synchronous = sqlite_opts->GetField<EnumVal>("synchronous") )
result["synchronous"] = broker::enum_value(sqlite_synchronous_type->Lookup(synchronous->Get()));
if ( auto journal_mode = sqlite_opts->GetField<EnumVal>("journal_mode") )
result["journal_mode"] = broker::enum_value(sqlite_journal_mode_type->Lookup(journal_mode->Get()));
auto failure_mode = sqlite_opts->GetField<EnumVal>("failure_mode");
result["failure_mode"] = broker::enum_value(failure_mode_type->Lookup(failure_mode->Get()));
auto integrity_check = sqlite_opts->GetField<BoolVal>("integrity_check")->Get();
result["integrity_check"] = integrity_check;
break;
}
default: break;
}
return result;
}
} // namespace zeek::Broker::detail