#ifndef BOSS_MOD_FEEMONITOR_HPP #define BOSS_MOD_FEEMONITOR_HPP #include"Ln/NodeId.hpp" #include"Sqlite3/Db.hpp" #include #include #include namespace Boss { namespace Msg { struct DbResource; }} namespace Boss { namespace Msg { struct MonitorFeeByBalance; }} namespace Boss { namespace Msg { struct MonitorFeeByTheory; }} namespace Boss { namespace Msg { struct MonitorFeeSetChannel; }} namespace Boss { namespace Msg { struct MonitorFeeBySize; }} namespace Boss { namespace Msg { struct PeerMedianChannelFee; }} namespace Ev { template class Io; } namespace S { class Bus; } namespace Sqlite3 { class Tx; } namespace Boss { namespace Mod { /** class Boss::Mod::FeeMonitor * * @brief Collects fee-setting context and records fee changes * into the internal sqlite database. */ class FeeMonitor { private: struct PeerInfo { std::optional baseline_base; std::optional baseline_ppm; std::optional size_mult; std::optional size_total_peers; std::optional size_less_peers; std::optional balance_mult; std::optional balance_our_msat; std::optional balance_total_msat; std::optional price_level; std::optional price_mult; std::optional price_cards_left; std::optional price_center; }; S::Bus& bus; Sqlite3::Db db; std::map peers; void start(); Ev::Io initialize_db(); Ev::Io db_transact(); std::uint64_t get_peer_id(Sqlite3::Tx& tx, Ln::NodeId const& node); Ev::Io on_db(Boss::Msg::DbResource const& m); Ev::Io on_baseline(Boss::Msg::PeerMedianChannelFee const& m); Ev::Io on_size(Boss::Msg::MonitorFeeBySize const& m); Ev::Io on_balance(Boss::Msg::MonitorFeeByBalance const& m); Ev::Io on_price(Boss::Msg::MonitorFeeByTheory const& m); Ev::Io on_set(Boss::Msg::MonitorFeeSetChannel const& m); public: FeeMonitor(FeeMonitor const&) =delete; FeeMonitor(FeeMonitor&&) =delete; explicit FeeMonitor(S::Bus& bus_); ~FeeMonitor(); }; }} #endif /* !defined(BOSS_MOD_FEEMONITOR_HPP) */