mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-04-22 22:54:35 +02:00
Implementation of WriterStats for the live writer
This commit is contained in:
@@ -6,12 +6,11 @@
|
||||
#define SF_DAQ_BUFFER_FRAMESTATS_HPP
|
||||
|
||||
|
||||
class BufferStats {
|
||||
class WriterStats {
|
||||
const std::string detector_name_;
|
||||
const int module_id_;
|
||||
size_t stats_modulo_;
|
||||
|
||||
int frames_counter_;
|
||||
int image_counter_;
|
||||
uint32_t total_buffer_write_us_;
|
||||
uint32_t max_buffer_write_us_;
|
||||
std::chrono::time_point<std::chrono::steady_clock> stats_interval_start_;
|
||||
@@ -20,12 +19,11 @@ class BufferStats {
|
||||
void print_stats();
|
||||
|
||||
public:
|
||||
BufferStats(
|
||||
WriterStats(
|
||||
const std::string &detector_name,
|
||||
const int module_id,
|
||||
const size_t stats_modulo);
|
||||
void start_frame_write();
|
||||
void end_frame_write();
|
||||
void start_image_write();
|
||||
void end_image_write();
|
||||
};
|
||||
|
||||
|
||||
@@ -1,35 +1,33 @@
|
||||
#include <iostream>
|
||||
#include "BufferStats.hpp"
|
||||
#include "WriterStats.hpp"
|
||||
|
||||
using namespace std;
|
||||
using namespace chrono;
|
||||
|
||||
BufferStats::BufferStats(
|
||||
WriterStats::WriterStats(
|
||||
const string& detector_name,
|
||||
const int module_id,
|
||||
const size_t stats_modulo) :
|
||||
detector_name_(detector_name),
|
||||
module_id_(module_id),
|
||||
stats_modulo_(stats_modulo)
|
||||
{
|
||||
reset_counters();
|
||||
}
|
||||
|
||||
void BufferStats::reset_counters()
|
||||
void WriterStats::reset_counters()
|
||||
{
|
||||
frames_counter_ = 0;
|
||||
image_counter_ = 0;
|
||||
total_buffer_write_us_ = 0;
|
||||
max_buffer_write_us_ = 0;
|
||||
}
|
||||
|
||||
void BufferStats::start_frame_write()
|
||||
void WriterStats::start_image_write()
|
||||
{
|
||||
stats_interval_start_ = steady_clock::now();
|
||||
}
|
||||
|
||||
void BufferStats::end_frame_write()
|
||||
void WriterStats::end_image_write()
|
||||
{
|
||||
frames_counter_++;
|
||||
image_counter_++;
|
||||
|
||||
uint32_t write_us_duration = duration_cast<microseconds>(
|
||||
steady_clock::now()-stats_interval_start_).count();
|
||||
@@ -37,15 +35,15 @@ void BufferStats::end_frame_write()
|
||||
total_buffer_write_us_ += write_us_duration;
|
||||
max_buffer_write_us_ = max(max_buffer_write_us_, write_us_duration);
|
||||
|
||||
if (frames_counter_ == stats_modulo_) {
|
||||
if (image_counter_ == stats_modulo_) {
|
||||
print_stats();
|
||||
reset_counters();
|
||||
}
|
||||
}
|
||||
|
||||
void BufferStats::print_stats()
|
||||
void WriterStats::print_stats()
|
||||
{
|
||||
float avg_buffer_write_us = total_buffer_write_us_ / frames_counter_;
|
||||
float avg_buffer_write_us = total_buffer_write_us_ / image_counter_;
|
||||
|
||||
uint64_t timestamp = time_point_cast<nanoseconds>(
|
||||
system_clock::now()).time_since_epoch().count();
|
||||
@@ -53,9 +51,9 @@ void BufferStats::print_stats()
|
||||
// Output in InfluxDB line protocol
|
||||
cout << "jf_buffer_writer";
|
||||
cout << ",detector_name=" << detector_name_;
|
||||
cout << ",module_name=M" << module_id_;
|
||||
cout << " ";
|
||||
cout << "avg_buffer_write_us=" << avg_buffer_write_us;
|
||||
cout << "n_written_images=" << image_counter_ << "i";
|
||||
cout << " ,avg_buffer_write_us=" << avg_buffer_write_us;
|
||||
cout << ",max_buffer_write_us=" << max_buffer_write_us_ << "i";
|
||||
cout << " ";
|
||||
cout << timestamp;
|
||||
Reference in New Issue
Block a user