Clio
develop
The XRP Ledger API server.
Theme:
Default
Round
Robot
Toggle main menu visibility
Loading...
Searching...
No Matches
ResponseExpirationCache.hpp
1
#pragma once
2
3
#include "util/Mutex.hpp"
4
5
#include <boost/json/object.hpp>
6
7
#include <chrono>
8
#include <optional>
9
#include <shared_mutex>
10
#include <string>
11
#include <unordered_map>
12
#include <unordered_set>
13
14
namespace
util
{
15
19
class
ResponseExpirationCache
{
23
class
Entry {
24
std::chrono::steady_clock::time_point lastUpdated_;
25
std::optional<boost::json::object> response_;
26
27
public
:
33
void
34
put
(boost::json::object response);
35
41
[[nodiscard]] std::optional<boost::json::object>
42
get
()
const
;
43
49
[[nodiscard]] std::chrono::steady_clock::time_point
50
lastUpdated()
const
;
51
55
void
56
invalidate
();
57
};
58
59
std::chrono::steady_clock::duration cacheTimeout_;
60
std::unordered_map<std::string, util::Mutex<Entry, std::shared_mutex>> cache_;
61
62
bool
63
shouldCache(std::string
const
& cmd);
64
75
static
bool
76
isBareRequest(boost::json::object
const
& request);
77
78
public
:
85
ResponseExpirationCache
(
86
std::chrono::steady_clock::duration cacheTimeout,
87
std::unordered_set<std::string>
const
& cmds
88
)
89
: cacheTimeout_(cacheTimeout)
90
{
91
for
(
auto
const
& command : cmds) {
92
cache_.emplace(command, Entry{});
93
}
94
}
95
106
[[nodiscard]] std::optional<boost::json::object>
107
get
(std::string
const
& cmd, boost::json::object
const
& request)
const
;
108
119
void
120
put
(std::string
const
& cmd,
121
boost::json::object
const
& request,
122
boost::json::object
const
& response);
123
127
void
128
invalidate
();
129
};
130
131
}
// namespace util
util::ResponseExpirationCache::invalidate
void invalidate()
Invalidate all entries in the cache.
Definition
ResponseExpirationCache.cpp:109
util::ResponseExpirationCache::get
std::optional< boost::json::object > get(std::string const &cmd, boost::json::object const &request) const
Get a response from the cache.
Definition
ResponseExpirationCache.cpp:73
util::ResponseExpirationCache::ResponseExpirationCache
ResponseExpirationCache(std::chrono::steady_clock::duration cacheTimeout, std::unordered_set< std::string > const &cmds)
Construct a new Cache object.
Definition
ResponseExpirationCache.hpp:85
util::ResponseExpirationCache::put
void put(std::string const &cmd, boost::json::object const &request, boost::json::object const &response)
Put a response into the cache if the request should be cached.
Definition
ResponseExpirationCache.cpp:90
util
This namespace contains various utilities.
Definition
HandlerRegistry.hpp:24
src
util
ResponseExpirationCache.hpp
Generated by
1.17.0