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

            
3
#include "envoy/extensions/access_loggers/wasm/v3/wasm.pb.validate.h"
4
#include "envoy/registry/registry.h"
5
#include "envoy/server/filter_config.h"
6

            
7
#include "source/common/common/logger.h"
8
#include "source/common/protobuf/protobuf.h"
9
#include "source/extensions/access_loggers/wasm/wasm_access_log_impl.h"
10
#include "source/extensions/common/wasm/wasm.h"
11

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

            
17
AccessLog::InstanceSharedPtr
18
WasmAccessLogFactory::createAccessLogInstance(const Protobuf::Message& proto_config,
19
                                              AccessLog::FilterPtr&& filter,
20
                                              Server::Configuration::GenericFactoryContext& context,
21
11
                                              std::vector<Formatter::CommandParserPtr>&&) {
22
11
  const auto& config = MessageUtil::downcastAndValidate<
23
11
      const envoy::extensions::access_loggers::wasm::v3::WasmAccessLog&>(
24
11
      proto_config, context.messageValidationVisitor());
25

            
26
11
  auto plugin_config = std::make_unique<Common::Wasm::PluginConfig>(
27
11
      config.config(), context.serverFactoryContext(), context.scope(), context.initManager(),
28
11
      envoy::config::core::v3::TrafficDirection::UNSPECIFIED, /*metadata=*/nullptr, false);
29
11
  auto access_log = std::make_shared<WasmAccessLog>(std::move(plugin_config), std::move(filter));
30

            
31
11
  context.serverFactoryContext().api().customStatNamespaces().registerStatNamespace(
32
11
      Extensions::Common::Wasm::CustomStatNamespace);
33
11
  return access_log;
34
11
}
35

            
36
6
ProtobufTypes::MessagePtr WasmAccessLogFactory::createEmptyConfigProto() {
37
6
  return ProtobufTypes::MessagePtr{
38
6
      new envoy::extensions::access_loggers::wasm::v3::WasmAccessLog()};
39
6
}
40

            
41
13
std::string WasmAccessLogFactory::name() const { return "envoy.access_loggers.wasm"; }
42

            
43
/**
44
 * Static registration for the wasm access log. @see RegisterFactory.
45
 */
46
LEGACY_REGISTER_FACTORY(WasmAccessLogFactory, Envoy::AccessLog::AccessLogInstanceFactory,
47
                        "envoy.wasm_access_log");
48

            
49
} // namespace Wasm
50
} // namespace AccessLoggers
51
} // namespace Extensions
52
} // namespace Envoy