1
#include "source/extensions/stat_sinks/wasm/config.h"
2

            
3
#include <memory>
4

            
5
#include "envoy/extensions/stat_sinks/wasm/v3/wasm.pb.validate.h"
6
#include "envoy/registry/registry.h"
7
#include "envoy/server/factory_context.h"
8

            
9
#include "source/extensions/common/wasm/wasm.h"
10
#include "source/extensions/stat_sinks/wasm/wasm_stat_sink_impl.h"
11

            
12
namespace Envoy {
13
namespace Extensions {
14
namespace StatSinks {
15
namespace Wasm {
16

            
17
absl::StatusOr<Stats::SinkPtr>
18
WasmSinkFactory::createStatsSink(const Protobuf::Message& proto_config,
19
4
                                 Server::Configuration::ServerFactoryContext& context) {
20
4
  const auto& config =
21
4
      MessageUtil::downcastAndValidate<const envoy::extensions::stat_sinks::wasm::v3::Wasm&>(
22
4
          proto_config, context.messageValidationContext().staticValidationVisitor());
23

            
24
4
  auto plugin_config = std::make_unique<Common::Wasm::PluginConfig>(
25
4
      config.config(), context, context.scope(), context.initManager(),
26
4
      envoy::config::core::v3::TrafficDirection::UNSPECIFIED, nullptr, true);
27

            
28
4
  context.api().customStatNamespaces().registerStatNamespace(
29
4
      Extensions::Common::Wasm::CustomStatNamespace);
30

            
31
4
  return std::make_unique<WasmStatSink>(std::move(plugin_config));
32
4
}
33

            
34
2
ProtobufTypes::MessagePtr WasmSinkFactory::createEmptyConfigProto() {
35
2
  return std::make_unique<envoy::extensions::stat_sinks::wasm::v3::Wasm>();
36
2
}
37

            
38
5
std::string WasmSinkFactory::name() const { return WasmName; }
39

            
40
/**
41
 * Static registration for the wasm access log. @see RegisterFactory.
42
 */
43
REGISTER_FACTORY(WasmSinkFactory, Server::Configuration::StatsSinkFactory);
44

            
45
} // namespace Wasm
46
} // namespace StatSinks
47
} // namespace Extensions
48
} // namespace Envoy