// Copyright 2025 Envoy Project Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package envoy.extensions.stat_sinks.graphite_statsd.v3;

import "envoy/config/core/v3/address.proto";

import "google/protobuf/wrappers.proto";

import "udpa/annotations/status.proto";
import "validate/validate.proto";

option java_package = "io.envoyproxy.envoy.extensions.stat_sinks.graphite_statsd.v3";
option java_outer_classname = "GraphiteStatsdProto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/stat_sinks/graphite_statsd/v3;graphite_statsdv3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: Graphite+Statsd]
// Stats configuration proto schema for ``envoy.stat_sinks.graphite_statsd`` sink.
// The sink emits stats with `Graphite <https://graphite.readthedocs.io/en/latest/tags.html>`_
// compatible tags. Tags are configurable via :ref:`StatsConfig
// <envoy_v3_api_msg_config.metrics.v3.StatsConfig>`.
// [#extension: envoy.stat_sinks.graphite_statsd]

message GraphiteStatsdSink {
  oneof statsd_specifier {
    option (validate.required) = true;

    // The UDP address of a running Graphite-compliant listener. If specified,
    // statistics will be flushed to this address.
    config.core.v3.Address address = 1;
  }

  // Optional custom metric name prefix. See :ref:`StatsdSink's prefix field
  // <envoy_v3_api_field_config.metrics.v3.StatsdSink.prefix>` for more details.
  string prefix = 3;

  // Optional max datagram size to use when sending UDP messages. By default Envoy
  // will emit one metric per datagram. By specifying a max-size larger than a single
  // metric, Envoy will emit multiple, new-line separated metrics. The max datagram
  // size should not exceed your network's MTU.
  //
  // Note that this value may not be respected if smaller than a single metric.
  google.protobuf.UInt64Value max_bytes_per_datagram = 4 [(validate.rules).uint64 = {gt: 0}];
}
