1
#pragma once
2

            
3
#include <atomic>
4
#include <memory>
5
#include <string>
6

            
7
#include "envoy/extensions/common/dynamic_forward_proxy/v3/dns_cache.pb.h"
8
#include "envoy/runtime/runtime.h"
9
#include "envoy/stats/scope.h"
10
#include "envoy/stats/stats_macros.h"
11
#include "envoy/upstream/resource_manager.h"
12

            
13
#include "source/common/common/assert.h"
14
#include "source/common/common/basic_resource_impl.h"
15
#include "source/common/upstream/resource_manager_impl.h"
16
#include "source/extensions/common/dynamic_forward_proxy/dns_cache.h"
17

            
18
namespace Envoy {
19
namespace Extensions {
20
namespace Common {
21
namespace DynamicForwardProxy {
22

            
23
class DnsCacheResourceManagerImpl : public DnsCacheResourceManager {
24
public:
25
  DnsCacheResourceManagerImpl(
26
      Stats::Scope& scope, Runtime::Loader& loader, const std::string& config_name,
27
      const envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheCircuitBreakers&
28
          cb_config);
29

            
30
  static DnsCacheCircuitBreakersStats generateDnsCacheCircuitBreakersStats(Stats::Scope& scope);
31
  // Envoy::Upstream::DnsCacheResourceManager
32
99
  ResourceLimit& pendingRequests() override { return pending_requests_; }
33
2
  DnsCacheCircuitBreakersStats& stats() override { return cb_stats_; }
34

            
35
private:
36
  DnsCacheCircuitBreakersStats cb_stats_;
37
  Upstream::ManagedResourceImpl pending_requests_;
38
};
39

            
40
} // namespace DynamicForwardProxy
41
} // namespace Common
42
} // namespace Extensions
43
} // namespace Envoy