Clio  develop
The XRP Ledger API server.
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
14namespace util {
15
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
78public:
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
void invalidate()
Invalidate all entries in the cache.
Definition ResponseExpirationCache.cpp:112
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:76
ResponseExpirationCache(std::chrono::steady_clock::duration cacheTimeout, std::unordered_set< std::string > const &cmds)
Construct a new Cache object.
Definition ResponseExpirationCache.hpp:85
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:93
This namespace contains various utilities.
Definition AccountUtils.hpp:11