]>
git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/dnsdist-rings.cc
4 unsigned int Rings::numDistinctRequestors()
6 std::set
<ComboAddress
, ComboAddress::addressOnlyLessThan
> s
;
7 WriteLock
wl(&queryLock
);
8 for(const auto& q
: queryRing
)
13 vector
<pair
<unsigned int,ComboAddress
> > Rings::getTopBandwidth(unsigned int numentries
)
15 map
<ComboAddress
, unsigned int, ComboAddress::addressOnlyLessThan
> counts
;
17 WriteLock
wl(&queryLock
);
18 for(const auto& q
: queryRing
)
19 counts
[q
.requestor
]+=q
.size
;
23 std::lock_guard
<std::mutex
> lock(respMutex
);
24 for(const auto& r
: respRing
)
25 counts
[r
.requestor
]+=r
.size
;
28 typedef vector
<pair
<unsigned int, ComboAddress
>> ret_t
;
30 for(const auto& p
: counts
)
31 ret
.push_back({p
.second
, p
.first
});
32 numentries
= ret
.size() < numentries
? ret
.size() : numentries
;
33 partial_sort(ret
.begin(), ret
.begin()+numentries
, ret
.end(), [](const ret_t::value_type
&a
, const ret_t::value_type
&b
)
35 return(b
.second
< a
.second
);
37 ret
.resize(numentries
);