feat add spdlog
Some checks failed
sm-rpc / build (Debug, aarch64-linux-gnu) (push) Failing after 29s
sm-rpc / build (Debug, arm-linux-gnueabihf) (push) Failing after 16s
sm-rpc / build (Debug, host.gcc) (push) Failing after 11s
sm-rpc / build (Debug, mipsel-linux-gnu) (push) Failing after 12s
sm-rpc / build (Release, aarch64-linux-gnu) (push) Failing after 11s
sm-rpc / build (Release, arm-linux-gnueabihf) (push) Failing after 11s
sm-rpc / build (Release, host.gcc) (push) Failing after 12s
sm-rpc / build (Release, mipsel-linux-gnu) (push) Failing after 16s

This commit is contained in:
tqcq
2025-08-22 18:22:57 +08:00
parent 3d395b45f0
commit c68893bace
2331 changed files with 1306786 additions and 103 deletions

52
src/breakpad_test.cc Normal file
View File

@@ -0,0 +1,52 @@
#include "client/linux/crash_generation/crash_generation_server.h"
#include "client/linux/handler/exception_handler.h"
#include "client/linux/handler/minidump_descriptor.h"
#include <sys/stat.h>
#include <sys/wait.h>
void OnClientDumpRequestCallback(void *context, const google_breakpad::ClientInfo *client_info, const string *file_path)
{
printf("dump to: %s\n", file_path->c_str());
}
bool CrashCallback(const google_breakpad::MinidumpDescriptor &descriptor, void *context, bool succeeded)
{
printf("dump to: %s\n", descriptor.path());
return succeeded;
}
void crash()
{
int *a = nullptr;
*a = 1;
}
int main()
{
int server_fd;
int client_fd;
std::string dump_path = ".";
google_breakpad::CrashGenerationServer::CreateReportChannel(&server_fd, &client_fd);
pid_t pid = fork();
if (pid > 0)
{
close(client_fd);
printf("Server \n");
google_breakpad::CrashGenerationServer server(server_fd, OnClientDumpRequestCallback, nullptr, nullptr, nullptr,
true, &dump_path);
server.Start();
int status = 0;
waitpid(pid, &status, 0);
server.Stop();
}
else
{
close(server_fd);
printf("Client\n");
google_breakpad::MinidumpDescriptor descriptor(server_fd);
google_breakpad::ExceptionHandler h(descriptor, nullptr, CrashCallback, nullptr, true, client_fd);
printf("Client crash\n");
crash();
}
return 0;
}

View File

@@ -1,10 +1,12 @@
#include "calc.h"
#include <benchmark/benchmark.h>
static void
BM_Add(benchmark::State &state)
static void BM_Add(benchmark::State &state)
{
while (state.KeepRunning()) { Add(1, 2); }
while (state.KeepRunning())
{
Add(1, 2);
}
}
BENCHMARK(BM_Add);

67
src/metric_server.cc Normal file
View File

@@ -0,0 +1,67 @@
#include <prometheus/counter.h>
#include <prometheus/exposer.h>
#include <prometheus/registry.h>
#include <array>
#include <chrono>
#include <cstdlib>
#include <memory>
#include <string>
#include <thread>
int main()
{
using namespace prometheus;
// create an http server running on port 8080
Exposer exposer{"127.0.0.1:8080"};
// create a metrics registry
// @note it's the users responsibility to keep the object alive
auto registry = std::make_shared<Registry>();
// add a new counter family to the registry (families combine values with the
// same name, but distinct label dimensions)
//
// @note please follow the metric-naming best-practices:
// https://prometheus.io/docs/practices/naming/
auto &packet_counter =
BuildCounter().Name("observed_packets_total").Help("Number of observed packets").Register(*registry);
// add and remember dimensional data, incrementing those is very cheap
auto &tcp_rx_counter = packet_counter.Add({{"protocol", "tcp"}, {"direction", "rx"}});
auto &tcp_tx_counter = packet_counter.Add({{"protocol", "tcp"}, {"direction", "tx"}});
auto &udp_rx_counter = packet_counter.Add({{"protocol", "udp"}, {"direction", "rx"}});
auto &udp_tx_counter = packet_counter.Add({{"protocol", "udp"}, {"direction", "tx"}});
// add a counter whose dimensional data is not known at compile time
// nevertheless dimensional values should only occur in low cardinality:
// https://prometheus.io/docs/practices/naming/#labels
auto &http_requests_counter =
BuildCounter().Name("http_requests_total").Help("Number of HTTP requests").Register(*registry);
// ask the exposer to scrape the registry on incoming HTTP requests
exposer.RegisterCollectable(registry);
for (;;)
{
std::this_thread::sleep_for(std::chrono::seconds(1));
const auto random_value = std::rand();
if (random_value & 1)
tcp_rx_counter.Increment();
if (random_value & 2)
tcp_tx_counter.Increment();
if (random_value & 4)
udp_rx_counter.Increment();
if (random_value & 8)
udp_tx_counter.Increment();
const std::array<std::string, 4> methods = {"GET", "PUT", "POST", "HEAD"};
auto method = methods.at(random_value % methods.size());
// dynamically calling Family<T>.Add() works but is slow and should be
// avoided
http_requests_counter.Add({{"method", method}}).Increment();
}
return 0;
}