1
#pragma once
2

            
3
#include "envoy/api/api.h"
4
#include "envoy/common/pure.h"
5
#include "envoy/config/typed_config.h"
6
#include "envoy/event/dispatcher.h"
7
#include "envoy/protobuf/message_validator.h"
8
#include "envoy/server/options.h"
9
#include "envoy/server/proactive_resource_monitor.h"
10
#include "envoy/server/resource_monitor.h"
11

            
12
#include "source/common/protobuf/protobuf.h"
13

            
14
namespace Envoy {
15
namespace Server {
16
namespace Configuration {
17

            
18
class ResourceMonitorFactoryContext {
19
public:
20
17
  virtual ~ResourceMonitorFactoryContext() = default;
21

            
22
  /**
23
   * @return Event::Dispatcher& the main thread's dispatcher. This dispatcher should be used
24
   *         for all singleton processing.
25
   */
26
  virtual Event::Dispatcher& mainThreadDispatcher() PURE;
27

            
28
  /**
29
   * @return Server::Options& the command-line options that Envoy was started with.
30
   */
31
  virtual const Options& options() PURE;
32

            
33
  /**
34
   * @return reference to the Api object
35
   */
36
  virtual Api::Api& api() PURE;
37

            
38
  /**
39
   * @return ProtobufMessage::ValidationVisitor& validation visitor for filter configuration
40
   *         messages.
41
   */
42
  virtual ProtobufMessage::ValidationVisitor& messageValidationVisitor() PURE;
43
};
44

            
45
/**
46
 * Implemented by each resource monitor and registered via Registry::registerFactory()
47
 * or the convenience class RegistryFactory.
48
 */
49
class ResourceMonitorFactory : public Config::TypedFactory {
50
public:
51
350
  ~ResourceMonitorFactory() override = default;
52

            
53
  /**
54
   * Create a particular resource monitor implementation.
55
   * @param config const ProtoBuf::Message& supplies the config for the resource monitor
56
   *        implementation.
57
   * @param context ResourceMonitorFactoryContext& supplies the resource monitor's context.
58
   * @return ResourceMonitorPtr the resource monitor instance. Should not be nullptr.
59
   * @throw EnvoyException if the implementation is unable to produce an instance with
60
   *        the provided parameters.
61
   */
62
  virtual ResourceMonitorPtr createResourceMonitor(const Protobuf::Message& config,
63
                                                   ResourceMonitorFactoryContext& context) PURE;
64

            
65
375
  std::string category() const override { return "envoy.resource_monitors"; }
66
};
67

            
68
class ProactiveResourceMonitorFactory : public Config::TypedFactory {
69
public:
70
36
  ~ProactiveResourceMonitorFactory() override = default;
71

            
72
  /**
73
   * Create a particular proactive resource monitor implementation.
74
   * @param config const ProtoBuf::Message& supplies the config for the proactive resource monitor
75
   *        implementation.
76
   * @param context ResourceMonitorFactoryContext& supplies the resource monitor's context.
77
   * @return ProactiveResourceMonitorPtr the resource monitor instance. Should not be nullptr.
78
   * @throw EnvoyException if the implementation is unable to produce an instance with
79
   *        the provided parameters.
80
   */
81
  virtual ProactiveResourceMonitorPtr
82
  createProactiveResourceMonitor(const Protobuf::Message& config,
83
                                 ResourceMonitorFactoryContext& context) PURE;
84

            
85
43
  std::string category() const override { return "envoy.resource_monitors"; }
86
};
87

            
88
} // namespace Configuration
89
} // namespace Server
90
} // namespace Envoy