mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
b559a8f904
* Backport Statoshi This backports some of https://github.com/jlopp/statoshi. Missing stuff: README.md and client name changes, segwit and fee estimation stats. Fix RejectCodeToString Fix copy-paste mistake s/InvalidBlockFound/InvalidChainFound/ * Merge #16728: move-only: move coins statistics utils out of RPC 8a3b2eb17572ca2131778d52cc25ec359470a90f move-only: move coins statistics utils out of RPC (James O'Beirne) Pull request description: This is part of the [assumeutxo project](https://github.com/bitcoin/bitcoin/projects/11): Parent PR: #15606 Issue: #15605 Specification: https://github.com/jamesob/assumeutxo-docs/tree/master/proposal --- In the short-term, this move-only commit will help with fuzzing (https://github.com/bitcoin/bitcoin/pull/15606#issuecomment-524482297). Later, these procedures will be used to compute statistics (particularly a content hash) for UTXO sets coming in from snapshots. Most easily reviewed with `git ... --color-moved=dimmed_zebra`. A nice follow-up would be adding unittests, which I'll do if nobody else gets around to it. ACKs for top commit: MarcoFalke: ACK 8a3b2eb17572ca2131778d52cc25ec359470a90f, checked --color-moved=dimmed-zebra Tree-SHA512: a187d2f7590ad2450b8e8fa3d038c80a04fc3d903618c24222d7e3172250ce51badea35860c86101f2ba266eb4354e6efb8d7d508b353f29276e4665a1efdf74 * Fix 16728 * Modernize StatsdClient - Reuse some functionality from netbase - Switch from GetRand to FastRandomContext - Drop `using namespace std` and add `// namespace statsd` * Introduce PeriodicStats and make StatsdClient configurable via -stats<smth> (enabled/host/port/ns/period) * Move/rename tip stats from CheckBlock to ConnectBlock * Add new false positives to lint-format-strings.py * Add snprintf in statsd_client to the list of known violations in lint-locale-dependence.sh * Fix incorrect include guard * Use bracket syntax includes * Replace magic numbers with defaults * Move connection stats calculation into its own function And bail out early if stats are disabled * assert in PeriodicStats Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com> Co-authored-by: MarcoFalke <falke.marco@gmail.com> Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
67 lines
2.2 KiB
C++
67 lines
2.2 KiB
C++
#ifndef BITCOIN_STATSD_CLIENT_H
|
|
#define BITCOIN_STATSD_CLIENT_H
|
|
|
|
#include <string>
|
|
|
|
static const bool DEFAULT_STATSD_ENABLE = false;
|
|
static const int DEFAULT_STATSD_PORT = 8125;
|
|
static const std::string DEFAULT_STATSD_HOST = "127.0.0.1";
|
|
static const std::string DEFAULT_STATSD_HOSTNAME = "";
|
|
static const std::string DEFAULT_STATSD_NAMESPACE = "";
|
|
|
|
// schedule periodic measurements, in seconds: default - 1 minute, min - 5 sec, max - 1h.
|
|
static const int DEFAULT_STATSD_PERIOD = 60;
|
|
static const int MIN_STATSD_PERIOD = 5;
|
|
static const int MAX_STATSD_PERIOD = 60 * 60;
|
|
|
|
namespace statsd {
|
|
|
|
struct _StatsdClientData;
|
|
|
|
class StatsdClient {
|
|
public:
|
|
StatsdClient(const std::string& host = DEFAULT_STATSD_HOST, int port = DEFAULT_STATSD_PORT, const std::string& ns = DEFAULT_STATSD_NAMESPACE);
|
|
~StatsdClient();
|
|
|
|
public:
|
|
// you can config at anytime; client will use new address (useful for Singleton)
|
|
void config(const std::string& host, int port, const std::string& ns = DEFAULT_STATSD_NAMESPACE);
|
|
const char* errmsg();
|
|
|
|
public:
|
|
int inc(const std::string& key, float sample_rate = 1.0);
|
|
int dec(const std::string& key, float sample_rate = 1.0);
|
|
int count(const std::string& key, size_t value, float sample_rate = 1.0);
|
|
int gauge(const std::string& key, size_t value, float sample_rate = 1.0);
|
|
int gaugeDouble(const std::string& key, double value, float sample_rate = 1.0);
|
|
int timing(const std::string& key, size_t ms, float sample_rate = 1.0);
|
|
|
|
public:
|
|
/**
|
|
* (Low Level Api) manually send a message
|
|
* which might be composed of several lines.
|
|
*/
|
|
int send(const std::string& message);
|
|
|
|
/* (Low Level Api) manually send a message
|
|
* type = "c", "g" or "ms"
|
|
*/
|
|
int send(std::string key, size_t value,
|
|
const std::string& type, float sample_rate);
|
|
int sendDouble(std::string key, double value,
|
|
const std::string& type, float sample_rate);
|
|
|
|
protected:
|
|
int init();
|
|
void cleanup(std::string& key);
|
|
|
|
protected:
|
|
struct _StatsdClientData* d;
|
|
};
|
|
|
|
}; // namespace statsd
|
|
|
|
extern statsd::StatsdClient statsClient;
|
|
|
|
#endif // BITCOIN_STATSD_CLIENT_H
|