1
#pragma once
2

            
3
#include "envoy/extensions/resource_monitors/fixed_heap/v3/fixed_heap.pb.h"
4
#include "envoy/server/resource_monitor.h"
5

            
6
namespace Envoy {
7
namespace Extensions {
8
namespace ResourceMonitors {
9
namespace FixedHeapMonitor {
10

            
11
/**
12
 * Helper class for getting memory heap stats.
13
 */
14
class MemoryStatsReader {
15
public:
16
5
  MemoryStatsReader() = default;
17
5
  virtual ~MemoryStatsReader() = default;
18

            
19
  // Memory reserved for the process by the heap.
20
  virtual uint64_t reservedHeapBytes();
21
  // Memory in free, unmapped pages in the page heap.
22
  virtual uint64_t unmappedHeapBytes();
23
  // Memory in free, mapped pages in the page heap.
24
  virtual uint64_t freeMappedHeapBytes();
25
  // Memory currently allocated by the process.
26
  virtual uint64_t allocatedHeapBytes();
27
};
28

            
29
/**
30
 * Heap memory monitor with a statically configured maximum.
31
 */
32
class FixedHeapMonitor : public Server::ResourceMonitor {
33
public:
34
  FixedHeapMonitor(
35
      const envoy::extensions::resource_monitors::fixed_heap::v3::FixedHeapConfig& config,
36
      std::unique_ptr<MemoryStatsReader> stats = std::make_unique<MemoryStatsReader>());
37

            
38
  void updateResourceUsage(Server::ResourceUpdateCallbacks& callbacks) override;
39

            
40
private:
41
  const uint64_t max_heap_;
42
  std::unique_ptr<MemoryStatsReader> stats_;
43
};
44

            
45
} // namespace FixedHeapMonitor
46
} // namespace ResourceMonitors
47
} // namespace Extensions
48
} // namespace Envoy