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

            
3
#include <memory>
4

            
5
#include "envoy/config/metrics/v3/stats.pb.h"
6
#include "envoy/config/metrics/v3/stats.pb.validate.h"
7
#include "envoy/registry/registry.h"
8

            
9
#include "source/common/network/resolver_impl.h"
10
#include "source/extensions/stat_sinks/common/statsd/statsd.h"
11

            
12
#include "absl/types/optional.h"
13

            
14
namespace Envoy {
15
namespace Extensions {
16
namespace StatSinks {
17
namespace DogStatsd {
18

            
19
absl::StatusOr<Stats::SinkPtr>
20
DogStatsdSinkFactory::createStatsSink(const Protobuf::Message& config,
21
5
                                      Server::Configuration::ServerFactoryContext& server) {
22
5
  const auto& sink_config =
23
5
      MessageUtil::downcastAndValidate<const envoy::config::metrics::v3::DogStatsdSink&>(
24
5
          config, server.messageValidationContext().staticValidationVisitor());
25
5
  auto address_or_error = Network::Address::resolveProtoAddress(sink_config.address());
26
5
  RETURN_IF_NOT_OK_REF(address_or_error.status());
27
5
  Network::Address::InstanceConstSharedPtr address = address_or_error.value();
28
5
  ENVOY_LOG(debug, "dog_statsd UDP ip address: {}", address->asString());
29
5
  absl::optional<uint64_t> max_bytes;
30
5
  if (sink_config.has_max_bytes_per_datagram()) {
31
1
    max_bytes = sink_config.max_bytes_per_datagram().value();
32
1
  }
33
5
  return std::make_unique<Common::Statsd::UdpStatsdSink>(server.threadLocal(), std::move(address),
34
5
                                                         true, sink_config.prefix(), max_bytes);
35
5
}
36

            
37
8
ProtobufTypes::MessagePtr DogStatsdSinkFactory::createEmptyConfigProto() {
38
8
  return std::make_unique<envoy::config::metrics::v3::DogStatsdSink>();
39
8
}
40

            
41
13
std::string DogStatsdSinkFactory::name() const { return DogStatsdName; }
42

            
43
/**
44
 * Static registration for the this sink factory. @see RegisterFactory.
45
 */
46
LEGACY_REGISTER_FACTORY(DogStatsdSinkFactory, Server::Configuration::StatsSinkFactory,
47
                        "envoy.dog_statsd");
48

            
49
} // namespace DogStatsd
50
} // namespace StatSinks
51
} // namespace Extensions
52
} // namespace Envoy