Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Windows] - Use _mkgmtime instead of timegm #650

Merged
merged 1 commit into from
Dec 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 4 additions & 17 deletions src/api-objects/include/apikey.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,28 @@

#include "accountowner.hpp"
#include "cct_string.hpp"
#include "cct_type_traits.hpp"

namespace cct::api {

class APIKey {
public:
/// @brief Creates an API key without an associated name.
/// @param platform name of the platform exchange in lower case
/// @param name name of the key as defined in the secret json file
/// @param key the public api key
/// @param privateKey the private api key
/// @param passphrase passphrase used
APIKey(std::string_view platform, std::string_view name, string &&key, string &&privateKey, string &&passphrase)
: _platform(platform),
_name(name),
_key(std::move(key)),
_privateKey(std::move(privateKey)),
_passphrase(std::move(passphrase)) {}
APIKey(std::string_view name, string &&key, string &&privateKey, string &&passphrase)
: _name(name), _key(std::move(key)), _privateKey(std::move(privateKey)), _passphrase(std::move(passphrase)) {}

/// @brief Creates an API key with an associated AccountOwner, needed for Bithumb withdrawals for instance.
/// @param platform name of the platform exchange in lower case
/// @param name name of the key as defined in the secret json file
/// @param key the public api key
/// @param privateKey the private api key
/// @param passphrase passphrase used
/// @param accountOwner the person's name spelled in English that owns the account associated to the key
APIKey(std::string_view platform, std::string_view name, string &&key, string &&privateKey, string &&passphrase,
APIKey(std::string_view name, string &&key, string &&privateKey, string &&passphrase,
const AccountOwner &accountOwner)
: _platform(platform),
_name(name),
: _name(name),
_key(std::move(key)),
_privateKey(std::move(privateKey)),
_passphrase(std::move(passphrase)),
Expand All @@ -52,18 +44,13 @@ class APIKey {
_passphrase.assign(_passphrase.size(), '\0');
}

std::string_view platform() const { return _platform; }
std::string_view name() const { return _name; }
std::string_view key() const { return _key; }
std::string_view privateKey() const { return _privateKey; }
std::string_view passphrase() const { return _passphrase; }
const AccountOwner &accountOwner() const { return _accountOwner; }

using trivially_relocatable =
std::bool_constant<is_trivially_relocatable_v<string> && is_trivially_relocatable_v<AccountOwner>>::type;

private:
string _platform;
string _name;
string _key;
string _privateKey;
Expand Down
15 changes: 6 additions & 9 deletions src/api-objects/src/apikeysprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,20 +52,18 @@ APIKeysProvider::KeyNames APIKeysProvider::getKeyNames(ExchangeNameEnum exchange
}

const APIKey& APIKeysProvider::get(const ExchangeName& exchangeName) const {
std::string_view platformStr = exchangeName.name();
ExchangeNameEnum exchangeNameEnum = static_cast<ExchangeNameEnum>(
std::ranges::find(kSupportedExchanges, platformStr) - std::begin(kSupportedExchanges));
ExchangeNameEnum exchangeNameEnum = exchangeName.exchangeNameEnum();
const APIKeys& apiKeys = _apiKeysPerExchange[static_cast<int>(exchangeNameEnum)];
if (!exchangeName.isKeyNameDefined()) {
if (apiKeys.size() > 1) {
throw exception("Specify name for {} keys as you have several", platformStr);
throw exception("Specify name for {} keys as you have several", exchangeName.name());
}
return apiKeys.front();
}
auto keyNameIt = std::ranges::find_if(
apiKeys, [exchangeName](const APIKey& apiKey) { return apiKey.name() == exchangeName.keyName(); });
if (keyNameIt == apiKeys.end()) {
throw exception("Unable to retrieve private key for {} named {:k}", platformStr, exchangeName);
throw exception("Unable to retrieve private key for {} named {:k}", exchangeName.name(), exchangeName);
}
return *keyNameIt;
}
Expand All @@ -92,11 +90,10 @@ APIKeysProvider::APIKeysPerExchange APIKeysProvider::ParseAPIKeys(std::string_vi

bool atLeastOneKeyFound = false;
for (auto& [exchangeNameEnum, apiKeys] : apiKeysPerExchangeMap) {
auto publicExchangeName = kSupportedExchanges[static_cast<int>(exchangeNameEnum)];
if (std::ranges::any_of(exchangesWithoutSecrets, [exchangeNameEnum](const auto& exchangeName) {
return exchangeName.exchangeNameEnum() == exchangeNameEnum;
})) {
log::debug("Not loading {} private keys as requested", publicExchangeName);
log::debug("Not loading {} private keys as requested", EnumToString(exchangeNameEnum));
continue;
}

Expand All @@ -107,7 +104,7 @@ APIKeysProvider::APIKeysPerExchange APIKeysProvider::ParseAPIKeys(std::string_vi
}

apiKeysPerExchange[static_cast<int>(exchangeNameEnum)].emplace_back(
publicExchangeName, keyName, std::move(apiKey.key), std::move(apiKey.priv), std::move(apiKey.passphrase),
keyName, std::move(apiKey.key), std::move(apiKey.priv), std::move(apiKey.passphrase),
AccountOwner(apiKey.accountOwner.enName, apiKey.accountOwner.koName));

atLeastOneKeyFound = true;
Expand Down Expand Up @@ -138,7 +135,7 @@ string APIKeysProvider::str() const {
}
foundKeysStr.push_back('}');
foundKeysStr.push_back('@');
foundKeysStr.append(kSupportedExchanges[exchangePos]);
foundKeysStr.append(EnumToString(static_cast<ExchangeNameEnum>(exchangePos)));
}
return foundKeysStr;
}
Expand Down
2 changes: 1 addition & 1 deletion src/api/common/include/exchangepublicapi.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ class ExchangePublic : public CacheFileUpdatorInterface {
ExchangeNameEnum exchangeNameEnum() const { return _exchangeNameEnum; }

/// Get the name of the exchange in lower case.
std::string_view name() const { return kSupportedExchanges[static_cast<int>(_exchangeNameEnum)]; }
std::string_view name() const { return EnumToString(_exchangeNameEnum); }

/// Retrieve the shortest array of markets that can convert 'fromCurrencyCode' to 'toCurrencyCode' (shortest in terms
/// of number of conversions) of 'fromCurrencyCode' to 'toCurrencyCode'.
Expand Down
6 changes: 3 additions & 3 deletions src/api/common/src/commonapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ MonetaryAmountByCurrencySet CommonAPI::tryQueryWithdrawalFees(ExchangeNameEnum e

if (ret.empty()) {
log::warn("Taking binance withdrawal fees for {} as crawler failed to retrieve data",
kSupportedExchanges[static_cast<int>(exchangeNameEnum)]);
EnumToString(exchangeNameEnum));
ret = _binanceGlobalInfos.queryWithdrawalFees();
}
return ret;
Expand All @@ -95,7 +95,7 @@ std::optional<MonetaryAmount> CommonAPI::tryQueryWithdrawalFee(ExchangeNameEnum
}
}
log::warn("Taking binance withdrawal fee for {} and currency {} as crawler failed to retrieve data",
kSupportedExchanges[static_cast<int>(exchangeNameEnum)], currencyCode);
EnumToString(exchangeNameEnum), currencyCode);
MonetaryAmount withdrawFee = _binanceGlobalInfos.queryWithdrawalFee(currencyCode);
if (withdrawFee.isDefault()) {
return {};
Expand Down Expand Up @@ -226,7 +226,7 @@ void CommonAPI::updateCacheFile() const {
fiatsData.fiats.emplace_back(fiatCode.str());
}
fiatsData.timeepoch = TimestampToSecondsSinceEpoch(fiatsPtrLastUpdatedTimePair.second);
fiatsCacheFile.write(WriteMiniJsonOrThrow(fiatsData));
fiatsCacheFile.write(WriteJsonOrThrow(fiatsData));
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/api/common/src/fiatconverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ FiatConverter::FiatConverter(const CoincenterInfo& coincenterInfo, Duration rate
}

void FiatConverter::updateCacheFile() const {
auto dataStr = WriteMiniJsonOrThrow(_pricesMap);
auto dataStr = WriteJsonOrThrow(_pricesMap);
GetRatesCacheFile(_dataDir).write(dataStr);
}

Expand Down
10 changes: 5 additions & 5 deletions src/api/common/src/withdrawalfees-crawler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ WithdrawalFeesCrawler::WithdrawalFeesCrawler(const CoincenterInfo& coincenterInf
// we can reuse file data
WithdrawalInfoMaps withdrawalInfoMaps;

std::string_view exchangeName = kSupportedExchanges[static_cast<int>(exchangeNameEnum)];
std::string_view exchangeName = EnumToString(exchangeNameEnum);

for (const auto& [cur, val] : exchangeData.assets) {
MonetaryAmount withdrawMin(val.min, cur);
Expand Down Expand Up @@ -106,7 +106,7 @@ WithdrawalFeesCrawler::WithdrawalInfoMaps WithdrawalFeesCrawler::WithdrawalFeesF
}

if (withdrawFees1.empty() || withdrawMinMap1.empty()) {
log::error("Unable to parse {} withdrawal fees", kSupportedExchanges[static_cast<int>(exchangeNameEnum)]);
log::error("Unable to parse {} withdrawal fees", EnumToString(exchangeNameEnum));
}

return std::make_pair(std::move(withdrawFees1), std::move(withdrawMinMap1));
Expand Down Expand Up @@ -136,14 +136,14 @@ void WithdrawalFeesCrawler::updateCacheFile() const {
}
}
}
auto dataStr = WriteMiniJsonOrThrow(withdrawInfoFile);
auto dataStr = WriteJsonOrThrow(withdrawInfoFile);

GetWithdrawInfoFile(_coincenterInfo.dataDir()).write(dataStr);
}

WithdrawalFeesCrawler::WithdrawalInfoMaps WithdrawalFeesCrawler::WithdrawalFeesFunc::get1(
ExchangeNameEnum exchangeNameEnum) {
std::string_view exchangeName = kSupportedExchanges[static_cast<int>(exchangeNameEnum)];
std::string_view exchangeName = EnumToString(exchangeNameEnum);
string path(exchangeName);
path.append(".json");
std::string_view dataStr = _curlHandle1.query(path, CurlOptions(HttpRequestType::kGet));
Expand Down Expand Up @@ -186,7 +186,7 @@ WithdrawalFeesCrawler::WithdrawalInfoMaps WithdrawalFeesCrawler::WithdrawalFeesF

WithdrawalFeesCrawler::WithdrawalInfoMaps WithdrawalFeesCrawler::WithdrawalFeesFunc::get2(
ExchangeNameEnum exchangeNameEnum) {
std::string_view exchangeName = kSupportedExchanges[static_cast<int>(exchangeNameEnum)];
std::string_view exchangeName = EnumToString(exchangeNameEnum);
std::string_view withdrawalFeesCsv = _curlHandle2.query(exchangeName, CurlOptions(HttpRequestType::kGet));

static constexpr std::string_view kBeginTableTitle = "Deposit & Withdrawal fees</h2>";
Expand Down
2 changes: 1 addition & 1 deletion src/api/common/test/exchangeprivateapi_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class ExchangePrivateTest : public ::testing::Test {
FiatConverter fiatConverter{coincenterInfo, Duration::max(), Reader(), Reader()};

MockExchangePublic exchangePublic{ExchangeNameEnum::binance, fiatConverter, commonAPI, coincenterInfo};
APIKey key{"test", "testUser", "", "", ""};
APIKey key{"testUser", "", "", ""};
MockExchangePrivate exchangePrivate{exchangePublic, coincenterInfo, key};

Market market{"ETH", "EUR"};
Expand Down
4 changes: 2 additions & 2 deletions src/api/common/test/fiatconverter_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ std::string_view CurlHandle::query([[maybe_unused]] std::string_view endpoint, c
}
}
if (res.val != 0) {
_queryData = WriteMiniJsonOrThrow(response);
_queryData = WriteJsonOrThrow(response);
}

} else {
Expand All @@ -96,7 +96,7 @@ std::string_view CurlHandle::query([[maybe_unused]] std::string_view endpoint, c
response.rates["SUSHI"] = 36.78;
response.rates["KRW"] = 1341.88;
response.rates["NOK"] = 11.3375;
_queryData = WriteMiniJsonOrThrow(response);
_queryData = WriteJsonOrThrow(response);
}

return _queryData;
Expand Down
2 changes: 1 addition & 1 deletion src/api/exchanges/src/binanceprivateapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ T PrivateQuery(CurlHandle& curlHandle, const APIKey& apiKey, HttpRequestType req
}
if (throwIfError) {
std::string_view errorMsg;
string jsonStr = WriteMiniJsonOrThrow(ret);
string jsonStr = WriteJsonOrThrow(ret);
if constexpr (amc::is_detected<schema::binance::has_msg_t, T>::value) {
if (ret.msg) {
errorMsg = *ret.msg;
Expand Down
2 changes: 1 addition & 1 deletion src/api/exchanges/src/bithumbprivateapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1095,7 +1095,7 @@ InitiatedWithdrawInfo BithumbPrivate::launchWithdraw(MonetaryAmount grossAmount,
}

void BithumbPrivate::updateCacheFile() const {
GetBithumbCurrencyInfoMapCache(_coincenterInfo.dataDir()).write(WriteMiniJsonOrThrow(_currencyOrderInfoMap));
GetBithumbCurrencyInfoMapCache(_coincenterInfo.dataDir()).write(WriteJsonOrThrow(_currencyOrderInfoMap));
}

} // namespace cct::api
2 changes: 1 addition & 1 deletion src/api/interface/include/exchangeretriever.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class ExchangeRetriever {
}
if (ret.size() == oldSize) {
if constexpr (std::is_same_v<std::remove_cvref_t<decltype(name)>, ExchangeNameEnum>) {
throw exception("Unable to find {} in the exchange list", kSupportedExchanges[static_cast<int>(name)]);
throw exception("Unable to find {} in the exchange list", EnumToString(name));
} else {
throw exception("Unable to find {} in the exchange list", name);
}
Expand Down
2 changes: 1 addition & 1 deletion src/api/interface/src/exchange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Exchange::Exchange(const schema::ExchangeConfig &exchangeConfig, ExchangePublic
_exchangePrivate(std::move(exchangePrivate)),
_pExchangeConfig(std::addressof(exchangeConfig)) {}

std::size_t Exchange::publicExchangePos() const { return PublicExchangePos(name()); }
std::size_t Exchange::publicExchangePos() const { return static_cast<std::size_t>(exchangeNameEnum()); }

bool Exchange::canWithdraw(CurrencyCode currencyCode, const CurrencyExchangeFlatSet &currencyExchangeSet) const {
if (_pExchangeConfig->asset.withdrawExclude.contains(currencyCode)) {
Expand Down
4 changes: 2 additions & 2 deletions src/api/interface/test/exchangeretriever_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ class ExchangeRetrieverTest : public ::testing::Test {
api::MockExchangePublic exchangePublic1{ExchangeNameEnum::bithumb, fiatConverter, commonAPI, coincenterInfo};
api::MockExchangePublic exchangePublic2{ExchangeNameEnum::kraken, fiatConverter, commonAPI, coincenterInfo};
api::MockExchangePublic exchangePublic3{ExchangeNameEnum::kucoin, fiatConverter, commonAPI, coincenterInfo};
api::APIKey key1{"test1", "user1", "", "", ""};
api::APIKey key2{"test2", "user2", "", "", ""};
api::APIKey key1{"user1", "", "", ""};
api::APIKey key2{"user2", "", "", ""};
Exchange exchange1{coincenterInfo.exchangeConfig(exchangePublic1.exchangeNameEnum()), exchangePublic1,
std::make_unique<api::MockExchangePrivate>(exchangePublic1, coincenterInfo, key1)};
Exchange exchange2{coincenterInfo.exchangeConfig(exchangePublic2.exchangeNameEnum()), exchangePublic2,
Expand Down
2 changes: 0 additions & 2 deletions src/basic-objects/include/coincentercommandtype.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ namespace cct {

enum class CoincenterCommandType : int8_t { CCT_COINCENTER_COMMAND_TYPES };

std::string_view CoincenterCommandTypeToString(CoincenterCommandType coincenterCommandType);

bool IsAnyTrade(CoincenterCommandType coincenterCommandType);
} // namespace cct

Expand Down
7 changes: 0 additions & 7 deletions src/basic-objects/src/coincentercommandtype.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,8 @@
#include <string_view>
#include <type_traits>

#include "cct_json.hpp"

namespace cct {

std::string_view CoincenterCommandTypeToString(CoincenterCommandType coincenterCommandType) {
return json::reflect<CoincenterCommandType>::keys[static_cast<std::underlying_type_t<CoincenterCommandType>>(
coincenterCommandType)];
}

bool IsAnyTrade(CoincenterCommandType coincenterCommandType) {
switch (coincenterCommandType) {
case CoincenterCommandType::Trade:
Expand Down
2 changes: 1 addition & 1 deletion src/engine/include/exchangesorchestrator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class ExchangesOrchestrator {
MonetaryAmountPerExchange getLastPricePerExchange(Market mk, ExchangeNameSpan exchangeNames);

MarketDataPerExchange getMarketDataPerExchange(std::span<const Market> marketPerPublicExchange,
ExchangeNameSpan exchangeNames);
std::span<const ExchangeNameEnum> exchangeNameEnums);

MarketTimestampSetsPerExchange pullAvailableMarketsForReplay(TimeWindow timeWindow, ExchangeNameSpan exchangeNames);

Expand Down
6 changes: 3 additions & 3 deletions src/engine/include/queryresultprinter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,17 +121,17 @@ class QueryResultPrinter {

void printJson(const auto &jsonObj) const {
if (_pOs != nullptr) {
*_pOs << WriteMiniJsonOrThrow(jsonObj) << '\n';
*_pOs << WriteJsonOrThrow(jsonObj) << '\n';
} else {
_outputLogger->info(WriteMiniJsonOrThrow(jsonObj));
_outputLogger->info(WriteJsonOrThrow(jsonObj));
}
}

void logActivity(CoincenterCommandType commandType, const auto &jsonObj, bool isSimulationMode = false) const {
if (_loggingInfo.isCommandTypeTracked(commandType) &&
(!isSimulationMode || _loggingInfo.alsoLogActivityForSimulatedCommands())) {
File activityFile = _loggingInfo.getActivityFile();
activityFile.write(WriteMiniJsonOrThrow(jsonObj), Writer::Mode::Append);
activityFile.write(WriteJsonOrThrow(jsonObj), Writer::Mode::Append);
}
}

Expand Down
9 changes: 4 additions & 5 deletions src/engine/src/coincenter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,18 +73,18 @@ MarketOrderBookConversionRates Coincenter::getMarketOrderBooks(Market mk, Exchan
}

MarketDataPerExchange Coincenter::queryMarketDataPerExchange(std::span<const Market> marketPerPublicExchangePos) {
ExchangeNames exchangeNames;
ExchangeNameEnumVector exchangeNameEnums;

int exchangePos{};
for (Market market : marketPerPublicExchangePos) {
if (market.isDefined()) {
exchangeNames.emplace_back(kSupportedExchanges[exchangePos]);
exchangeNameEnums.emplace_back(static_cast<ExchangeNameEnum>(exchangePos));
}
++exchangePos;
}

const auto marketDataPerExchange =
_exchangesOrchestrator.getMarketDataPerExchange(marketPerPublicExchangePos, exchangeNames);
_exchangesOrchestrator.getMarketDataPerExchange(marketPerPublicExchangePos, exchangeNameEnums);

// Transform data structures to export metrics input format
MarketOrderBookConversionRates marketOrderBookConversionRates(marketDataPerExchange.size());
Expand Down Expand Up @@ -390,8 +390,7 @@ Coincenter::MarketTraderEngineVector Coincenter::createMarketTraderEngines(

if (!isValidateOnly && (startBaseAmount == 0 || startQuoteAmount == 0)) {
log::warn("Cannot convert to start base / quote amounts for {} ({} / {})",
kSupportedExchanges[static_cast<int>(exchangesWithThisMarketData[exchangePos])], startBaseAmount,
startQuoteAmount);
EnumToString(exchangesWithThisMarketData[exchangePos]), startBaseAmount, startQuoteAmount);
exchangesWithThisMarketData.erase(exchangesWithThisMarketData.begin() + exchangePos);
convertedBaseAmountPerExchange.erase(convertedBaseAmountPerExchange.begin() + exchangePos);
convertedQuoteAmountPerExchange.erase(convertedQuoteAmountPerExchange.begin() + exchangePos);
Expand Down
6 changes: 3 additions & 3 deletions src/engine/src/exchangesorchestrator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -954,9 +954,9 @@ MonetaryAmountPerExchange ExchangesOrchestrator::getLastPricePerExchange(Market
return lastPricePerExchange;
}

MarketDataPerExchange ExchangesOrchestrator::getMarketDataPerExchange(std::span<const Market> marketPerPublicExchange,
ExchangeNameSpan exchangeNames) {
UniquePublicSelectedExchanges selectedExchanges = _exchangeRetriever.selectOneAccount(exchangeNames);
MarketDataPerExchange ExchangesOrchestrator::getMarketDataPerExchange(
std::span<const Market> marketPerPublicExchange, std::span<const ExchangeNameEnum> exchangeNameEnums) {
UniquePublicSelectedExchanges selectedExchanges = _exchangeRetriever.selectOneAccount(exchangeNameEnums);

std::array<bool, kNbSupportedExchanges> isMarketTradable;

Expand Down
4 changes: 2 additions & 2 deletions src/engine/src/metricsexporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ void MetricsExporter::exportOrderbookMetrics(const MarketOrderBookConversionRate

for (const auto &[exchangeNameEnum, marketOrderBook, optConversionRate] : marketOrderBookConversionRates) {
key.set("market", marketOrderBook.market().assetsPairStrLower('-'));
key.set("exchange", kSupportedExchanges[static_cast<int>(exchangeNameEnum)]);
key.set("exchange", EnumToString(exchangeNameEnum));
key.set("side", "ask");
_pMetricsGateway->add(MetricType::kGauge, MetricOperation::kSet, key, marketOrderBook.lowestAskPrice().toDouble());
key.set("side", "bid");
Expand All @@ -105,7 +105,7 @@ void MetricsExporter::exportOrderbookMetrics(const MarketOrderBookConversionRate
key.set(kMetricHelpKey, "Best bids and asks volumes");
for (const auto &[exchangeNameEnum, marketOrderBook, optConversionRate] : marketOrderBookConversionRates) {
key.set("market", marketOrderBook.market().assetsPairStrLower('-'));
key.set("exchange", kSupportedExchanges[static_cast<int>(exchangeNameEnum)]);
key.set("exchange", EnumToString(exchangeNameEnum));
key.set("side", "ask");
_pMetricsGateway->add(MetricType::kGauge, MetricOperation::kSet, key,
marketOrderBook.amountAtAskPrice().toDouble());
Expand Down
Loading
Loading