LCOV - code coverage report
Current view: top level - source/common/stats - recent_lookups.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 1 7 14.3 %
Date: 2024-01-05 06:35:25 Functions: 1 3 33.3 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <functional>
       4             : #include <list>
       5             : #include <utility>
       6             : 
       7             : #include "absl/container/flat_hash_map.h"
       8             : #include "absl/strings/string_view.h"
       9             : 
      10             : namespace Envoy {
      11             : namespace Stats {
      12             : 
      13             : // Remembers the last 'Capacity' items passed to lookup().
      14             : class RecentLookups {
      15             : public:
      16             :   /**
      17             :    * Records a lookup of a string. Only the last 'Capacity' lookups are remembered.
      18             :    *
      19             :    * @param str the item being looked up.
      20             :    */
      21             :   void lookup(absl::string_view str);
      22             : 
      23             :   using IterFn = std::function<void(absl::string_view, uint64_t)>;
      24             : 
      25             :   /**
      26             :    * Calls fn(item, count) for each of the remembered lookups.
      27             :    *
      28             :    * @param fn The function to call for every recently looked up item.
      29             :    */
      30             :   void forEach(const IterFn& fn) const;
      31             : 
      32             :   /**
      33             :    * @return the total number of lookups since tracking began.
      34             :    */
      35         205 :   uint64_t total() const { return total_; }
      36             : 
      37             :   /**
      38             :    * Clears out all contents.
      39             :    */
      40           0 :   void clear() {
      41           0 :     total_ = 0;
      42           0 :     map_.clear();
      43           0 :     list_.clear();
      44           0 :   }
      45             : 
      46             :   /**
      47             :    * Controls the maximum number of recent lookups to remember. If set to 0,
      48             :    * then only lookup counts is tracked.
      49             :    * @param capacity The number of lookups to remember.
      50             :    */
      51             :   void setCapacity(uint64_t capacity);
      52             : 
      53             :   /**
      54             :    * @return The configured capacity.
      55             :    */
      56           0 :   uint64_t capacity() const { return capacity_; }
      57             : 
      58             : private:
      59             :   void evictOne();
      60             : 
      61             :   struct ItemCount {
      62             :     std::string item_;
      63             :     uint64_t count_;
      64             :   };
      65             :   using List = std::list<ItemCount>;
      66             :   List list_;
      67             : 
      68             :   // TODO(jmarantz): we could make this more compact by making this a set of
      69             :   // list-iterators with heterogeneous hash/compare functors.
      70             :   using Map = absl::flat_hash_map<absl::string_view, List::iterator>;
      71             :   Map map_;
      72             :   uint64_t total_{0};
      73             :   uint64_t capacity_{0};
      74             : };
      75             : 
      76             : } // namespace Stats
      77             : } // namespace Envoy

Generated by: LCOV version 1.15