22#include "data/BackendInterface.hpp"
24#include "feed/SubscriptionManagerInterface.hpp"
26#include "util/log/Logger.hpp"
27#include "util/newconfig/ConfigDefinition.hpp"
28#include "util/newconfig/ObjectView.hpp"
30#include <boost/asio/io_context.hpp>
31#include <boost/asio/spawn.hpp>
32#include <boost/json/object.hpp>
33#include <boost/uuid/uuid.hpp>
34#include <grpcpp/support/status.h>
35#include <org/xrpl/rpc/v1/get_ledger.pb.h>
56 using OnConnectHook = std::function<void()>;
57 using OnDisconnectHook = std::function<void(
bool)>;
58 using OnLedgerClosedHook = std::function<void()>;
75 stop(boost::asio::yield_context yield) = 0;
98 virtual boost::json::object
125 virtual std::pair<grpc::Status, org::xrpl::rpc::v1::GetLedgerResponse>
126 fetchLedger(uint32_t sequence,
bool getObjects =
true,
bool getObjectNeighbors =
false) = 0;
136 virtual std::pair<std::vector<std::string>,
bool>
148 virtual std::expected<boost::json::object, rpc::ClioError>
150 boost::json::object
const& request,
151 std::optional<std::string>
const& forwardToRippledClientIp,
152 std::string_view xUserValue,
153 boost::asio::yield_context yield
157using SourcePtr = std::unique_ptr<SourceBase>;
159using SourceFactory = std::function<SourcePtr(
161 boost::asio::io_context& ioc,
162 std::shared_ptr<BackendInterface> backend,
163 std::shared_ptr<feed::SubscriptionManagerInterface> subscriptions,
164 std::shared_ptr<NetworkValidatedLedgersInterface> validatedLedgers,
165 std::chrono::steady_clock::duration forwardingTimeout,
166 SourceBase::OnConnectHook onConnect,
167 SourceBase::OnDisconnectHook onDisconnect,
168 SourceBase::OnLedgerClosedHook onLedgerClosed
189 boost::asio::io_context& ioc,
190 std::shared_ptr<BackendInterface> backend,
191 std::shared_ptr<feed::SubscriptionManagerInterface> subscriptions,
192 std::shared_ptr<NetworkValidatedLedgersInterface> validatedLedgers,
193 std::chrono::steady_clock::duration forwardingTimeout,
194 SourceBase::OnConnectHook onConnect,
195 SourceBase::OnDisconnectHook onDisconnect,
196 SourceBase::OnLedgerClosedHook onLedgerClosed
Provides an implementation of a ETL source.
Definition Source.hpp:54
virtual std::string toString() const =0
virtual std::expected< boost::json::object, rpc::ClioError > forwardToRippled(boost::json::object const &request, std::optional< std::string > const &forwardToRippledClientIp, std::string_view xUserValue, boost::asio::yield_context yield) const =0
Forward a request to rippled.
virtual std::pair< grpc::Status, org::xrpl::rpc::v1::GetLedgerResponse > fetchLedger(uint32_t sequence, bool getObjects=true, bool getObjectNeighbors=false)=0
Fetch data for a specific ledger.
virtual void run()=0
Run subscriptions loop of the source.
virtual boost::json::object toJson() const =0
Represent the source as a JSON object.
virtual bool isConnected() const =0
Check if source is connected.
virtual std::pair< std::vector< std::string >, bool > loadInitialLedger(uint32_t sequence, std::uint32_t numMarkers, bool cacheOnly=false)=0
Download a ledger in full.
virtual bool hasLedger(uint32_t sequence) const =0
Check if ledger is known by this source.
virtual void setForwarding(bool isForwarding)=0
Set the forwarding state of the source.
virtual void stop(boost::asio::yield_context yield)=0
Stop Source.
Provides a view into a subset of configuration data defined by a prefix.
Definition ObjectView.hpp:40
This namespace contains everything to do with the ETL and ETL sources.
Definition CacheLoader.hpp:36
SourcePtr makeSource(util::config::ObjectView const &config, boost::asio::io_context &ioc, std::shared_ptr< BackendInterface > backend, std::shared_ptr< feed::SubscriptionManagerInterface > subscriptions, std::shared_ptr< NetworkValidatedLedgersInterface > validatedLedgers, std::chrono::steady_clock::duration forwardingTimeout, SourceBase::OnConnectHook onConnect, SourceBase::OnDisconnectHook onDisconnect, SourceBase::OnLedgerClosedHook onLedgerClosed)
Create a source.
Definition Source.cpp:41