Skip to content

Commit c86f297

Browse files
committed
MOD: Improve live logging
1 parent 55cbde9 commit c86f297

18 files changed

+179
-139
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## 0.41.0 - TBD
44

5+
### Enhancements
6+
- Add static `Builder()` methods to the clients
7+
- Improve debug logging in live clients
8+
59
### Breaking changes
610
- Removed unused `Received` variant from `JobState` enum
711

README.md

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,27 +97,26 @@ Here is a simple program that fetches 10 seconds of trades for all ES mini futur
9797
#include <iostream>
9898
#include <thread>
9999

100-
using namespace databento;
100+
namespace db = databento;
101101

102102
int main() {
103-
PitSymbolMap symbol_mappings;
103+
db::PitSymbolMap symbol_mappings;
104104

105-
auto client = LiveBuilder{}
105+
auto client = db::LiveThreaded::Builder()
106106
.SetKeyFromEnv()
107-
.SetDataset(Dataset::GlbxMdp3)
107+
.SetDataset(db::Dataset::GlbxMdp3)
108108
.BuildThreaded();
109109

110-
auto handler = [&symbol_mappings](const Record& rec) {
110+
auto handler = [&symbol_mappings](const db::Record& rec) {
111111
symbol_mappings.OnRecord(rec);
112-
if (const auto* trade = rec.GetIf<TradeMsg>()) {
113-
std::cout << "Received trade for "
114-
<< symbol_mappings[trade->hd.instrument_id] << ':' << *trade
115-
<< '\n';
112+
if (const auto* trade = rec.GetIf<db::TradeMsg>()) {
113+
std::cout << "Received trade for " << symbol_mappings[trade->hd.instrument_id]
114+
<< ':' << *trade << '\n';
116115
}
117-
return KeepGoing::Continue;
116+
return db::KeepGoing::Continue;
118117
};
119118

120-
client.Subscribe({"ES.FUT"}, Schema::Trades, SType::Parent);
119+
client.Subscribe({"ES.FUT"}, db::Schema::Trades, db::SType::Parent);
121120
client.Start(handler);
122121
std::this_thread::sleep_for(std::chrono::seconds{10});
123122
return 0;
@@ -135,24 +134,23 @@ Here is a simple program that fetches 10 minutes worth of historical trades for
135134
#include <databento/symbol_map.hpp>
136135
#include <iostream>
137136
138-
using namespace databento;
137+
namespace db = databento;
139138
140139
int main() {
141-
auto client = HistoricalBuilder{}.SetKey("$YOUR_API_KEY").Build();
142-
TsSymbolMap symbol_map;
143-
auto decode_symbols = [&symbol_map](const Metadata& metadata) {
140+
auto client = db::Historical::Builder().SetKey("$YOUR_API_KEY").Build();
141+
db::TsSymbolMap symbol_map;
142+
auto decode_symbols = [&symbol_map](const db::Metadata& metadata) {
144143
symbol_map = metadata.CreateSymbolMap();
145144
};
146-
auto print_trades = [&symbol_map](const Record& record) {
147-
const auto& trade_msg = record.Get<TradeMsg>();
148-
std::cout << "Received trade for " << symbol_map.At(trade_msg) << ": "
149-
<< trade_msg << '\n';
150-
return KeepGoing::Continue;
145+
auto print_trades = [&symbol_map](const db::Record& record) {
146+
const auto& trade_msg = record.Get<db::TradeMsg>();
147+
std::cout << "Received trade for " << symbol_map.At(trade_msg) << ": " << trade_msg
148+
<< '\n';
149+
return db::KeepGoing::Continue;
151150
};
152-
client.TimeseriesGetRange(
153-
"GLBX.MDP3", {"2022-06-10T14:30", "2022-06-10T14:40"}, kAllSymbols,
154-
Schema::Trades, SType::RawSymbol, SType::InstrumentId, {}, decode_symbols,
155-
print_trades);
151+
client.TimeseriesGetRange("GLBX.MDP3", {"2022-06-10T14:30", "2022-06-10T14:40"},
152+
{"ESM2", "NQZ2"}, db::Schema::Trades, db::SType::RawSymbol,
153+
db::SType::InstrumentId, {}, decode_symbols, print_trades);
156154
}
157155
```
158156

examples/historical/batch.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,22 @@
33
#include <algorithm> // find_if
44
#include <iostream>
55

6-
#include "databento/constants.hpp"
76
#include "databento/historical.hpp"
7+
#include "databento/publishers.hpp" // Dataset
8+
9+
namespace db = databento;
810

911
int main() {
10-
auto client = databento::HistoricalBuilder{}.SetKeyFromEnv().Build();
12+
auto client = db::Historical::Builder().SetKeyFromEnv().Build();
1113

1214
const auto job =
13-
client.BatchSubmitJob(databento::dataset::kGlbxMdp3, {"GEZ2"},
14-
databento::Schema::Trades, {"2022-08-26", "2022-09-27"});
15+
client.BatchSubmitJob(db::ToString(db::Dataset::GlbxMdp3), {"GEZ2"},
16+
db::Schema::Trades, {"2022-08-26", "2022-09-27"});
1517
const auto all_jobs = client.BatchListJobs();
1618

17-
const auto all_job_it = std::find_if(
18-
all_jobs.begin(), all_jobs.end(),
19-
[&job](const databento::BatchJob& a_job) { return job.id == a_job.id; });
19+
const auto all_job_it =
20+
std::find_if(all_jobs.begin(), all_jobs.end(),
21+
[&job](const db::BatchJob& a_job) { return job.id == a_job.id; });
2022

2123
if (all_job_it == all_jobs.end()) {
2224
std::cout << "Couldn't find submitted job\n";

examples/historical/metadata.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
#include <cstddef>
22
#include <iostream>
33

4-
#include "databento/constants.hpp"
54
#include "databento/enums.hpp"
65
#include "databento/historical.hpp"
6+
#include "databento/publishers.hpp"
7+
8+
namespace db = databento;
79

810
int main() {
9-
using databento::dataset::kGlbxMdp3;
11+
const char* glbx_dataset = db::ToString(db::Dataset::GlbxMdp3);
1012

11-
auto client = databento::HistoricalBuilder{}.SetKeyFromEnv().Build();
13+
auto client = db::Historical::Builder().SetKeyFromEnv().Build();
1214

1315
const auto publishers = client.MetadataListPublishers();
1416
std::cout << "Publishers:\n";
@@ -24,15 +26,14 @@ int main() {
2426
}
2527
std::cout << '\n';
2628

27-
const auto schemas = client.MetadataListSchemas(kGlbxMdp3);
29+
const auto schemas = client.MetadataListSchemas(glbx_dataset);
2830
std::cout << "Schemas(GLBX):\n";
2931
for (const auto& schema : schemas) {
3032
std::cout << "- " << schema << '\n';
3133
}
3234
std::cout << '\n';
3335

34-
const auto fields =
35-
client.MetadataListFields(databento::Encoding::Dbn, databento::Schema::Trades);
36+
const auto fields = client.MetadataListFields(db::Encoding::Dbn, db::Schema::Trades);
3637
std::cout << "Fields:\n";
3738
for (const auto& field_detail : fields) {
3839
std::cout << "- " << field_detail << '\n';
@@ -47,7 +48,7 @@ int main() {
4748
}
4849
std::cout << '\n';
4950

50-
const auto all_unit_prices = client.MetadataListUnitPrices(kGlbxMdp3);
51+
const auto all_unit_prices = client.MetadataListUnitPrices(glbx_dataset);
5152
std::cout << "Unit prices:\n";
5253
for (const auto& [mode, unit_prices] : all_unit_prices) {
5354
const auto* mode_str = ToString(mode);
@@ -58,16 +59,16 @@ int main() {
5859
std::cout << '\n';
5960

6061
const auto record_count = client.MetadataGetRecordCount(
61-
kGlbxMdp3, {"2020-12-28", "2020-12-29"}, {"ESH1"}, databento::Schema::Mbo);
62+
glbx_dataset, {"2020-12-28", "2020-12-29"}, {"ESH1"}, db::Schema::Mbo);
6263
std::cout << "Record count: " << record_count << "\n\n";
6364

6465
const std::size_t billable_size = client.MetadataGetBillableSize(
65-
kGlbxMdp3, {"2020-12-28", "2020-12-29"}, {"ESH1"}, databento::Schema::Mbo,
66-
databento::SType::RawSymbol, {});
66+
glbx_dataset, {"2020-12-28", "2020-12-29"}, {"ESH1"}, db::Schema::Mbo,
67+
db::SType::RawSymbol, {});
6768
std::cout << "Billable size (uncompressed binary bytes): " << billable_size << "\n\n";
6869

69-
const auto cost = client.MetadataGetCost(kGlbxMdp3, {"2020-12-28", "2020-12-29"},
70-
{"ESH1"}, databento::Schema::Mbo);
70+
const auto cost = client.MetadataGetCost(glbx_dataset, {"2020-12-28", "2020-12-29"},
71+
{"ESH1"}, db::Schema::Mbo);
7172
std::cout << "Cost (in cents): " << cost << '\n';
7273

7374
return 0;

examples/historical/readme.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
11
// Duplicate of the example usage code from the README.md to ensure
22
// it compiles and to be able to clang-format it.
3-
// NOLINTBEGIN(google-build-using-namespace)
43
#include <databento/dbn.hpp>
54
#include <databento/historical.hpp>
65
#include <databento/symbol_map.hpp>
76
#include <iostream>
87

9-
using namespace databento;
8+
namespace db = databento;
109

1110
int main() {
12-
auto client = HistoricalBuilder{}.SetKey("$YOUR_API_KEY").Build();
13-
TsSymbolMap symbol_map;
14-
auto decode_symbols = [&symbol_map](const Metadata& metadata) {
11+
auto client = db::Historical::Builder().SetKey("$YOUR_API_KEY").Build();
12+
db::TsSymbolMap symbol_map;
13+
auto decode_symbols = [&symbol_map](const db::Metadata& metadata) {
1514
symbol_map = metadata.CreateSymbolMap();
1615
};
17-
auto print_trades = [&symbol_map](const Record& record) {
18-
const auto& trade_msg = record.Get<TradeMsg>();
16+
auto print_trades = [&symbol_map](const db::Record& record) {
17+
const auto& trade_msg = record.Get<db::TradeMsg>();
1918
std::cout << "Received trade for " << symbol_map.At(trade_msg) << ": " << trade_msg
2019
<< '\n';
21-
return KeepGoing::Continue;
20+
return db::KeepGoing::Continue;
2221
};
2322
client.TimeseriesGetRange("GLBX.MDP3", {"2022-06-10T14:30", "2022-06-10T14:40"},
24-
{"ESM2", "NQZ2"}, Schema::Trades, SType::RawSymbol,
25-
SType::InstrumentId, {}, decode_symbols, print_trades);
23+
{"ESM2", "NQZ2"}, db::Schema::Trades, db::SType::RawSymbol,
24+
db::SType::InstrumentId, {}, decode_symbols, print_trades);
2625
}
27-
// NOLINTEND(google-build-using-namespace)

examples/historical/symbology_resolve.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,25 @@
66
#include "databento/historical.hpp"
77
#include "databento/symbology.hpp"
88

9+
namespace db = databento;
10+
911
int main(int argc, char* argv[]) {
1012
if (argc < 6) {
1113
std::cerr << "USAGE: symbology-resolve <DATASET> <STYPE_IN> <STYPE_OUT> "
1214
"<DATE> <SYMBOLS...>\n";
1315
return 1;
1416
}
15-
const auto stype_in = databento::FromString<databento::SType>(argv[2]);
16-
const auto stype_out = databento::FromString<databento::SType>(argv[3]);
17+
const auto stype_in = db::FromString<db::SType>(argv[2]);
18+
const auto stype_out = db::FromString<db::SType>(argv[3]);
1719

1820
std::vector<std::string> symbols;
1921
for (int i = 5; i < argc; ++i) {
2022
symbols.emplace_back(argv[i]);
2123
}
2224

23-
auto client = databento::HistoricalBuilder{}.SetKeyFromEnv().Build();
24-
const databento::SymbologyResolution resolution =
25-
client.SymbologyResolve(argv[1], symbols, stype_in, stype_out,
26-
databento::DateTimeRange<std::string>{argv[4]});
25+
auto client = db::Historical::Builder().SetKeyFromEnv().Build();
26+
const db::SymbologyResolution resolution = client.SymbologyResolve(
27+
argv[1], symbols, stype_in, stype_out, db::DateTimeRange<std::string>{argv[4]});
2728
std::cout << resolution << '\n';
2829

2930
return 0;

examples/historical/timeseries_get_range.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44
#include "databento/enums.hpp"
55
#include "databento/historical.hpp"
66

7+
namespace db = databento;
8+
79
int main() {
8-
auto client = databento::HistoricalBuilder{}.SetKeyFromEnv().Build();
10+
auto client = db::Historical::Builder().SetKeyFromEnv().Build();
911
const auto limit = 1000;
1012
client.TimeseriesGetRange(
11-
databento::dataset::kGlbxMdp3,
12-
databento::DateTimeRange<std::string>{"2022-10-03"}, {"ESZ2"},
13-
databento::Schema::Trades, databento::SType::RawSymbol,
14-
databento::SType::InstrumentId, limit,
15-
[](databento::Metadata&& metadata) { std::cout << metadata << '\n'; },
16-
[](const databento::Record& record) {
17-
const auto& trade_msg = record.Get<databento::TradeMsg>();
13+
db::dataset::kGlbxMdp3, db::DateTimeRange<std::string>{"2022-10-03"}, {"ESZ2"},
14+
db::Schema::Trades, db::SType::RawSymbol, db::SType::InstrumentId, limit,
15+
[](db::Metadata&& metadata) { std::cout << metadata << '\n'; },
16+
[](const db::Record& record) {
17+
const auto& trade_msg = record.Get<db::TradeMsg>();
1818
std::cout << trade_msg << '\n';
19-
return databento::KeepGoing::Continue;
19+
return db::KeepGoing::Continue;
2020
});
2121

2222
return 0;
Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
1-
#include <chrono>
2-
#include <ctime>
3-
#include <iomanip>
4-
#include <iostream> // setw
5-
61
#include "databento/constants.hpp"
72
#include "databento/datetime.hpp"
83
#include "databento/dbn_file_store.hpp"
94
#include "databento/enums.hpp"
105
#include "databento/historical.hpp"
116
#include "databento/record.hpp"
127

8+
namespace db = databento;
9+
1310
int main() {
14-
auto client = databento::HistoricalBuilder{}.SetKeyFromEnv().Build();
11+
auto client = db::Historical::Builder().SetKeyFromEnv().Build();
1512
const auto limit = 1000;
16-
databento::DbnFileStore dbn_file_store = client.TimeseriesGetRangeToFile(
17-
databento::dataset::kGlbxMdp3, {"2022-10-03T00:00", "2022-10-04T00:00"}, {"ESZ2"},
18-
databento::Schema::Ohlcv1M, databento::SType::RawSymbol,
19-
databento::SType::InstrumentId, limit, "ESZ2-ohlcv1m-20201003-20201004.dbn.zst");
20-
dbn_file_store.Replay([](const databento::Record record) {
21-
const auto& ohlcv_bar = record.Get<databento::OhlcvMsg>();
13+
db::DbnFileStore dbn_file_store = client.TimeseriesGetRangeToFile(
14+
db::dataset::kGlbxMdp3, {"2022-10-03T00:00", "2022-10-04T00:00"}, {"ESZ2"},
15+
db::Schema::Ohlcv1M, db::SType::RawSymbol, db::SType::InstrumentId, limit,
16+
"ESZ2-ohlcv1m-20201003-20201004.dbn.zst");
17+
dbn_file_store.Replay([](const db::Record record) {
18+
const auto& ohlcv_bar = record.Get<db::OhlcvMsg>();
2219
std::cout << ohlcv_bar << '\n';
23-
return databento::KeepGoing::Continue;
20+
return db::KeepGoing::Continue;
2421
});
2522
return 0;
2623
}

0 commit comments

Comments
 (0)