adbase 度量工具库 (使用方法见该模块的描述信息)
More...
adbase 度量工具库 (使用方法见该模块的描述信息)
- 使用方法
- Note
- 请勿直接引用对应头文件,adbase::Metric 模块统一引用<adbase/Metrics.hpp> 文件
- Example for gauges
- Example for gauges all code
#include <signal.h>
void test(void*) {
if (metrics != nullptr) {
std::unordered_map<std::string, int64_t> values = metrics->
getGauges();
for (auto &t : values) {
LOG_INFO << t.first <<
" -> " << t.second;
}
}
}
static void killSignal(const int sig) {
(void)sig;
if (gloop != nullptr) {
delete gloop;
gloop = nullptr;
}
exit(0);
}
static void reloadConf(const int sig) {
(void)sig;
}
static void registerSignal() {
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, killSignal);
signal(SIGKILL, killSignal);
signal(SIGQUIT, killSignal);
signal(SIGTERM, killSignal);
signal(SIGHUP, killSignal);
signal(SIGSEGV, killSignal);
signal(SIGUSR1, reloadConf);
}
int main(void) {
registerSignal();
gloop = eventloop;
uint32_t interval = 1000;
timer.runEvery(interval, std::bind(test, std::placeholders::_1), nullptr);
return 100;
});
return 0;
}
- Example for Counter
- Example for Counter all code
#include <signal.h>
void test(void*) {
if (metrics != nullptr) {
std::unordered_map<std::string, int64_t> values = metrics->
getCounter();
for (auto &t : values) {
LOG_INFO << t.first <<
" -> " << t.second;
}
}
}
static void killSignal(const int sig) {
(void)sig;
if (gloop != nullptr) {
delete gloop;
gloop = nullptr;
}
exit(0);
}
static void reloadConf(const int sig) {
(void)sig;
}
static void registerSignal() {
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, killSignal);
signal(SIGKILL, killSignal);
signal(SIGQUIT, killSignal);
signal(SIGTERM, killSignal);
signal(SIGHUP, killSignal);
signal(SIGSEGV, killSignal);
signal(SIGUSR1, reloadConf);
}
int main(void) {
registerSignal();
gloop = eventloop;
uint32_t interval = 1000;
timer.
runEvery(interval, std::bind(test, std::placeholders::_1),
nullptr);
if (counter != nullptr) {
}
return 0;
}
- Example for Meters
- Example for Meters all code
#include <signal.h>
void test(void*) {
if (metrics != nullptr) {
std::unordered_map<std::string, adbase::metrics::MeterItem> values = metrics->
getMeters();
for (auto &t : values) {
LOG_INFO <<
"\tcount = " << t.second.count;
LOG_INFO <<
"\tmean rate = " << t.second.meanRate;
LOG_INFO <<
"\t1-minute rate = " << t.second.min1Rate;
LOG_INFO <<
"\t5-minute rate = " << t.second.min5Rate;
LOG_INFO <<
"\t15-minute rate = " << t.second.min15Rate;
}
}
int num = rand() % 1000;
for (int i = 0; i < num; i++) {
if (meters != nullptr) {
}
}
}
static void killSignal(const int sig) {
(void)sig;
if (gloop != nullptr) {
delete gloop;
gloop = nullptr;
}
exit(0);
}
static void reloadConf(const int sig) {
(void)sig;
}
static void registerSignal() {
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, killSignal);
signal(SIGKILL, killSignal);
signal(SIGQUIT, killSignal);
signal(SIGTERM, killSignal);
signal(SIGHUP, killSignal);
signal(SIGSEGV, killSignal);
signal(SIGUSR1, reloadConf);
}
int main(void) {
registerSignal();
gloop = eventloop;
uint32_t interval = 1000;
timer.runEvery(interval, std::bind(test, std::placeholders::_1), nullptr);
return 0;
}
- Example for Histograms
- Example for Histograms all code
#include <signal.h>
void test(void*) {
if (metrics != nullptr) {
std::unordered_map<std::string, adbase::metrics::HistogramsItem> values = metrics->
getHistograms();
for (auto &t : values) {
LOG_INFO <<
"\tmean = " << t.second.mean;
LOG_INFO <<
"\tstddev = " << t.second.stddev;
LOG_INFO <<
"\tmedian = " << t.second.median;
LOG_INFO <<
"\t75% <= " << t.second.percent75;
LOG_INFO <<
"\t95% <= " << t.second.percent95;
LOG_INFO <<
"\t98% <= " << t.second.percent98;
LOG_INFO <<
"\t99% <= " << t.second.percent99;
LOG_INFO <<
"\t99.9% <= " << t.second.percent999;
}
}
for (int i = 0; i < 10000; i++) {
if (histograms != nullptr) {
histograms->
update(rand() % 1000);
}
}
}
static void killSignal(const int sig) {
(void)sig;
if (gloop != nullptr) {
delete gloop;
gloop = nullptr;
}
exit(0);
}
static void reloadConf(const int sig) {
(void)sig;
}
static void registerSignal() {
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, killSignal);
signal(SIGKILL, killSignal);
signal(SIGQUIT, killSignal);
signal(SIGTERM, killSignal);
signal(SIGHUP, killSignal);
signal(SIGSEGV, killSignal);
signal(SIGUSR1, reloadConf);
}
int main(void) {
registerSignal();
gloop = eventloop;
uint32_t interval = 1000;
timer.runEvery(interval, std::bind(test, std::placeholders::_1), nullptr);
return 0;
}
- Example for Timers
- Example for Timers all code
#include <signal.h>
void test1(void*) {
while(true) {
int num = rand() % 10000;
for (int i = 0; i < num; i++) {
if (timers != nullptr) {
std::this_thread::sleep_for(std::chrono::milliseconds(rand() % 2));
}
}
}
}
void test(void*) {
if (metrics != nullptr) {
std::unordered_map<std::string, adbase::metrics::TimersItem> values = metrics->
getTimers();
for (auto &t : values) {
LOG_INFO <<
"\tcount = " << t.second.meter.count;
LOG_INFO <<
"\tmean rate = " << t.second.meter.meanRate;
LOG_INFO <<
"\t1-minute rate = " << t.second.meter.min1Rate;
LOG_INFO <<
"\t5-minute rate = " << t.second.meter.min5Rate;
LOG_INFO <<
"\t15-minute rate = " << t.second.meter.min15Rate;
LOG_INFO <<
"\tmin = " << t.second.histogram.min;
LOG_INFO <<
"\tmax = " << t.second.histogram.max;
LOG_INFO <<
"\tmean = " << t.second.histogram.mean;
LOG_INFO <<
"\tstddev = " << t.second.histogram.stddev;
LOG_INFO <<
"\tmedian = " << t.second.histogram.median;
LOG_INFO <<
"\t75% <= " << t.second.histogram.percent75;
LOG_INFO <<
"\t95% <= " << t.second.histogram.percent95;
LOG_INFO <<
"\t98% <= " << t.second.histogram.percent98;
LOG_INFO <<
"\t99% <= " << t.second.histogram.percent99;
LOG_INFO <<
"\t99.9% <= " << t.second.histogram.percent999;
}
}
}
static void killSignal(const int sig) {
(void)sig;
if (gloop != nullptr) {
delete gloop;
gloop = nullptr;
}
exit(0);
}
static void reloadConf(const int sig) {
(void)sig;
}
static void registerSignal() {
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, killSignal);
signal(SIGKILL, killSignal);
signal(SIGQUIT, killSignal);
signal(SIGTERM, killSignal);
signal(SIGHUP, killSignal);
signal(SIGSEGV, killSignal);
signal(SIGUSR1, reloadConf);
}
int main(void) {
registerSignal();
gloop = eventloop;
uint32_t interval = 1000;
timer.runEvery(interval, std::bind(test, std::placeholders::_1), nullptr);
std::thread* t = new std::thread(std::bind(test1, std::placeholders::_1), nullptr);
t->join();
return 0;
}