From 021bd5e7a2fbc68216267ba7a8f0916a22402b44 Mon Sep 17 00:00:00 2001 From: Keshav Manghat Date: Wed, 19 Aug 2020 21:19:14 -0600 Subject: [PATCH] zPages: zPages tracez basic example (#268) --- examples/zpages/BUILD | 31 +++++++++++++++++ examples/zpages/zpages_example.cc | 57 +++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 examples/zpages/BUILD create mode 100644 examples/zpages/zpages_example.cc diff --git a/examples/zpages/BUILD b/examples/zpages/BUILD new file mode 100644 index 00000000000..a277c448106 --- /dev/null +++ b/examples/zpages/BUILD @@ -0,0 +1,31 @@ +# Copyright 2020, OpenTelemetry 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. + +package(default_visibility = ["//visibility:public"]) + +cc_binary( + name = "zpages_example", + srcs = [ + "zpages_example.cc", + ], + linkopts = select({ + "//bazel:windows": [], + "//conditions:default": ["-pthread"], + }), + deps = [ + "//ext:headers", + "//ext/src/zpages", + "//sdk/src/trace", + ], +) diff --git a/examples/zpages/zpages_example.cc b/examples/zpages/zpages_example.cc new file mode 100644 index 00000000000..f89f8f95d99 --- /dev/null +++ b/examples/zpages/zpages_example.cc @@ -0,0 +1,57 @@ +/** + * This is a basic example for zpages that helps users get familiar with how to + * use this feature in OpenTelemetery + */ +#include +#include +#include +#include "opentelemetry/context/threadlocal_context.h" + +#include "opentelemetry/ext/zpages/zpages.h" // Required file include for zpages + +using opentelemetry::core::SteadyTimestamp; + +int main(int argc, char *argv[]) +{ + + /** + * The following line initializes zPages and starts a webserver at + * http://localhost:30000/tracez/ where spans that are created in the application + * can be viewed. + * Note that the webserver is destroyed after the application ends execution. + */ + ZPages::Initialize(); + auto tracer = opentelemetry::trace::Provider::GetTracerProvider()->GetTracer(""); + + std::cout << "This example for zPages creates a few types of spans and then " + << "creates a span every second for the duration of the application" + << "\n"; + + // Error span + std::map attribute_map; + attribute_map["completed_search_for"] = "Unknown user"; + tracer->StartSpan("find user", attribute_map) + ->SetStatus(opentelemetry::trace::CanonicalCode::NOT_FOUND, "User not found"); + + // Long time duration span + std::map attribute_map2; + attribute_map2["completed_search_for"] = "John Doe"; + opentelemetry::trace::StartSpanOptions start; + start.start_steady_time = SteadyTimestamp(nanoseconds(1)); + opentelemetry::trace::EndSpanOptions end; + end.end_steady_time = SteadyTimestamp(nanoseconds(1000000000000)); + tracer->StartSpan("find user", attribute_map2, start)->End(end); + + // Running(deadlock) span + std::map attribute_map3; + attribute_map3["searching_for"] = "Deleted user"; + auto running_span = tracer->StartSpan("find user", attribute_map3); + + // Create a completed span every second till user stops the loop + std::cout << "Presss CTRL+C to stop...\n"; + while (true) + { + std::this_thread::sleep_for(seconds(1)); + tracer->StartSpan("ping user")->End(); + } +}