load_reporter.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2018 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
20 
22 
23 #include <inttypes.h>
24 #include <stdint.h>
25 #include <stdio.h>
26 
27 #include <chrono>
28 #include <cstring>
29 #include <iterator>
30 #include <set>
31 #include <tuple>
32 
33 #include <google/protobuf/duration.pb.h>
34 
35 #include "opencensus/stats/internal/set_aggregation_window.h"
36 #include "opencensus/tags/tag_key.h"
37 
38 #include <grpc/support/log.h>
39 
42 
43 namespace grpc {
44 namespace load_reporter {
45 
47  return GetCpuStatsImpl();
48 }
49 
51  : tag_key_token_(::opencensus::tags::TagKey::Register(kTagKeyToken)),
52  tag_key_host_(::opencensus::tags::TagKey::Register(kTagKeyHost)),
53  tag_key_user_id_(::opencensus::tags::TagKey::Register(kTagKeyUserId)),
54  tag_key_status_(::opencensus::tags::TagKey::Register(kTagKeyStatus)),
55  tag_key_metric_name_(
56  ::opencensus::tags::TagKey::Register(kTagKeyMetricName)) {
57  // One view related to starting a call.
58  auto vd_start_count =
59  ::opencensus::stats::ViewDescriptor()
60  .set_name(kViewStartCount)
61  .set_measure(kMeasureStartCount)
62  .set_aggregation(::opencensus::stats::Aggregation::Sum())
63  .add_column(tag_key_token_)
64  .add_column(tag_key_host_)
65  .add_column(tag_key_user_id_)
66  .set_description(
67  "Delta count of calls started broken down by <token, host, "
68  "user_id>.");
69  ::opencensus::stats::SetAggregationWindow(
70  ::opencensus::stats::AggregationWindow::Delta(), &vd_start_count);
71  view_descriptor_map_.emplace(kViewStartCount, vd_start_count);
72  // Four views related to ending a call.
73  // If this view is set as Count of kMeasureEndBytesSent (in hope of saving one
74  // measure), it's infeasible to prepare fake data for testing. That's because
75  // the OpenCensus API to make up view data will add the input data as separate
76  // measurements instead of setting the data values directly.
77  auto vd_end_count =
78  ::opencensus::stats::ViewDescriptor()
79  .set_name(kViewEndCount)
80  .set_measure(kMeasureEndCount)
81  .set_aggregation(::opencensus::stats::Aggregation::Sum())
82  .add_column(tag_key_token_)
83  .add_column(tag_key_host_)
84  .add_column(tag_key_user_id_)
85  .add_column(tag_key_status_)
86  .set_description(
87  "Delta count of calls ended broken down by <token, host, "
88  "user_id, status>.");
89  ::opencensus::stats::SetAggregationWindow(
90  ::opencensus::stats::AggregationWindow::Delta(), &vd_end_count);
91  view_descriptor_map_.emplace(kViewEndCount, vd_end_count);
92  auto vd_end_bytes_sent =
93  ::opencensus::stats::ViewDescriptor()
94  .set_name(kViewEndBytesSent)
95  .set_measure(kMeasureEndBytesSent)
96  .set_aggregation(::opencensus::stats::Aggregation::Sum())
97  .add_column(tag_key_token_)
98  .add_column(tag_key_host_)
99  .add_column(tag_key_user_id_)
100  .add_column(tag_key_status_)
101  .set_description(
102  "Delta sum of bytes sent broken down by <token, host, user_id, "
103  "status>.");
104  ::opencensus::stats::SetAggregationWindow(
105  ::opencensus::stats::AggregationWindow::Delta(), &vd_end_bytes_sent);
106  view_descriptor_map_.emplace(kViewEndBytesSent, vd_end_bytes_sent);
107  auto vd_end_bytes_received =
108  ::opencensus::stats::ViewDescriptor()
109  .set_name(kViewEndBytesReceived)
110  .set_measure(kMeasureEndBytesReceived)
111  .set_aggregation(::opencensus::stats::Aggregation::Sum())
112  .add_column(tag_key_token_)
113  .add_column(tag_key_host_)
114  .add_column(tag_key_user_id_)
115  .add_column(tag_key_status_)
116  .set_description(
117  "Delta sum of bytes received broken down by <token, host, "
118  "user_id, status>.");
119  ::opencensus::stats::SetAggregationWindow(
120  ::opencensus::stats::AggregationWindow::Delta(), &vd_end_bytes_received);
121  view_descriptor_map_.emplace(kViewEndBytesReceived, vd_end_bytes_received);
122  auto vd_end_latency_ms =
123  ::opencensus::stats::ViewDescriptor()
124  .set_name(kViewEndLatencyMs)
125  .set_measure(kMeasureEndLatencyMs)
126  .set_aggregation(::opencensus::stats::Aggregation::Sum())
127  .add_column(tag_key_token_)
128  .add_column(tag_key_host_)
129  .add_column(tag_key_user_id_)
130  .add_column(tag_key_status_)
131  .set_description(
132  "Delta sum of latency in ms broken down by <token, host, "
133  "user_id, status>.");
134  ::opencensus::stats::SetAggregationWindow(
135  ::opencensus::stats::AggregationWindow::Delta(), &vd_end_latency_ms);
136  view_descriptor_map_.emplace(kViewEndLatencyMs, vd_end_latency_ms);
137  // Two views related to other call metrics.
138  auto vd_metric_call_count =
139  ::opencensus::stats::ViewDescriptor()
140  .set_name(kViewOtherCallMetricCount)
141  .set_measure(kMeasureOtherCallMetric)
142  .set_aggregation(::opencensus::stats::Aggregation::Count())
143  .add_column(tag_key_token_)
144  .add_column(tag_key_host_)
145  .add_column(tag_key_user_id_)
146  .add_column(tag_key_metric_name_)
147  .set_description(
148  "Delta count of calls broken down by <token, host, user_id, "
149  "metric_name>.");
150  ::opencensus::stats::SetAggregationWindow(
151  ::opencensus::stats::AggregationWindow::Delta(), &vd_metric_call_count);
152  view_descriptor_map_.emplace(kViewOtherCallMetricCount, vd_metric_call_count);
153  auto vd_metric_value =
154  ::opencensus::stats::ViewDescriptor()
155  .set_name(kViewOtherCallMetricValue)
156  .set_measure(kMeasureOtherCallMetric)
157  .set_aggregation(::opencensus::stats::Aggregation::Sum())
158  .add_column(tag_key_token_)
159  .add_column(tag_key_host_)
160  .add_column(tag_key_user_id_)
161  .add_column(tag_key_metric_name_)
162  .set_description(
163  "Delta sum of call metric value broken down "
164  "by <token, host, user_id, metric_name>.");
165  ::opencensus::stats::SetAggregationWindow(
166  ::opencensus::stats::AggregationWindow::Delta(), &vd_metric_value);
167  view_descriptor_map_.emplace(kViewOtherCallMetricValue, vd_metric_value);
168 }
169 
171  const ViewDataMap& view_data_map, const char* view_name,
172  size_t view_name_len, const std::vector<std::string>& tag_values) {
173  auto it_vd = view_data_map.find(std::string(view_name, view_name_len));
174  GPR_ASSERT(it_vd != view_data_map.end());
175  GPR_ASSERT(it_vd->second.type() ==
176  ::opencensus::stats::ViewData::Type::kDouble);
177  auto it_row = it_vd->second.double_data().find(tag_values);
178  GPR_ASSERT(it_row != it_vd->second.double_data().end());
179  return it_row->second;
180 }
181 
183  const ViewDataMap& view_data_map, const char* view_name,
184  size_t view_name_len, const std::vector<std::string>& tag_values) {
185  auto it_vd = view_data_map.find(std::string(view_name, view_name_len));
186  GPR_ASSERT(it_vd != view_data_map.end());
187  GPR_ASSERT(it_vd->second.type() ==
188  ::opencensus::stats::ViewData::Type::kInt64);
189  auto it_row = it_vd->second.int_data().find(tag_values);
190  GPR_ASSERT(it_row != it_vd->second.int_data().end());
191  GPR_ASSERT(it_row->second >= 0);
192  return it_row->second;
193 }
194 
196  for (const auto& p : view_descriptor_map()) {
197  const std::string& view_name = p.first;
198  const ::opencensus::stats::ViewDescriptor& vd = p.second;
199  // We need to use pair's piecewise ctor here, otherwise the deleted copy
200  // ctor of View will be called.
201  view_map_.emplace(std::piecewise_construct,
202  std::forward_as_tuple(view_name),
203  std::forward_as_tuple(vd));
204  }
205 }
206 
208  gpr_log(GPR_DEBUG, "[CVP %p] Starts fetching Census view data.", this);
209  ViewDataMap view_data_map;
210  for (auto& p : view_map_) {
211  const std::string& view_name = p.first;
212  ::opencensus::stats::View& view = p.second;
213  if (view.IsValid()) {
214  view_data_map.emplace(view_name, view.GetData());
215  gpr_log(GPR_DEBUG, "[CVP %p] Fetched view data (view: %s).", this,
216  view_name.c_str());
217  } else {
218  gpr_log(
219  GPR_DEBUG,
220  "[CVP %p] Can't fetch view data because view is invalid (view: %s).",
221  this, view_name.c_str());
222  }
223  }
224  return view_data_map;
225 }
226 
228  while (true) {
229  if (next_lb_id_ > UINT32_MAX) {
230  gpr_log(GPR_ERROR, "[LR %p] The LB ID exceeds the max valid value!",
231  this);
232  return "";
233  }
234  int64_t lb_id = next_lb_id_++;
235  // Overflow should never happen.
236  GPR_ASSERT(lb_id >= 0);
237  // Convert to padded hex string for a 32-bit LB ID. E.g, "0000ca5b".
238  char buf[kLbIdLength + 1];
239  snprintf(buf, sizeof(buf), "%08" PRIx64, lb_id);
240  std::string lb_id_str(buf, kLbIdLength);
241  // The client may send requests with LB ID that has never been allocated
242  // by this load reporter. Those IDs are tracked and will be skipped when
243  // we generate a new ID.
245  return lb_id_str;
246  }
247  }
248 }
249 
250 ::grpc::lb::v1::LoadBalancingFeedback
254  // Discard records outside the window until there is only one record
255  // outside the window, which is used as the base for difference.
256  while (feedback_records_.size() > 1 &&
258  feedback_records_.pop_front();
259  }
260  if (feedback_records_.size() < 2) {
261  return grpc::lb::v1::LoadBalancingFeedback::default_instance();
262  }
263  // Find the longest range with valid ends.
264  auto oldest = feedback_records_.begin();
265  auto newest = feedback_records_.end() - 1;
266  while (std::distance(oldest, newest) > 0 &&
267  (newest->cpu_limit == 0 || oldest->cpu_limit == 0)) {
268  // A zero limit means that the system info reading was failed, so these
269  // records can't be used to calculate CPU utilization.
270  if (newest->cpu_limit == 0) --newest;
271  if (oldest->cpu_limit == 0) ++oldest;
272  }
273  if (std::distance(oldest, newest) < 1 ||
274  oldest->end_time == newest->end_time ||
275  newest->cpu_limit == oldest->cpu_limit) {
276  return grpc::lb::v1::LoadBalancingFeedback::default_instance();
277  }
278  uint64_t rpcs = 0;
279  uint64_t errors = 0;
280  for (auto p = newest; p != oldest; --p) {
281  // Because these two numbers are counters, the oldest record shouldn't be
282  // included.
283  rpcs += p->rpcs;
284  errors += p->errors;
285  }
286  double cpu_usage = newest->cpu_usage - oldest->cpu_usage;
287  double cpu_limit = newest->cpu_limit - oldest->cpu_limit;
288  std::chrono::duration<double> duration_seconds =
289  newest->end_time - oldest->end_time;
290  lock.Release();
291  grpc::lb::v1::LoadBalancingFeedback feedback;
292  feedback.set_server_utilization(static_cast<float>(cpu_usage / cpu_limit));
293  feedback.set_calls_per_second(
294  static_cast<float>(rpcs / duration_seconds.count()));
295  feedback.set_errors_per_second(
296  static_cast<float>(errors / duration_seconds.count()));
297  return feedback;
298 }
299 
302  const std::string& lb_id) {
304  auto assigned_stores = load_data_store_.GetAssignedStores(hostname, lb_id);
305  GPR_ASSERT(assigned_stores != nullptr);
306  GPR_ASSERT(!assigned_stores->empty());
308  for (PerBalancerStore* per_balancer_store : *assigned_stores) {
309  GPR_ASSERT(!per_balancer_store->IsSuspended());
310  if (!per_balancer_store->load_record_map().empty()) {
311  for (const auto& p : per_balancer_store->load_record_map()) {
312  const auto& key = p.first;
313  const auto& value = p.second;
314  auto load = loads.Add();
315  load->set_load_balance_tag(key.lb_tag());
316  load->set_user_id(key.user_id());
317  load->set_client_ip_address(key.GetClientIpBytes());
318  load->set_num_calls_started(static_cast<int64_t>(value.start_count()));
319  load->set_num_calls_finished_without_error(
320  static_cast<int64_t>(value.ok_count()));
321  load->set_num_calls_finished_with_error(
322  static_cast<int64_t>(value.error_count()));
323  load->set_total_bytes_sent(static_cast<int64_t>(value.bytes_sent()));
324  load->set_total_bytes_received(
325  static_cast<int64_t>(value.bytes_recv()));
326  load->mutable_total_latency()->set_seconds(
327  static_cast<int64_t>(value.latency_ms() / 1000));
328  load->mutable_total_latency()->set_nanos(
329  (static_cast<int32_t>(value.latency_ms()) % 1000) * 1000000);
330  for (const auto& p : value.call_metrics()) {
331  const std::string& metric_name = p.first;
332  const CallMetricValue& metric_value = p.second;
333  auto call_metric_data = load->add_metric_data();
334  call_metric_data->set_metric_name(metric_name);
335  call_metric_data->set_num_calls_finished_with_metric(
336  metric_value.num_calls());
337  call_metric_data->set_total_metric_value(
338  metric_value.total_metric_value());
339  }
340  if (per_balancer_store->lb_id() != lb_id) {
341  // This per-balancer store is an orphan assigned to this receiving
342  // balancer.
343  AttachOrphanLoadId(load, *per_balancer_store);
344  }
345  }
346  per_balancer_store->ClearLoadRecordMap();
347  }
348  if (per_balancer_store->IsNumCallsInProgressChangedSinceLastReport()) {
349  auto load = loads.Add();
350  load->set_num_calls_in_progress(
351  per_balancer_store->GetNumCallsInProgressForReport());
352  if (per_balancer_store->lb_id() != lb_id) {
353  // This per-balancer store is an orphan assigned to this receiving
354  // balancer.
355  AttachOrphanLoadId(load, *per_balancer_store);
356  }
357  }
358  }
359  return loads;
360 }
361 
363  grpc::lb::v1::Load* load, const PerBalancerStore& per_balancer_store) {
364  if (per_balancer_store.lb_id() == kInvalidLbId) {
365  load->set_load_key_unknown(true);
366  } else {
367  // We shouldn't set load_key_unknown to any value in this case because
368  // load_key_unknown and orphaned_load_identifier are under an oneof struct.
369  load->mutable_orphaned_load_identifier()->set_load_key(
370  per_balancer_store.load_key());
371  load->mutable_orphaned_load_identifier()->set_load_balancer_id(
372  per_balancer_store.lb_id());
373  }
374 }
375 
378  if (cpu_stats_provider_ != nullptr) {
379  cpu_stats = cpu_stats_provider_->GetCpuStats();
380  } else {
381  // This will make the load balancing feedback generation a no-op.
382  cpu_stats = {0, 0};
383  }
386  cpu_stats.first, cpu_stats.second);
387 }
388 
390  const std::string& lb_id,
391  const std::string& load_key) {
393  load_data_store_.ReportStreamCreated(hostname, lb_id, load_key);
395  "[LR %p] Report stream created (host: %s, LB ID: %s, load key: %s).",
396  this, hostname.c_str(), lb_id.c_str(), load_key.c_str());
397 }
398 
400  const std::string& lb_id) {
402  load_data_store_.ReportStreamClosed(hostname, lb_id);
403  gpr_log(GPR_INFO, "[LR %p] Report stream closed (host: %s, LB ID: %s).", this,
404  hostname.c_str(), lb_id.c_str());
405 }
406 
408  const CensusViewProvider::ViewDataMap& view_data_map) {
409  auto it = view_data_map.find(kViewStartCount);
410  if (it != view_data_map.end()) {
411  for (const auto& p : it->second.int_data()) {
412  const std::vector<std::string>& tag_values = p.first;
413  const uint64_t start_count = static_cast<uint64_t>(p.second);
414  const std::string& client_ip_and_token = tag_values[0];
415  const std::string& host = tag_values[1];
416  const std::string& user_id = tag_values[2];
417  LoadRecordKey key(client_ip_and_token, user_id);
418  LoadRecordValue value = LoadRecordValue(start_count);
419  {
422  }
423  }
424  }
425 }
426 
428  const CensusViewProvider::ViewDataMap& view_data_map) {
429  uint64_t total_end_count = 0;
430  uint64_t total_error_count = 0;
431  auto it = view_data_map.find(kViewEndCount);
432  if (it != view_data_map.end()) {
433  for (const auto& p : it->second.int_data()) {
434  const std::vector<std::string>& tag_values = p.first;
435  const uint64_t end_count = static_cast<uint64_t>(p.second);
436  const std::string& client_ip_and_token = tag_values[0];
437  const std::string& host = tag_values[1];
438  const std::string& user_id = tag_values[2];
439  const std::string& status = tag_values[3];
440  // This is due to a bug reported internally of Java server load reporting
441  // implementation.
442  // TODO(juanlishen): Check whether this situation happens in OSS C++.
443  if (client_ip_and_token.empty()) {
445  "Skipping processing Opencensus record with empty "
446  "client_ip_and_token tag.");
447  continue;
448  }
449  LoadRecordKey key(client_ip_and_token, user_id);
451  view_data_map, kViewEndBytesSent, sizeof(kViewEndBytesSent) - 1,
452  tag_values);
453  const uint64_t bytes_received =
455  view_data_map, kViewEndBytesReceived,
456  sizeof(kViewEndBytesReceived) - 1, tag_values);
458  view_data_map, kViewEndLatencyMs, sizeof(kViewEndLatencyMs) - 1,
459  tag_values);
460  uint64_t ok_count = 0;
461  uint64_t error_count = 0;
462  total_end_count += end_count;
463  if (std::strcmp(status.c_str(), kCallStatusOk) == 0) {
464  ok_count = end_count;
465  } else {
466  error_count = end_count;
467  total_error_count += end_count;
468  }
470  0, ok_count, error_count, bytes_sent, bytes_received, latency_ms);
471  {
474  }
475  }
476  }
477  AppendNewFeedbackRecord(total_end_count, total_error_count);
478 }
479 
481  const CensusViewProvider::ViewDataMap& view_data_map) {
482  auto it = view_data_map.find(kViewOtherCallMetricCount);
483  if (it != view_data_map.end()) {
484  for (const auto& p : it->second.int_data()) {
485  const std::vector<std::string>& tag_values = p.first;
486  const int64_t num_calls = p.second;
487  const std::string& client_ip_and_token = tag_values[0];
488  const std::string& host = tag_values[1];
489  const std::string& user_id = tag_values[2];
490  const std::string& metric_name = tag_values[3];
491  LoadRecordKey key(client_ip_and_token, user_id);
492  const double total_metric_value =
494  view_data_map, kViewOtherCallMetricValue,
495  sizeof(kViewOtherCallMetricValue) - 1, tag_values);
497  metric_name, static_cast<uint64_t>(num_calls), total_metric_value);
498  {
501  }
502  }
503  }
504 }
505 
508  "[LR %p] Starts fetching Census view data and sampling LB feedback "
509  "record.",
510  this);
511  CensusViewProvider::ViewDataMap view_data_map =
512  census_view_provider_->FetchViewData();
513  ProcessViewDataCallStart(view_data_map);
514  ProcessViewDataCallEnd(view_data_map);
515  ProcessViewDataOtherCallMetrics(view_data_map);
516 }
517 
518 } // namespace load_reporter
519 } // namespace grpc
grpc::load_reporter::kTagKeyStatus
constexpr char kTagKeyStatus[]
Definition: src/cpp/server/load_reporter/constants.h:57
grpc::load_reporter::PerBalancerStore
Definition: load_data_store.h:197
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
grpc::status
auto status
Definition: cpp/client/credentials_test.cc:200
grpc::load_reporter::CensusViewProvider::tag_key_metric_name_
::opencensus::tags::TagKey tag_key_metric_name_
Definition: load_reporter.h:92
google::protobuf::RepeatedPtrField
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h:62
google::protobuf::RepeatedPtrField::Add
Element * Add()
Definition: bloaty/third_party/protobuf/src/google/protobuf/repeated_field.h:2025
grpc::load_reporter::kViewEndCount
constexpr char kViewEndCount[]
Definition: src/cpp/server/load_reporter/constants.h:72
now
static double now(void)
Definition: test/core/fling/client.cc:130
regen-readme.it
it
Definition: regen-readme.py:15
log.h
grpc::load_reporter::LoadDataStore::ReportStreamCreated
void ReportStreamCreated(const std::string &hostname, const std::string &lb_id, const std::string &load_key)
Definition: load_data_store.cc:330
grpc::load_reporter::LoadReporter::feedback_records_
std::deque< LoadBalancingFeedbackRecord > feedback_records_
Definition: load_reporter.h:227
grpc::load_reporter::kMeasureEndLatencyMs
constexpr char kMeasureEndLatencyMs[]
Definition: src/cpp/server/load_reporter/constants.h:66
grpc::load_reporter::kMeasureStartCount
constexpr char kMeasureStartCount[]
Definition: src/cpp/server/load_reporter/constants.h:62
grpc::load_reporter::LoadReporter::FetchAndSample
void FetchAndSample()
Definition: load_reporter.cc:506
grpc
Definition: grpcpp/alarm.h:33
grpc::load_reporter::kMeasureEndBytesSent
constexpr char kMeasureEndBytesSent[]
Definition: src/cpp/server/load_reporter/constants.h:64
grpc::load_reporter::kMeasureEndBytesReceived
constexpr char kMeasureEndBytesReceived[]
Definition: src/cpp/server/load_reporter/constants.h:65
grpc::load_reporter::LoadReporter::IsRecordInWindow
bool IsRecordInWindow(const LoadBalancingFeedbackRecord &record, std::chrono::system_clock::time_point now)
Definition: load_reporter.h:212
grpc::load_reporter::GetCpuStatsImpl
std::pair< uint64_t, uint64_t > GetCpuStatsImpl()
Definition: get_cpu_stats_unsupported.cc:30
grpc_core::MutexLock
Definition: src/core/lib/gprpp/sync.h:88
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
grpc_core::ReleasableMutexLock::Release
void Release() ABSL_UNLOCK_FUNCTION()
Definition: src/core/lib/gprpp/sync.h:115
grpc::load_reporter::CallMetricValue::num_calls
uint64_t num_calls() const
Definition: load_data_store.h:59
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc::load_reporter::CallMetricValue::total_metric_value
double total_metric_value() const
Definition: load_data_store.h:60
grpc::load_reporter::PerBalancerStore::lb_id
const std::string & lb_id() const
Definition: load_data_store.h:230
bytes_received
static int bytes_received
Definition: test-callback-stack.c:44
grpc::load_reporter::CensusViewProviderDefaultImpl::FetchViewData
ViewDataMap FetchViewData() override
Definition: load_reporter.cc:207
UINT32_MAX
#define UINT32_MAX
Definition: stdint-msvc2008.h:142
grpc::load_reporter::CensusViewProvider::GetRelatedViewDataRowInt
static uint64_t GetRelatedViewDataRowInt(const ViewDataMap &view_data_map, const char *view_name, size_t view_name_len, const std::vector< std::string > &tag_values)
Definition: load_reporter.cc:182
opencensus
Definition: third_party/opencensus-proto/gen-python/opencensus/__init__.py:1
grpc::load_reporter::LoadRecordValue
Definition: load_data_store.h:127
grpc::load_reporter::CensusViewProvider::ViewDataMap
std::unordered_map< std::string, ::opencensus::stats::ViewData > ViewDataMap
Definition: load_reporter.h:56
grpc::load_reporter::CpuStatsProvider::CpuStatsSample
std::pair< uint64_t, uint64_t > CpuStatsSample
Definition: load_reporter.h:110
grpc::load_reporter::PerBalancerStore::load_key
const std::string & load_key() const
Definition: load_data_store.h:231
tags
bool tags[kAvailableTags]
Definition: inproc_callback_test.cc:114
grpc::load_reporter::CensusViewProvider::tag_key_status_
::opencensus::tags::TagKey tag_key_status_
Definition: load_reporter.h:91
grpc::load_reporter::CpuStatsProviderDefaultImpl::GetCpuStats
CpuStatsSample GetCpuStats() override
Definition: load_reporter.cc:46
grpc::load_reporter::CensusViewProvider::tag_key_user_id_
::opencensus::tags::TagKey tag_key_user_id_
Definition: load_reporter.h:90
load_reporter.h
grpc::load_reporter::CensusViewProvider::view_descriptor_map
const ViewDescriptorMap & view_descriptor_map() const
Definition: load_reporter.h:81
grpc::load_reporter::LoadReporter::ProcessViewDataOtherCallMetrics
void ProcessViewDataOtherCallMetrics(const CensusViewProvider::ViewDataMap &view_data_map)
Definition: load_reporter.cc:480
errors
const char * errors
Definition: bloaty/third_party/protobuf/src/google/protobuf/io/tokenizer_unittest.cc:841
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc::load_reporter::CensusViewProvider::GetRelatedViewDataRowDouble
static double GetRelatedViewDataRowDouble(const ViewDataMap &view_data_map, const char *view_name, size_t view_name_len, const std::vector< std::string > &tag_values)
Definition: load_reporter.cc:170
grpc::load_reporter::LoadReporter::AttachOrphanLoadId
void AttachOrphanLoadId(grpc::lb::v1::Load *load, const PerBalancerStore &per_balancer_store)
Definition: load_reporter.cc:362
grpc::load_reporter::kViewOtherCallMetricValue
constexpr char kViewOtherCallMetricValue[]
Definition: src/cpp/server/load_reporter/constants.h:78
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
grpc::load_reporter::kMeasureEndCount
constexpr char kMeasureEndCount[]
Definition: src/cpp/server/load_reporter/constants.h:63
grpc::load_reporter::LoadReporter::feedback_mu_
grpc_core::Mutex feedback_mu_
Definition: load_reporter.h:226
grpc::load_reporter::kViewEndBytesReceived
constexpr char kViewEndBytesReceived[]
Definition: src/cpp/server/load_reporter/constants.h:74
grpc_core::ReleasableMutexLock
Definition: src/core/lib/gprpp/sync.h:102
grpc::load_reporter::kViewStartCount
constexpr char kViewStartCount[]
Definition: src/cpp/server/load_reporter/constants.h:71
grpc::load_reporter::LoadReporter::load_data_store_
LoadDataStore load_data_store_
Definition: load_reporter.h:231
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc::load_reporter::LoadReporter::next_lb_id_
std::atomic< int64_t > next_lb_id_
Definition: load_reporter.h:224
grpc::load_reporter::LoadReporter::GenerateLoads
::google::protobuf::RepeatedPtrField< grpc::lb::v1::Load > GenerateLoads(const std::string &hostname, const std::string &lb_id)
Definition: load_reporter.cc:301
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
grpc::load_reporter::LoadDataStore::GetAssignedStores
const std::set< PerBalancerStore * > * GetAssignedStores(const string &hostname, const string &lb_id)
Definition: load_data_store.cc:323
grpc::load_reporter::kMeasureOtherCallMetric
constexpr char kMeasureOtherCallMetric[]
Definition: src/cpp/server/load_reporter/constants.h:67
grpc::load_reporter::LoadReporter::store_mu_
grpc_core::Mutex store_mu_
Definition: load_reporter.h:230
grpc::load_reporter::LoadReporter::GenerateLoadBalancingFeedback
grpc::lb::v1::LoadBalancingFeedback GenerateLoadBalancingFeedback()
Definition: load_reporter.cc:251
grpc::load_reporter::kTagKeyUserId
constexpr char kTagKeyUserId[]
Definition: src/cpp/server/load_reporter/constants.h:56
grpc::load_reporter::LoadReporter::ProcessViewDataCallEnd
void ProcessViewDataCallEnd(const CensusViewProvider::ViewDataMap &view_data_map)
Definition: load_reporter.cc:427
gen_build_yaml.load
def load(*args)
Definition: test/core/end2end/gen_build_yaml.py:25
GPR_ERROR
#define GPR_ERROR
Definition: include/grpc/impl/codegen/log.h:57
grpc::load_reporter::CensusViewProviderDefaultImpl::view_map_
std::unordered_map< std::string, ::opencensus::stats::View > view_map_
Definition: load_reporter.h:103
grpc::load_reporter::LoadReporter::ProcessViewDataCallStart
void ProcessViewDataCallStart(const CensusViewProvider::ViewDataMap &view_data_map)
Definition: load_reporter.cc:407
stdint.h
grpc::load_reporter::kViewOtherCallMetricCount
constexpr char kViewOtherCallMetricCount[]
Definition: src/cpp/server/load_reporter/constants.h:76
grpc::load_reporter::kCallStatusOk
constexpr char kCallStatusOk[]
Definition: src/cpp/server/load_reporter/constants.h:48
get_cpu_stats.h
value
const char * value
Definition: hpack_parser_table.cc:165
grpc::load_reporter::LoadDataStore::ReportStreamClosed
void ReportStreamClosed(const std::string &hostname, const std::string &lb_id)
Definition: load_data_store.cc:336
grpc::load_reporter::kTagKeyMetricName
constexpr char kTagKeyMetricName[]
Definition: src/cpp/server/load_reporter/constants.h:58
grpc::load_reporter::LoadDataStore::IsTrackedUnknownBalancerId
bool IsTrackedUnknownBalancerId(const std::string &lb_id) const
Definition: load_data_store.h:322
constants.h
grpc::load_reporter::CensusViewProvider::tag_key_token_
::opencensus::tags::TagKey tag_key_token_
Definition: load_reporter.h:88
key
const char * key
Definition: hpack_parser_table.cc:164
opencensus.proto.stats.v1.stats_pb2.View
View
Definition: stats_pb2.py:445
grpc::load_reporter::LoadRecordKey
Definition: load_data_store.h:71
port_platform.h
grpc::load_reporter::kViewEndLatencyMs
constexpr char kViewEndLatencyMs[]
Definition: src/cpp/server/load_reporter/constants.h:75
grpc::load_reporter::kLbIdLength
constexpr size_t kLbIdLength
Definition: src/cpp/server/load_reporter/constants.h:40
grpc::load_reporter::CensusViewProviderDefaultImpl::CensusViewProviderDefaultImpl
CensusViewProviderDefaultImpl()
Definition: load_reporter.cc:195
grpc::load_reporter::LoadReporter::cpu_stats_provider_
std::unique_ptr< CpuStatsProvider > cpu_stats_provider_
Definition: load_reporter.h:233
grpc::load_reporter::kTagKeyHost
constexpr char kTagKeyHost[]
Definition: src/cpp/server/load_reporter/constants.h:55
grpc::load_reporter::LoadReporter::ReportStreamCreated
void ReportStreamCreated(const std::string &hostname, const std::string &lb_id, const std::string &load_key)
Definition: load_reporter.cc:389
GPR_DEBUG
#define GPR_DEBUG
Definition: include/grpc/impl/codegen/log.h:55
grpc::load_reporter::CallMetricValue
Definition: load_data_store.h:47
grpc::load_reporter::CensusViewProvider::CensusViewProvider
CensusViewProvider()
Definition: load_reporter.cc:50
grpc::load_reporter::kViewEndBytesSent
constexpr char kViewEndBytesSent[]
Definition: src/cpp/server/load_reporter/constants.h:73
grpc::load_reporter::CensusViewProvider::view_descriptor_map_
ViewDescriptorMap view_descriptor_map_
Definition: load_reporter.h:86
int32_t
signed int int32_t
Definition: stdint-msvc2008.h:77
grpc::load_reporter::kInvalidLbId
constexpr char kInvalidLbId[]
Definition: src/cpp/server/load_reporter/constants.h:44
grpc::load_reporter::LoadReporter::census_view_provider_
std::unique_ptr< CensusViewProvider > census_view_provider_
Definition: load_reporter.h:232
google::protobuf::python::descriptor::Count
static PyObject * Count(PyContainer *self, PyObject *item)
Definition: bloaty/third_party/protobuf/python/google/protobuf/pyext/descriptor_containers.cc:694
bytes_sent
static size_t bytes_sent
Definition: test-tcp-writealot.c:44
grpc::load_reporter::LoadReporter::ReportStreamClosed
void ReportStreamClosed(const std::string &hostname, const std::string &lb_id)
Definition: load_reporter.cc:399
grpc::load_reporter::CensusViewProvider::tag_key_host_
::opencensus::tags::TagKey tag_key_host_
Definition: load_reporter.h:89
grpc::load_reporter::LoadReporter::GenerateLbId
std::string GenerateLbId()
Definition: load_reporter.cc:227
grpc::load_reporter::kTagKeyToken
constexpr char kTagKeyToken[]
Definition: src/cpp/server/load_reporter/constants.h:54
grpc::load_reporter::LoadDataStore::MergeRow
void MergeRow(const std::string &hostname, const LoadRecordKey &key, const LoadRecordValue &value)
Definition: load_data_store.cc:293
grpc::load_reporter::LoadReporter::AppendNewFeedbackRecord
void AppendNewFeedbackRecord(uint64_t rpcs, uint64_t errors)
Definition: load_reporter.cc:376


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:16