5 #include "util/uring/varz.h" 12 VarzValue VarzQps::GetData()
const {
14 uint32_t qps = val_.SumTail() / (Counter::WIN_SIZE - 1);
15 return VarzValue::FromInt(qps);
18 VarzMapAverage::~VarzMapAverage() {}
20 void VarzMapAverage::Init(ProactorPool* pp) {
21 CHECK(pp_ ==
nullptr);
22 pp_ = CHECK_NOTNULL(pp);
23 avg_map_.reset(
new Map[pp->size()]);
26 unsigned VarzMapAverage::ProactorThreadIndex()
const {
27 unsigned tnum = CHECK_NOTNULL(pp_)->size();
29 int32_t indx = Proactor::GetIndex();
30 CHECK_GE(indx, 0) <<
"Must be called from proactor thread!";
31 CHECK_LT(indx, tnum) <<
"Invalid thread index " << indx;
33 return unsigned(indx);
36 auto VarzMapAverage::FindSlow(absl::string_view key) -> Map::iterator {
37 auto str = pp_->GetString(key);
38 auto& map = avg_map_[Proactor::GetIndex()];
39 auto res = map.emplace(str, SumCnt{});
45 VarzValue VarzMapAverage::GetData()
const {
51 auto cb = [&](
unsigned index, Proactor*) {
52 auto& map = avg_map_[index];
54 for (
const auto& k_v : map) {
56 int64 count = k_v.second.second.Sum();
57 int64 sum = k_v.second.first.Sum();
58 items.emplace_back(
"count", VarzValue::FromInt(count));
59 items.emplace_back(
"sum", VarzValue::FromInt(sum));
62 double avg = count > 0 ? double(sum) / count : 0;
63 items.emplace_back(
"average", VarzValue::FromDouble(avg));
66 std::unique_lock<fibers::mutex> lk(mu);
67 result.emplace_back(std::string(k_v.first), std::move(items));
70 pp_->AwaitFiberOnAll(cb);