|
|
|
|
@ -24,8 +24,6 @@
|
|
|
|
|
#include <type_traits>
|
|
|
|
|
#include <utility>
|
|
|
|
|
|
|
|
|
|
#include "absl/log/log.h"
|
|
|
|
|
|
|
|
|
|
#include <grpc/support/log.h>
|
|
|
|
|
#include <grpcpp/ext/call_metric_recorder.h>
|
|
|
|
|
#include <grpcpp/ext/server_metric_recorder.h>
|
|
|
|
|
@ -71,36 +69,36 @@ void ServerMetricRecorder::UpdateBackendMetricDataState(
|
|
|
|
|
void ServerMetricRecorder::SetCpuUtilization(double value) {
|
|
|
|
|
if (!IsUtilizationWithSoftLimitsValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] CPU utilization rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] CPU utilization rejected: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
UpdateBackendMetricDataState(
|
|
|
|
|
[value](BackendMetricData* data) { data->cpu_utilization = value; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] CPU utilization set: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] CPU utilization set: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerMetricRecorder::SetMemoryUtilization(double value) {
|
|
|
|
|
if (!IsUtilizationValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Mem utilization rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Mem utilization rejected: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
UpdateBackendMetricDataState(
|
|
|
|
|
[value](BackendMetricData* data) { data->mem_utilization = value; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Mem utilization set: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Mem utilization set: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerMetricRecorder::SetApplicationUtilization(double value) {
|
|
|
|
|
if (!IsUtilizationWithSoftLimitsValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this
|
|
|
|
|
<< "] Application utilization rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Application utilization rejected: %f", this,
|
|
|
|
|
value);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
@ -108,49 +106,49 @@ void ServerMetricRecorder::SetApplicationUtilization(double value) {
|
|
|
|
|
data->application_utilization = value;
|
|
|
|
|
});
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Application utilization set: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Application utilization set: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerMetricRecorder::SetQps(double value) {
|
|
|
|
|
if (!IsRateValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] QPS rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] QPS rejected: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
UpdateBackendMetricDataState(
|
|
|
|
|
[value](BackendMetricData* data) { data->qps = value; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] QPS set: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] QPS set: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerMetricRecorder::SetEps(double value) {
|
|
|
|
|
if (!IsRateValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] EPS rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] EPS rejected: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
UpdateBackendMetricDataState(
|
|
|
|
|
[value](BackendMetricData* data) { data->eps = value; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] EPS set: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] EPS set: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerMetricRecorder::SetNamedUtilization(string_ref name, double value) {
|
|
|
|
|
if (!IsUtilizationValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Named utilization rejected: " << value
|
|
|
|
|
<< " name: " << std::string(name.data(), name.size());
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Named utilization rejected: %f name: %s", this,
|
|
|
|
|
value, std::string(name.data(), name.size()).c_str());
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Named utilization set: " << value
|
|
|
|
|
<< " name: " << std::string(name.data(), name.size());
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Named utilization set: %f name: %s", this, value,
|
|
|
|
|
std::string(name.data(), name.size()).c_str());
|
|
|
|
|
}
|
|
|
|
|
UpdateBackendMetricDataState([name, value](BackendMetricData* data) {
|
|
|
|
|
data->utilization[absl::string_view(name.data(), name.size())] = value;
|
|
|
|
|
@ -160,8 +158,8 @@ void ServerMetricRecorder::SetNamedUtilization(string_ref name, double value) {
|
|
|
|
|
void ServerMetricRecorder::SetAllNamedUtilization(
|
|
|
|
|
std::map<string_ref, double> named_utilization) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] All named utilization updated. size: "
|
|
|
|
|
<< named_utilization.size();
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] All named utilization updated. size: %" PRIuPTR,
|
|
|
|
|
this, named_utilization.size());
|
|
|
|
|
}
|
|
|
|
|
UpdateBackendMetricDataState(
|
|
|
|
|
[utilization = std::move(named_utilization)](BackendMetricData* data) {
|
|
|
|
|
@ -177,7 +175,7 @@ void ServerMetricRecorder::ClearCpuUtilization() {
|
|
|
|
|
UpdateBackendMetricDataState(
|
|
|
|
|
[](BackendMetricData* data) { data->cpu_utilization = -1; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] CPU utilization cleared.";
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] CPU utilization cleared.", this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -185,7 +183,7 @@ void ServerMetricRecorder::ClearMemoryUtilization() {
|
|
|
|
|
UpdateBackendMetricDataState(
|
|
|
|
|
[](BackendMetricData* data) { data->mem_utilization = -1; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Mem utilization cleared.";
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Mem utilization cleared.", this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -193,28 +191,28 @@ void ServerMetricRecorder::ClearApplicationUtilization() {
|
|
|
|
|
UpdateBackendMetricDataState(
|
|
|
|
|
[](BackendMetricData* data) { data->application_utilization = -1; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Application utilization cleared.";
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Application utilization cleared.", this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerMetricRecorder::ClearQps() {
|
|
|
|
|
UpdateBackendMetricDataState([](BackendMetricData* data) { data->qps = -1; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] QPS utilization cleared.";
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] QPS utilization cleared.", this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerMetricRecorder::ClearEps() {
|
|
|
|
|
UpdateBackendMetricDataState([](BackendMetricData* data) { data->eps = -1; });
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] EPS utilization cleared.";
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] EPS utilization cleared.", this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ServerMetricRecorder::ClearNamedUtilization(string_ref name) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Named utilization cleared. name: "
|
|
|
|
|
<< std::string(name.data(), name.size());
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Named utilization cleared. name: %s", this,
|
|
|
|
|
std::string(name.data(), name.size()).c_str());
|
|
|
|
|
}
|
|
|
|
|
UpdateBackendMetricDataState([name](BackendMetricData* data) {
|
|
|
|
|
data->utilization.erase(absl::string_view(name.data(), name.size()));
|
|
|
|
|
@ -235,13 +233,12 @@ ServerMetricRecorder::GetMetricsIfChanged() const {
|
|
|
|
|
}
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
const auto& data = result->data;
|
|
|
|
|
LOG(INFO) << "[" << this
|
|
|
|
|
<< "] GetMetrics() returned: seq:" << result->sequence_number
|
|
|
|
|
<< " cpu:" << data.cpu_utilization
|
|
|
|
|
<< " mem:" << data.mem_utilization
|
|
|
|
|
<< " app:" << data.application_utilization << " qps:" << data.qps
|
|
|
|
|
<< " eps:" << data.eps
|
|
|
|
|
<< " utilization size: " << data.utilization.size();
|
|
|
|
|
gpr_log(GPR_INFO,
|
|
|
|
|
"[%p] GetMetrics() returned: seq:%" PRIu64
|
|
|
|
|
" cpu:%f mem:%f app:%f qps:%f eps:%f utilization size: %" PRIuPTR,
|
|
|
|
|
this, result->sequence_number, data.cpu_utilization,
|
|
|
|
|
data.mem_utilization, data.application_utilization, data.qps,
|
|
|
|
|
data.eps, data.utilization.size());
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
@ -252,13 +249,13 @@ experimental::CallMetricRecorder&
|
|
|
|
|
BackendMetricState::RecordCpuUtilizationMetric(double value) {
|
|
|
|
|
if (!IsUtilizationWithSoftLimitsValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] CPU utilization value rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] CPU utilization value rejected: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
cpu_utilization_.store(value, std::memory_order_relaxed);
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] CPU utilization recorded: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] CPU utilization recorded: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -267,13 +264,13 @@ experimental::CallMetricRecorder&
|
|
|
|
|
BackendMetricState::RecordMemoryUtilizationMetric(double value) {
|
|
|
|
|
if (!IsUtilizationValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Mem utilization value rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Mem utilization value rejected: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
mem_utilization_.store(value, std::memory_order_relaxed);
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Mem utilization recorded: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Mem utilization recorded: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -282,14 +279,14 @@ experimental::CallMetricRecorder&
|
|
|
|
|
BackendMetricState::RecordApplicationUtilizationMetric(double value) {
|
|
|
|
|
if (!IsUtilizationWithSoftLimitsValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this
|
|
|
|
|
<< "] Application utilization value rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Application utilization value rejected: %f", this,
|
|
|
|
|
value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
application_utilization_.store(value, std::memory_order_relaxed);
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Application utilization recorded: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Application utilization recorded: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -298,13 +295,13 @@ experimental::CallMetricRecorder& BackendMetricState::RecordQpsMetric(
|
|
|
|
|
double value) {
|
|
|
|
|
if (!IsRateValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] QPS value rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] QPS value rejected: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
qps_.store(value, std::memory_order_relaxed);
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] QPS recorded: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] QPS recorded: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -313,13 +310,13 @@ experimental::CallMetricRecorder& BackendMetricState::RecordEpsMetric(
|
|
|
|
|
double value) {
|
|
|
|
|
if (!IsRateValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] EPS value rejected: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] EPS value rejected: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
eps_.store(value, std::memory_order_relaxed);
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] EPS recorded: " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] EPS recorded: %f", this, value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -328,8 +325,8 @@ experimental::CallMetricRecorder& BackendMetricState::RecordUtilizationMetric(
|
|
|
|
|
string_ref name, double value) {
|
|
|
|
|
if (!IsUtilizationValid(value)) {
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Utilization value rejected: "
|
|
|
|
|
<< std::string(name.data(), name.length()) << " " << value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Utilization value rejected: %s %f", this,
|
|
|
|
|
std::string(name.data(), name.length()).c_str(), value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -337,8 +334,8 @@ experimental::CallMetricRecorder& BackendMetricState::RecordUtilizationMetric(
|
|
|
|
|
absl::string_view name_sv(name.data(), name.length());
|
|
|
|
|
utilization_[name_sv] = value;
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Utilization recorded: " << name_sv << " "
|
|
|
|
|
<< value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Utilization recorded: %s %f", this,
|
|
|
|
|
std::string(name_sv).c_str(), value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -349,8 +346,8 @@ experimental::CallMetricRecorder& BackendMetricState::RecordRequestCostMetric(
|
|
|
|
|
absl::string_view name_sv(name.data(), name.length());
|
|
|
|
|
request_cost_[name_sv] = value;
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Request cost recorded: " << name_sv << " "
|
|
|
|
|
<< value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Request cost recorded: %s %f", this,
|
|
|
|
|
std::string(name_sv).c_str(), value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -361,8 +358,8 @@ experimental::CallMetricRecorder& BackendMetricState::RecordNamedMetric(
|
|
|
|
|
absl::string_view name_sv(name.data(), name.length());
|
|
|
|
|
named_metrics_[name_sv] = value;
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this << "] Named metric recorded: " << name_sv << " "
|
|
|
|
|
<< value;
|
|
|
|
|
gpr_log(GPR_INFO, "[%p] Named metric recorded: %s %f", this,
|
|
|
|
|
std::string(name_sv).c_str(), value);
|
|
|
|
|
}
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
@ -409,13 +406,13 @@ BackendMetricData BackendMetricState::GetBackendMetricData() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (GRPC_TRACE_FLAG_ENABLED(backend_metric)) {
|
|
|
|
|
LOG(INFO) << "[" << this
|
|
|
|
|
<< "] Backend metric data returned: cpu:" << data.cpu_utilization
|
|
|
|
|
<< " mem:" << data.mem_utilization << " qps:" << data.qps
|
|
|
|
|
<< " eps:" << data.eps
|
|
|
|
|
<< " utilization size:" << data.utilization.size()
|
|
|
|
|
<< " request_cost size:" << data.request_cost.size()
|
|
|
|
|
<< "named_metrics size:" << data.named_metrics.size();
|
|
|
|
|
gpr_log(GPR_INFO,
|
|
|
|
|
"[%p] Backend metric data returned: cpu:%f mem:%f qps:%f eps:%f "
|
|
|
|
|
"utilization size:%" PRIuPTR " request_cost size:%" PRIuPTR
|
|
|
|
|
"named_metrics size:%" PRIuPTR,
|
|
|
|
|
this, data.cpu_utilization, data.mem_utilization, data.qps,
|
|
|
|
|
data.eps, data.utilization.size(), data.request_cost.size(),
|
|
|
|
|
data.named_metrics.size());
|
|
|
|
|
}
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
|