The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
4.2 KiB
125 lines
4.2 KiB
// |
|
// Copyright 2022 gRPC 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. |
|
// |
|
|
|
#ifndef GRPC_INTERNAL_CPP_EXT_GCP_OBSERVABILITY_GCP_OBSERVABILITY_CONFIG_H |
|
#define GRPC_INTERNAL_CPP_EXT_GCP_OBSERVABILITY_GCP_OBSERVABILITY_CONFIG_H |
|
|
|
#include <stdint.h> |
|
|
|
#include <string> |
|
#include <vector> |
|
|
|
#include "absl/status/statusor.h" |
|
#include "absl/strings/string_view.h" |
|
#include "absl/types/optional.h" |
|
|
|
#include "src/core/lib/gprpp/validation_errors.h" |
|
#include "src/core/lib/json/json.h" |
|
#include "src/core/lib/json/json_args.h" |
|
#include "src/core/lib/json/json_object_loader.h" |
|
|
|
namespace grpc { |
|
namespace internal { |
|
|
|
struct GcpObservabilityConfig { |
|
struct CloudLogging { |
|
struct RpcEventConfiguration { |
|
struct ParsedMethod { |
|
absl::string_view service; // backed by methods |
|
absl::string_view method; // backed by methods |
|
}; |
|
std::vector<std::string> qualified_methods; |
|
std::vector<ParsedMethod> parsed_methods; |
|
bool exclude = false; |
|
uint32_t max_metadata_bytes = 0; |
|
uint32_t max_message_bytes = 0; |
|
|
|
static const grpc_core::JsonLoaderInterface* JsonLoader( |
|
const grpc_core::JsonArgs&); |
|
|
|
void JsonPostLoad(const grpc_core::Json& json, |
|
const grpc_core::JsonArgs& args, |
|
grpc_core::ValidationErrors* errors); |
|
}; |
|
|
|
std::vector<RpcEventConfiguration> client_rpc_events; |
|
std::vector<RpcEventConfiguration> server_rpc_events; |
|
|
|
static const grpc_core::JsonLoaderInterface* JsonLoader( |
|
const grpc_core::JsonArgs&) { |
|
static const auto* loader = |
|
grpc_core::JsonObjectLoader<CloudLogging>() |
|
.OptionalField("client_rpc_events", |
|
&CloudLogging::client_rpc_events) |
|
.OptionalField("server_rpc_events", |
|
&CloudLogging::server_rpc_events) |
|
.Finish(); |
|
return loader; |
|
} |
|
}; |
|
|
|
struct CloudMonitoring { |
|
static const grpc_core::JsonLoaderInterface* JsonLoader( |
|
const grpc_core::JsonArgs&) { |
|
static const auto* loader = |
|
grpc_core::JsonObjectLoader<CloudMonitoring>().Finish(); |
|
return loader; |
|
} |
|
}; |
|
|
|
struct CloudTrace { |
|
float sampling_rate = 0; |
|
|
|
static const grpc_core::JsonLoaderInterface* JsonLoader( |
|
const grpc_core::JsonArgs&) { |
|
static const auto* loader = |
|
grpc_core::JsonObjectLoader<CloudTrace>() |
|
.OptionalField("sampling_rate", &CloudTrace::sampling_rate) |
|
.Finish(); |
|
return loader; |
|
} |
|
}; |
|
|
|
absl::optional<CloudLogging> cloud_logging; |
|
absl::optional<CloudMonitoring> cloud_monitoring; |
|
absl::optional<CloudTrace> cloud_trace; |
|
std::string project_id; |
|
|
|
static const grpc_core::JsonLoaderInterface* JsonLoader( |
|
const grpc_core::JsonArgs&) { |
|
static const auto* loader = |
|
grpc_core::JsonObjectLoader<GcpObservabilityConfig>() |
|
.OptionalField("cloud_logging", |
|
&GcpObservabilityConfig::cloud_logging) |
|
.OptionalField("cloud_monitoring", |
|
&GcpObservabilityConfig::cloud_monitoring) |
|
.OptionalField("cloud_trace", &GcpObservabilityConfig::cloud_trace) |
|
.OptionalField("project_id", &GcpObservabilityConfig::project_id) |
|
.Finish(); |
|
return loader; |
|
} |
|
|
|
// Tries to load the contents of GcpObservabilityConfig from the file located |
|
// by the value of environment variable `GRPC_OBSERVABILITY_CONFIG_FILE`. If |
|
// `GRPC_OBSERVABILITY_CONFIG_FILE` is unset, falls back to |
|
// `GRPC_OBSERVABILITY_CONFIG`. |
|
static absl::StatusOr<GcpObservabilityConfig> ReadFromEnv(); |
|
}; |
|
|
|
} // namespace internal |
|
} // namespace grpc |
|
|
|
#endif // GRPC_INTERNAL_CPP_EXT_GCP_OBSERVABILITY_GCP_OBSERVABILITY_CONFIG_H
|
|
|