backend_metric.cc
Go to the documentation of this file.
1 //
2 // Copyright 2019 gRPC authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
18 
20 
21 #include <string.h>
22 
23 #include <map>
24 
25 #include "absl/strings/string_view.h"
26 #include "upb/upb.h"
27 #include "upb/upb.hpp"
29 
30 namespace grpc_core {
31 
32 namespace {
33 
34 template <typename EntryType>
35 std::map<absl::string_view, double> ParseMap(
37  const EntryType* (*entry_func)(const xds_data_orca_v3_OrcaLoadReport*,
38  size_t*),
39  upb_StringView (*key_func)(const EntryType*),
40  double (*value_func)(const EntryType*),
41  BackendMetricAllocatorInterface* allocator) {
42  std::map<absl::string_view, double> result;
43  size_t i = kUpb_Map_Begin;
44  while (true) {
45  const auto* entry = entry_func(msg, &i);
46  if (entry == nullptr) break;
47  upb_StringView key_view = key_func(entry);
48  char* key = allocator->AllocateString(key_view.size);
49  memcpy(key, key_view.data, key_view.size);
50  result[absl::string_view(key, key_view.size)] = value_func(entry);
51  }
52  return result;
53 }
54 
55 } // namespace
56 
58  absl::string_view serialized_load_report,
62  serialized_load_report.data(), serialized_load_report.size(),
63  upb_arena.ptr());
64  if (msg == nullptr) return nullptr;
65  BackendMetricData* backend_metric_data =
66  allocator->AllocateBackendMetricData();
67  backend_metric_data->cpu_utilization =
69  backend_metric_data->mem_utilization =
71  backend_metric_data->request_cost =
72  ParseMap<xds_data_orca_v3_OrcaLoadReport_RequestCostEntry>(
76  backend_metric_data->utilization =
77  ParseMap<xds_data_orca_v3_OrcaLoadReport_UtilizationEntry>(
81  return backend_metric_data;
82 }
83 
84 } // namespace grpc_core
xds_data_orca_v3_OrcaLoadReport_UtilizationEntry_key
UPB_INLINE upb_StringView xds_data_orca_v3_OrcaLoadReport_UtilizationEntry_key(const xds_data_orca_v3_OrcaLoadReport_UtilizationEntry *msg)
Definition: orca_load_report.upb.h:164
_gevent_test_main.result
result
Definition: _gevent_test_main.py:96
google::protobuf.internal::ParseMap
bool ParseMap(io::CodedInputStream *input, void *map_field)
Definition: bloaty/third_party/protobuf/src/google/protobuf/generated_message_table_driven.h:224
upb_arena
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/upb.c:2252
orca_load_report.upb.h
grpc_core::BackendMetricData::mem_utilization
double mem_utilization
Definition: backend_metric_data.h:36
kUpb_Map_Begin
#define kUpb_Map_Begin
Definition: upb/upb/upb.h:329
grpc_core::BackendMetricData
Definition: backend_metric_data.h:31
grpc_core
Definition: call_metric_recorder.h:31
upb_StringView::data
const char * data
Definition: upb/upb/upb.h:73
string.h
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
xds_data_orca_v3_OrcaLoadReport_RequestCostEntry_value
UPB_INLINE double xds_data_orca_v3_OrcaLoadReport_RequestCostEntry_value(const xds_data_orca_v3_OrcaLoadReport_RequestCostEntry *msg)
Definition: orca_load_report.upb.h:152
xds_data_orca_v3_OrcaLoadReport_request_cost_next
const UPB_INLINE xds_data_orca_v3_OrcaLoadReport_RequestCostEntry * xds_data_orca_v3_OrcaLoadReport_request_cost_next(const xds_data_orca_v3_OrcaLoadReport *msg, size_t *iter)
Definition: orca_load_report.upb.h:96
memcpy
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
absl::string_view::size
constexpr size_type size() const noexcept
Definition: abseil-cpp/absl/strings/string_view.h:277
xds_data_orca_v3_OrcaLoadReport
struct xds_data_orca_v3_OrcaLoadReport xds_data_orca_v3_OrcaLoadReport
Definition: orca_load_report.upb.h:26
upb_StringView::size
size_t size
Definition: upb/upb/upb.h:74
grpc_core::BackendMetricAllocatorInterface
Definition: backend_metric.h:30
upb.h
grpc_core::BackendMetricAllocatorInterface::AllocateBackendMetricData
virtual BackendMetricData * AllocateBackendMetricData()=0
upb_arena
struct upb_arena upb_arena
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/upb.h:365
grpc_core::BackendMetricData::cpu_utilization
double cpu_utilization
CPU utilization expressed as a fraction of available CPU resources.
Definition: backend_metric_data.h:33
grpc_core::BackendMetricData::request_cost
std::map< absl::string_view, double > request_cost
Definition: backend_metric_data.h:40
xds_data_orca_v3_OrcaLoadReport_UtilizationEntry_value
UPB_INLINE double xds_data_orca_v3_OrcaLoadReport_UtilizationEntry_value(const xds_data_orca_v3_OrcaLoadReport_UtilizationEntry *msg)
Definition: orca_load_report.upb.h:169
grpc_core::BackendMetricData::utilization
std::map< absl::string_view, double > utilization
Definition: backend_metric_data.h:44
xds_data_orca_v3_OrcaLoadReport_parse
UPB_INLINE xds_data_orca_v3_OrcaLoadReport * xds_data_orca_v3_OrcaLoadReport_parse(const char *buf, size_t size, upb_Arena *arena)
Definition: orca_load_report.upb.h:40
msg
std::string msg
Definition: client_interceptors_end2end_test.cc:372
upb::Arena
Definition: upb.hpp:68
backend_metric.h
key
const char * key
Definition: hpack_parser_table.cc:164
upb_StringView
Definition: upb/upb/upb.h:72
upb.hpp
string_view
absl::string_view string_view
Definition: attr.cc:22
xds_data_orca_v3_OrcaLoadReport_mem_utilization
UPB_INLINE double xds_data_orca_v3_OrcaLoadReport_mem_utilization(const xds_data_orca_v3_OrcaLoadReport *msg)
Definition: orca_load_report.upb.h:75
xds_data_orca_v3_OrcaLoadReport_utilization_next
const UPB_INLINE xds_data_orca_v3_OrcaLoadReport_UtilizationEntry * xds_data_orca_v3_OrcaLoadReport_utilization_next(const xds_data_orca_v3_OrcaLoadReport *msg, size_t *iter)
Definition: orca_load_report.upb.h:111
xds_data_orca_v3_OrcaLoadReport_cpu_utilization
UPB_INLINE double xds_data_orca_v3_OrcaLoadReport_cpu_utilization(const xds_data_orca_v3_OrcaLoadReport *msg)
Definition: orca_load_report.upb.h:69
xds_data_orca_v3_OrcaLoadReport_RequestCostEntry_key
UPB_INLINE upb_StringView xds_data_orca_v3_OrcaLoadReport_RequestCostEntry_key(const xds_data_orca_v3_OrcaLoadReport_RequestCostEntry *msg)
Definition: orca_load_report.upb.h:147
absl::string_view::data
constexpr const_pointer data() const noexcept
Definition: abseil-cpp/absl/strings/string_view.h:336
grpc_core::ParseBackendMetricData
const BackendMetricData * ParseBackendMetricData(absl::string_view serialized_load_report, BackendMetricAllocatorInterface *allocator)
Definition: backend_metric.cc:57
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:35