1
#pragma once
2

            
3
#include "envoy/http/header_map.h"
4

            
5
#include "absl/status/statusor.h"
6
#include "xds/data/orca/v3/orca_load_report.pb.h"
7

            
8
namespace Envoy {
9
namespace Orca {
10

            
11
// Headers used to send ORCA load metrics from the backend.
12
static constexpr absl::string_view kEndpointLoadMetricsHeader = "endpoint-load-metrics";
13
static constexpr absl::string_view kEndpointLoadMetricsHeaderBin = "endpoint-load-metrics-bin";
14
// Prefix used to determine format expected in kEndpointLoadMetricsHeader.
15
static constexpr absl::string_view kHeaderFormatPrefixBin = "BIN ";
16
static constexpr absl::string_view kHeaderFormatPrefixJson = "JSON ";
17
static constexpr absl::string_view kHeaderFormatPrefixText = "TEXT ";
18
// The following fields are the names of the metrics tracked in the ORCA load
19
// report proto.
20
static constexpr absl::string_view kApplicationUtilizationField = "application_utilization";
21
static constexpr absl::string_view kCpuUtilizationField = "cpu_utilization";
22
static constexpr absl::string_view kMemUtilizationField = "mem_utilization";
23
static constexpr absl::string_view kEpsField = "eps";
24
static constexpr absl::string_view kRpsFractionalField = "rps_fractional";
25
static constexpr absl::string_view kNamedMetricsFieldPrefix = "named_metrics.";
26
static constexpr absl::string_view kUtilizationPrefix = "utilization.";
27

            
28
// Parses ORCA load metrics from a header map into an OrcaLoadReport proto.
29
// Supports native HTTP, JSON and serialized binary formats.
30
absl::StatusOr<xds::data::orca::v3::OrcaLoadReport>
31
parseOrcaLoadReportHeaders(const Envoy::Http::HeaderMap& headers);
32
} // namespace Orca
33
} // namespace Envoy