| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <lib/async-loop/cpp/loop.h> |
| #include <lib/async-loop/default.h> |
| #include <lib/inspect/component/cpp/component.h> |
| #include <lib/sys/cpp/component_context.h> |
| #include <lib/syslog/cpp/log_settings.h> |
| #include <lib/syslog/cpp/macros.h> |
| #include <zircon/status.h> |
| |
| #include "reverser.h" |
| |
| int main(int argc, char** argv) { |
| fuchsia_logging::LogSettingsBuilder builder; |
| builder.WithTags({"inspect_cpp_codelab", "part4"}).BuildAndInitialize(); |
| |
| FX_LOGS(INFO) << "Starting up..."; |
| |
| // Standard component setup, create an event loop and obtain the |
| // ComponentContext. |
| async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread); |
| auto context = sys::ComponentContext::CreateAndServeOutgoingDirectory(); |
| |
| // Create an inspector for this component. |
| inspect::ComponentInspector inspector(loop.dispatcher(), {}); |
| |
| // ComponentInspector has built-in health checking. Set it to "starting up" so snapshots show we |
| // may still be initializing. |
| inspector.Health().StartingUp(); |
| |
| // Create a version string. |
| // We pass the inspector along when creating the property to tie their lifecycles together. |
| // It is an error to not retain the created property. |
| inspector.root().RecordString("version", "part4"); |
| |
| // Serve the reverser service. |
| context->outgoing()->AddPublicService( |
| Reverser::CreateDefaultHandler(inspector.root().CreateChild("reverser_service"))); |
| |
| // Send a request to the FizzBuzz service and print the response when it arrives. |
| fuchsia::examples::inspect::FizzBuzzPtr fizz_buzz; |
| context->svc()->Connect(fizz_buzz.NewRequest()); |
| |
| // Create an error handler for the FizzBuzz service. |
| fizz_buzz.set_error_handler([&](zx_status_t status) { |
| char message[256]; |
| snprintf(message, 256, "FizzBuzz connection closed: %s", zx_status_get_string(status)); |
| inspector.Health().Unhealthy(message); |
| }); |
| |
| fizz_buzz->Execute(30, [&](std::string result) { |
| // Once we get FizzBuzz response, set health to OK. |
| inspector.Health().Ok(); |
| FX_LOGS(INFO) << "Got FizzBuzz: " << result; |
| }); |
| |
| // Run the loop. |
| loop.Run(); |
| return 0; |
| } |