transmission/libtransmission/stats.h

74 lines
1.7 KiB
C
Raw Normal View History

// This file Copyright © Mnemosyne LLC.
2022-08-08 18:05:39 +00:00
// It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only),
// or any future license endorsed by Mnemosyne LLC.
// License text can be found in the licenses/ folder.
#pragma once
#ifndef __TRANSMISSION__
#error only libtransmission should #include this header.
#endif
2022-08-17 16:08:36 +00:00
#include <cstdint>
2022-07-28 23:56:40 +00:00
#include <ctime>
#include <string>
#include <string_view>
2023-07-08 15:24:03 +00:00
#include "libtransmission/transmission.h" // for tr_session_stats
2022-07-28 23:56:40 +00:00
// per-session data structure for bandwidth use statistics
class tr_stats
{
public:
tr_stats(std::string_view config_dir, time_t now)
: config_dir_{ config_dir }
, start_time_{ now }
{
single_.sessionCount = 1;
old_ = load_old_stats(config_dir_);
2022-07-28 23:56:40 +00:00
}
~tr_stats()
{
save();
2022-07-28 23:56:40 +00:00
}
void clear();
[[nodiscard]] tr_session_stats current() const;
[[nodiscard]] auto cumulative() const
{
return add(current(), old_);
}
constexpr void add_uploaded(uint32_t n_bytes) noexcept
2022-07-28 23:56:40 +00:00
{
single_.uploadedBytes += n_bytes;
}
constexpr void add_downloaded(uint32_t n_bytes) noexcept
2022-07-28 23:56:40 +00:00
{
single_.downloadedBytes += n_bytes;
}
constexpr void add_file_created() noexcept
2022-07-28 23:56:40 +00:00
{
++single_.filesAdded;
}
void save() const;
2022-07-28 23:56:40 +00:00
private:
2022-08-04 13:44:18 +00:00
static tr_session_stats add(tr_session_stats const& a, tr_session_stats const& b);
2022-07-28 23:56:40 +00:00
static tr_session_stats load_old_stats(std::string_view config_dir);
2022-07-28 23:56:40 +00:00
std::string const config_dir_;
time_t start_time_;
static constexpr auto Zero = tr_session_stats{ TR_RATIO_NA, 0U, 0U, 0U, 0U, 0U };
tr_session_stats single_ = Zero;
tr_session_stats old_ = Zero;
};