Bitcoin Core 28.99.0
P2P Digital Currency
timeoffsets.h
Go to the documentation of this file.
1// Copyright (c) 2024-present The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_NODE_TIMEOFFSETS_H
6#define BITCOIN_NODE_TIMEOFFSETS_H
7
8#include <sync.h>
9
10#include <chrono>
11#include <cstddef>
12#include <deque>
13
14namespace node {
15class Warnings;
16} // namespace node
17
19{
20public:
21 TimeOffsets(node::Warnings& warnings) : m_warnings{warnings} {}
22
23private:
25 static constexpr size_t MAX_SIZE{50};
27 static constexpr std::chrono::minutes WARN_THRESHOLD{10};
28
29 mutable Mutex m_mutex;
32 std::deque<std::chrono::seconds> m_offsets GUARDED_BY(m_mutex){};
33
35
36public:
38 void Add(std::chrono::seconds offset) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex);
39
42 std::chrono::seconds Median() const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex);
43
47};
48
49#endif // BITCOIN_NODE_TIMEOFFSETS_H
void Add(std::chrono::seconds offset) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Add a new time offset sample.
Definition: timeoffsets.cpp:22
static constexpr size_t MAX_SIZE
Maximum number of timeoffsets stored.
Definition: timeoffsets.h:25
node::Warnings & m_warnings
Definition: timeoffsets.h:34
bool WarnIfOutOfSync() const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Raise warnings if the median time offset exceeds the warnings threshold.
Definition: timeoffsets.cpp:46
Mutex m_mutex
Definition: timeoffsets.h:29
std::chrono::seconds Median() const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Compute and return the median of the collected time offset samples.
Definition: timeoffsets.cpp:34
TimeOffsets(node::Warnings &warnings)
Definition: timeoffsets.h:21
std::deque< std::chrono::seconds > m_offsets GUARDED_BY(m_mutex)
The observed time differences between our local clock and those of our outbound peers.
Definition: timeoffsets.h:32
static constexpr std::chrono::minutes WARN_THRESHOLD
Minimum difference between system and network time for a warning to be raised.
Definition: timeoffsets.h:27
Manages warning messages within a node.
Definition: warnings.h:40
Definition: messages.h:20
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:49