mirror of https://github.com/grpc/grpc.git
parent
7a2a8ca4ba
commit
f5f1d57d7a
35 changed files with 5760 additions and 10284 deletions
@ -0,0 +1,108 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2018 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_CORE_EXT_FILTERS_LOAD_REPORTING_REGISTERED_OPENCENSUS_OBJECTS_H |
||||
#define GRPC_CORE_EXT_FILTERS_LOAD_REPORTING_REGISTERED_OPENCENSUS_OBJECTS_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include "opencensus/stats/stats.h" |
||||
|
||||
#include "src/cpp/server/load_reporter/constants.h" |
||||
|
||||
namespace grpc { |
||||
namespace load_reporter { |
||||
|
||||
// Measures.
|
||||
|
||||
::opencensus::stats::MeasureInt64 MeasureStartCount() { |
||||
static const ::opencensus::stats::MeasureInt64 start_count = |
||||
::opencensus::stats::MeasureInt64::Register( |
||||
kMeasureStartCount, kMeasureStartCount, kMeasureStartCount); |
||||
return start_count; |
||||
} |
||||
|
||||
::opencensus::stats::MeasureInt64 MeasureEndCount() { |
||||
static const ::opencensus::stats::MeasureInt64 end_count = |
||||
::opencensus::stats::MeasureInt64::Register( |
||||
kMeasureEndCount, kMeasureEndCount, kMeasureEndCount); |
||||
return end_count; |
||||
} |
||||
|
||||
::opencensus::stats::MeasureInt64 MeasureEndBytesSent() { |
||||
static const ::opencensus::stats::MeasureInt64 end_bytes_sent = |
||||
::opencensus::stats::MeasureInt64::Register( |
||||
kMeasureEndBytesSent, kMeasureEndBytesSent, kMeasureEndBytesSent); |
||||
return end_bytes_sent; |
||||
} |
||||
|
||||
::opencensus::stats::MeasureInt64 MeasureEndBytesReceived() { |
||||
static const ::opencensus::stats::MeasureInt64 end_bytes_received = |
||||
::opencensus::stats::MeasureInt64::Register(kMeasureEndBytesReceived, |
||||
kMeasureEndBytesReceived, |
||||
kMeasureEndBytesReceived); |
||||
return end_bytes_received; |
||||
} |
||||
|
||||
::opencensus::stats::MeasureInt64 MeasureEndLatencyMs() { |
||||
static const ::opencensus::stats::MeasureInt64 end_latency_ms = |
||||
::opencensus::stats::MeasureInt64::Register( |
||||
kMeasureEndLatencyMs, kMeasureEndLatencyMs, kMeasureEndLatencyMs); |
||||
return end_latency_ms; |
||||
} |
||||
|
||||
::opencensus::stats::MeasureDouble MeasureOtherCallMetric() { |
||||
static const ::opencensus::stats::MeasureDouble other_call_metric = |
||||
::opencensus::stats::MeasureDouble::Register(kMeasureOtherCallMetric, |
||||
kMeasureOtherCallMetric, |
||||
kMeasureOtherCallMetric); |
||||
return other_call_metric; |
||||
} |
||||
|
||||
// Tags.
|
||||
|
||||
opencensus::stats::TagKey TagKeyToken() { |
||||
static const auto token = opencensus::stats::TagKey::Register(kTagKeyToken); |
||||
return token; |
||||
} |
||||
|
||||
opencensus::stats::TagKey TagKeyHost() { |
||||
static const auto token = opencensus::stats::TagKey::Register(kTagKeyHost); |
||||
return token; |
||||
} |
||||
opencensus::stats::TagKey TagKeyUserId() { |
||||
static const auto token = opencensus::stats::TagKey::Register(kTagKeyUserId); |
||||
return token; |
||||
} |
||||
|
||||
opencensus::stats::TagKey TagKeyStatus() { |
||||
static const auto token = opencensus::stats::TagKey::Register(kTagKeyStatus); |
||||
return token; |
||||
} |
||||
|
||||
opencensus::stats::TagKey TagKeyMetricName() { |
||||
static const auto token = |
||||
opencensus::stats::TagKey::Register(kTagKeyMetricName); |
||||
return token; |
||||
} |
||||
|
||||
} // namespace load_reporter
|
||||
} // namespace grpc
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_LOAD_REPORTING_REGISTERED_OPENCENSUS_OBJECTS_H \ |
||||
*/ |
@ -1,71 +0,0 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016 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. |
||||
* |
||||
*/ |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <limits.h> |
||||
#include <string.h> |
||||
|
||||
#include <grpc/load_reporting.h> |
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/sync.h> |
||||
|
||||
#include "src/core/ext/filters/load_reporting/server_load_reporting_filter.h" |
||||
#include "src/core/ext/filters/load_reporting/server_load_reporting_plugin.h" |
||||
#include "src/core/lib/channel/channel_stack_builder.h" |
||||
#include "src/core/lib/slice/slice_internal.h" |
||||
#include "src/core/lib/surface/call.h" |
||||
#include "src/core/lib/surface/channel_init.h" |
||||
|
||||
static bool is_load_reporting_enabled(const grpc_channel_args* a) { |
||||
return grpc_channel_arg_get_bool( |
||||
grpc_channel_args_find(a, GRPC_ARG_ENABLE_LOAD_REPORTING), false); |
||||
} |
||||
|
||||
static bool maybe_add_server_load_reporting_filter( |
||||
grpc_channel_stack_builder* builder, void* arg) { |
||||
const grpc_channel_args* args = |
||||
grpc_channel_stack_builder_get_channel_arguments(builder); |
||||
const grpc_channel_filter* filter = |
||||
static_cast<const grpc_channel_filter*>(arg); |
||||
grpc_channel_stack_builder_iterator* it = |
||||
grpc_channel_stack_builder_iterator_find(builder, filter->name); |
||||
const bool already_has_load_reporting_filter = |
||||
!grpc_channel_stack_builder_iterator_is_end(it); |
||||
grpc_channel_stack_builder_iterator_destroy(it); |
||||
if (is_load_reporting_enabled(args) && !already_has_load_reporting_filter) { |
||||
return grpc_channel_stack_builder_prepend_filter(builder, filter, nullptr, |
||||
nullptr); |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
grpc_arg grpc_load_reporting_enable_arg() { |
||||
return grpc_channel_arg_integer_create((char*)GRPC_ARG_ENABLE_LOAD_REPORTING, |
||||
1); |
||||
} |
||||
|
||||
/* Plugin registration */ |
||||
|
||||
void grpc_server_load_reporting_plugin_init(void) { |
||||
grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX, |
||||
maybe_add_server_load_reporting_filter, |
||||
(void*)&grpc_server_load_reporting_filter); |
||||
} |
||||
|
||||
void grpc_server_load_reporting_plugin_shutdown() {} |
@ -1,61 +0,0 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016 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_CORE_EXT_FILTERS_LOAD_REPORTING_SERVER_LOAD_REPORTING_PLUGIN_H |
||||
#define GRPC_CORE_EXT_FILTERS_LOAD_REPORTING_SERVER_LOAD_REPORTING_PLUGIN_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <grpc/impl/codegen/grpc_types.h> |
||||
|
||||
#include "src/core/lib/channel/channel_stack.h" |
||||
|
||||
/** Identifiers for the invocation point of the users LR callback */ |
||||
typedef enum grpc_load_reporting_source { |
||||
GRPC_LR_POINT_UNKNOWN = 0, |
||||
GRPC_LR_POINT_CHANNEL_CREATION, |
||||
GRPC_LR_POINT_CHANNEL_DESTRUCTION, |
||||
GRPC_LR_POINT_CALL_CREATION, |
||||
GRPC_LR_POINT_CALL_DESTRUCTION |
||||
} grpc_load_reporting_source; |
||||
|
||||
/** Call information to be passed to the provided LR callback. */ |
||||
typedef struct grpc_load_reporting_call_data { |
||||
const grpc_load_reporting_source source; /**< point of last data update. */ |
||||
|
||||
/** Unique identifier for the channel associated with the data */ |
||||
intptr_t channel_id; |
||||
|
||||
/** Unique identifier for the call associated with the data. If the call
|
||||
* hasn't been created yet, it'll have a value of zero. */ |
||||
intptr_t call_id; |
||||
|
||||
/** Only valid when \a source is \a GRPC_LR_POINT_CALL_DESTRUCTION, that is,
|
||||
* once the call has completed */ |
||||
const grpc_call_final_info* final_info; |
||||
|
||||
const char* initial_md_string; /**< value string for LR's initial md key */ |
||||
const char* trailing_md_string; /**< value string for LR's trailing md key */ |
||||
const char* method_name; /**< Corresponds to :path header */ |
||||
} grpc_load_reporting_call_data; |
||||
|
||||
/** Return a \a grpc_arg enabling load reporting */ |
||||
grpc_arg grpc_load_reporting_enable_arg(); |
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_LOAD_REPORTING_SERVER_LOAD_REPORTING_PLUGIN_H \ |
||||
*/ |
@ -1,120 +0,0 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016 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. |
||||
* |
||||
*/ |
||||
|
||||
#include "test/core/end2end/end2end_tests.h" |
||||
|
||||
#include <string.h> |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/sync.h> |
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel.h" |
||||
#include "src/core/ext/filters/http/server/http_server_filter.h" |
||||
#include "src/core/ext/filters/load_reporting/server_load_reporting_plugin.h" |
||||
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" |
||||
#include "src/core/lib/channel/channel_args.h" |
||||
#include "src/core/lib/channel/connected_channel.h" |
||||
#include "src/core/lib/gpr/host_port.h" |
||||
#include "src/core/lib/surface/channel.h" |
||||
#include "src/core/lib/surface/server.h" |
||||
#include "test/core/util/port.h" |
||||
#include "test/core/util/test_config.h" |
||||
|
||||
typedef struct load_reporting_fixture_data { |
||||
char* localaddr; |
||||
} load_reporting_fixture_data; |
||||
|
||||
static grpc_end2end_test_fixture chttp2_create_fixture_load_reporting( |
||||
grpc_channel_args* client_args, grpc_channel_args* server_args) { |
||||
grpc_end2end_test_fixture f; |
||||
int port = grpc_pick_unused_port_or_die(); |
||||
load_reporting_fixture_data* ffd = static_cast<load_reporting_fixture_data*>( |
||||
gpr_malloc(sizeof(load_reporting_fixture_data))); |
||||
memset(&f, 0, sizeof(f)); |
||||
|
||||
gpr_join_host_port(&ffd->localaddr, "localhost", port); |
||||
|
||||
f.fixture_data = ffd; |
||||
f.cq = grpc_completion_queue_create_for_next(nullptr); |
||||
f.shutdown_cq = grpc_completion_queue_create_for_pluck(nullptr); |
||||
|
||||
return f; |
||||
} |
||||
|
||||
void chttp2_init_client_load_reporting(grpc_end2end_test_fixture* f, |
||||
grpc_channel_args* client_args) { |
||||
load_reporting_fixture_data* ffd = |
||||
static_cast<load_reporting_fixture_data*>(f->fixture_data); |
||||
f->client = |
||||
grpc_insecure_channel_create(ffd->localaddr, client_args, nullptr); |
||||
GPR_ASSERT(f->client); |
||||
} |
||||
|
||||
void chttp2_init_server_load_reporting(grpc_end2end_test_fixture* f, |
||||
grpc_channel_args* server_args) { |
||||
load_reporting_fixture_data* ffd = |
||||
static_cast<load_reporting_fixture_data*>(f->fixture_data); |
||||
grpc_arg arg = grpc_load_reporting_enable_arg(); |
||||
if (f->server) { |
||||
grpc_server_destroy(f->server); |
||||
} |
||||
server_args = grpc_channel_args_copy_and_add(server_args, &arg, 1); |
||||
f->server = grpc_server_create(server_args, nullptr); |
||||
{ |
||||
grpc_core::ExecCtx exec_ctx; |
||||
grpc_channel_args_destroy(server_args); |
||||
} |
||||
grpc_server_register_completion_queue(f->server, f->cq, nullptr); |
||||
GPR_ASSERT(grpc_server_add_insecure_http2_port(f->server, ffd->localaddr)); |
||||
grpc_server_start(f->server); |
||||
} |
||||
|
||||
void chttp2_tear_down_load_reporting(grpc_end2end_test_fixture* f) { |
||||
load_reporting_fixture_data* ffd = |
||||
static_cast<load_reporting_fixture_data*>(f->fixture_data); |
||||
gpr_free(ffd->localaddr); |
||||
gpr_free(ffd); |
||||
} |
||||
|
||||
/* All test configurations */ |
||||
static grpc_end2end_test_config configs[] = { |
||||
{"chttp2/fullstack+load_reporting", |
||||
FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION | |
||||
FEATURE_MASK_SUPPORTS_CLIENT_CHANNEL | |
||||
FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER, |
||||
nullptr, chttp2_create_fixture_load_reporting, |
||||
chttp2_init_client_load_reporting, chttp2_init_server_load_reporting, |
||||
chttp2_tear_down_load_reporting}, |
||||
}; |
||||
|
||||
int main(int argc, char** argv) { |
||||
size_t i; |
||||
|
||||
grpc_test_init(argc, argv); |
||||
grpc_end2end_tests_pre_init(); |
||||
grpc_init(); |
||||
|
||||
for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) { |
||||
grpc_end2end_tests(argc, argv, configs[i]); |
||||
} |
||||
|
||||
grpc_shutdown(); |
||||
|
||||
return 0; |
||||
} |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue