Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
Source.hpp
1#pragma once
2
3#include "etl/InitialLoadObserverInterface.hpp"
6#include "feed/SubscriptionManagerInterface.hpp"
7#include "rpc/Errors.hpp"
8#include "util/config/ObjectView.hpp"
9
10#include <boost/asio/io_context.hpp>
11#include <boost/asio/spawn.hpp>
12#include <boost/json/object.hpp>
13#include <boost/uuid/uuid.hpp>
14#include <grpcpp/support/status.h>
15#include <org/xrpl/rpc/v1/get_ledger.pb.h>
16
17#include <chrono>
18#include <cstdint>
19#include <expected>
20#include <functional>
21#include <memory>
22#include <optional>
23#include <string>
24#include <string_view>
25#include <utility>
26#include <vector>
27
28namespace etl {
29
34public:
35 using OnConnectHook = std::function<void()>;
36 using OnDisconnectHook = std::function<void(bool)>;
37 using OnLedgerClosedHook = std::function<void()>;
38
39 virtual ~SourceBase() = default;
40
44 virtual void
45 run() = 0;
46
53 virtual void
54 stop(boost::asio::yield_context yield) = 0;
55
61 [[nodiscard]] virtual bool
62 isConnected() const = 0;
63
69 virtual void
70 setForwarding(bool isForwarding) = 0;
71
77 [[nodiscard]] virtual boost::json::object
78 toJson() const = 0;
79
81 [[nodiscard]] virtual std::string
82 toString() const = 0;
83
90 [[nodiscard]] virtual bool
91 hasLedger(uint32_t sequence) const = 0;
92
105 [[nodiscard]] virtual std::pair<grpc::Status, org::xrpl::rpc::v1::GetLedgerResponse>
106 fetchLedger(uint32_t sequence, bool getObjects = true, bool getObjectNeighbors = false) = 0;
107
118 uint32_t sequence,
119 std::uint32_t numMarkers,
121 ) = 0;
122
132 [[nodiscard]] virtual std::expected<boost::json::object, rpc::ClioError>
134 boost::json::object const& request,
135 std::optional<std::string> const& forwardToRippledClientIp,
136 std::string_view xUserValue,
137 boost::asio::yield_context yield
138 ) const = 0;
139};
140
141using SourcePtr = std::unique_ptr<SourceBase>;
142
143using SourceFactory = std::function<SourcePtr(
144 util::config::ObjectView const& config,
145 boost::asio::io_context& ioc,
146 std::shared_ptr<feed::SubscriptionManagerInterface> subscriptions,
147 std::shared_ptr<NetworkValidatedLedgersInterface> validatedLedgers,
148 std::chrono::steady_clock::duration forwardingTimeout,
149 SourceBase::OnConnectHook onConnect,
150 SourceBase::OnDisconnectHook onDisconnect,
151 SourceBase::OnLedgerClosedHook onLedgerClosed
152)>;
153
168[[nodiscard]] SourcePtr
169makeSource(
170 util::config::ObjectView const& config,
171 boost::asio::io_context& ioc,
172 std::shared_ptr<feed::SubscriptionManagerInterface> subscriptions,
173 std::shared_ptr<NetworkValidatedLedgersInterface> validatedLedgers,
174 std::chrono::steady_clock::duration forwardingTimeout,
175 SourceBase::OnConnectHook onConnect,
176 SourceBase::OnDisconnectHook onDisconnect,
177 SourceBase::OnLedgerClosedHook onLedgerClosed
178);
179
180} // namespace etl
std::expected< std::vector< std::string >, InitialLedgerLoadError > InitialLedgerLoadResult
The result type of the initial ledger load.
Definition LoadBalancerInterface.hpp:35
Provides an implementation of a ETL source.
Definition Source.hpp:33
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 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.
virtual InitialLedgerLoadResult loadInitialLedger(uint32_t sequence, std::uint32_t numMarkers, InitialLoadObserverInterface &loader)=0
Download a ledger in full.
Provides a view into a subset of configuration data defined by a prefix.
Definition ObjectView.hpp:21
The interface for observing the initial ledger load.
Definition InitialLoadObserverInterface.hpp:17