1
#pragma once
2

            
3
#include "envoy/extensions/resource_monitors/downstream_connections/v3/downstream_connections.pb.h"
4
#include "envoy/server/proactive_resource_monitor.h"
5

            
6
#include "source/common/common/thread_synchronizer.h"
7

            
8
namespace Envoy {
9
namespace Extensions {
10
namespace ResourceMonitors {
11
namespace DownstreamConnections {
12

            
13
class ActiveDownstreamConnectionsResourceMonitor : public Server::ProactiveResourceMonitor {
14
public:
15
  ActiveDownstreamConnectionsResourceMonitor(
16
      const envoy::extensions::resource_monitors::downstream_connections::v3::
17
          DownstreamConnectionsConfig& config);
18

            
19
  bool tryAllocateResource(int64_t increment) override;
20

            
21
  bool tryDeallocateResource(int64_t decrement) override;
22

            
23
  int64_t currentResourceUsage() const override;
24
  int64_t maxResourceUsage() const override;
25

            
26
protected:
27
  const int64_t max_;
28
  std::atomic<int64_t> current_;
29
  // Used for testing only.
30
  mutable Thread::ThreadSynchronizer synchronizer_;
31

            
32
  friend class ActiveDownstreamConnectionsMonitorTest;
33
};
34

            
35
} // namespace DownstreamConnections
36
} // namespace ResourceMonitors
37
} // namespace Extensions
38
} // namespace Envoy