|
22 | 22 | #include <grpcpp/grpcpp.h> |
23 | 23 | #include <grpcpp/opencensus.h> |
24 | 24 |
|
| 25 | +#include "absl/strings/escaping.h" |
25 | 26 | #include "absl/strings/numbers.h" |
26 | 27 | #include "absl/strings/str_cat.h" |
27 | 28 | #include "examples/grpc/hello.grpc.pb.h" |
@@ -60,6 +61,10 @@ opencensus::tags::TagKey CaseKey() { |
60 | 61 | return key; |
61 | 62 | } |
62 | 63 |
|
| 64 | +absl::string_view ToStringView(const ::grpc::string_ref &s) { |
| 65 | + return absl::string_view(s.data(), s.size()); |
| 66 | +} |
| 67 | + |
63 | 68 | // A helper function that performs some work in its own Span. |
64 | 69 | void PerformWork(opencensus::trace::Span *parent) { |
65 | 70 | auto span = opencensus::trace::Span::StartSpan("internal_work", parent); |
@@ -87,7 +92,16 @@ class HelloServiceImpl final : public HelloService::Service { |
87 | 92 | opencensus::stats::Record( |
88 | 93 | {{LettersMeasure(), request->name().size()}}, |
89 | 94 | {{CaseKey(), isupper(request->name()[0]) ? "upper" : "lower"}}); |
| 95 | + // Give feedback on stderr. |
90 | 96 | std::cerr << "SayHello RPC handled.\n"; |
| 97 | + std::cerr << " Metadata:\n"; |
| 98 | + auto metadata = context->client_metadata(); |
| 99 | + for (const auto &mdpair : metadata) { |
| 100 | + std::cerr << " \"" << absl::CEscape(ToStringView(mdpair.first)) |
| 101 | + << "\": \"" << absl::CEscape(ToStringView(mdpair.second)) |
| 102 | + << "\"\n"; |
| 103 | + } |
| 104 | + std::cerr << " (end of metadata)\n"; |
91 | 105 | return grpc::Status::OK; |
92 | 106 | } |
93 | 107 | }; |
|
0 commit comments