| // 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 "src/developer/debug/zxdb/console/google_analytics_client_manualtest.h" | |
| #include <stdio.h> | |
| #include <string> | |
| #include "src/developer/debug/shared/message_loop.h" | |
| #include "src/developer/debug/shared/message_loop_poll.h" | |
| using zxdb::GoogleAnalyticsClient; | |
| using zxdb::GoogleAnalyticsEvent; | |
| using zxdb::GoogleAnalyticsNetError; | |
| using zxdb::GoogleAnalyticsNetErrorType; | |
| using zxdb::ProcessAddEventResult; | |
| int main(int argc, char* argv[]) { | |
| if (argc != 3) { | |
| fprintf(stderr, "Usage: %s <tracking-id> <client-id>\n", argv[0]); | |
| return 1; | |
| } | |
| std::string tracking_id(argv[1]); | |
| std::string client_id(argv[2]); | |
| GoogleAnalyticsClient::CurlGlobalInit(); | |
| auto ga_client = GoogleAnalyticsClient(); | |
| ga_client.set_tracking_id(tracking_id); | |
| ga_client.set_client_id(client_id); | |
| ga_client.set_user_agent("Fuchsia-tools-lib-analytics"); | |
| auto event = GoogleAnalyticsEvent("test event", "test", "test label", 12345); | |
| debug_ipc::MessageLoopPoll loop; | |
| std::string error_message; | |
| if (!loop.Init(&error_message)) { | |
| fprintf(stderr, "Message loop initialization error: %s\n", error_message.c_str()); | |
| return 1; | |
| } | |
| // If ret is not set to 0 at the end, the program is not executed successfully. | |
| int ret = 1; | |
| // This scope forces all the objects to be destroyed before the Cleanup() call which will mark the | |
| // message loop as not-current. | |
| { | |
| auto p = | |
| ga_client.AddEvent(event).then([&ret](fit::result<void, GoogleAnalyticsNetError>& result) { | |
| ret = ProcessAddEventResult(result); | |
| debug_ipc::MessageLoop::Current()->QuitNow(); | |
| }); | |
| loop.schedule_task(std::move(p)); | |
| loop.Run(); | |
| } | |
| loop.Cleanup(); | |
| GoogleAnalyticsClient::CurlGlobalCleanup(); | |
| return ret; | |
| } | |
| namespace zxdb { | |
| int ProcessAddEventResult(const fit::result<void, GoogleAnalyticsNetError>& result) { | |
| int ret = 1; | |
| if (result.is_ok()) { | |
| printf("AddEvent success!\n"); | |
| ret = 0; | |
| } else { | |
| const auto& error = result.error(); | |
| std::string error_type; | |
| switch (error.type()) { | |
| case GoogleAnalyticsNetErrorType::kConnectionError: { | |
| error_type = "Connection error"; | |
| break; | |
| } | |
| case GoogleAnalyticsNetErrorType::kUnexpectedResponseCode: { | |
| error_type = "Unexpected response code"; | |
| break; | |
| } | |
| case GoogleAnalyticsNetErrorType::kAbandoned: { | |
| error_type = "Abandoned"; | |
| break; | |
| } | |
| } | |
| fprintf(stderr, "AddEvent failed: %s - %s\n", error_type.c_str(), error.details().c_str()); | |
| ret = 1; | |
| } | |
| return ret; | |
| } | |
| } // namespace zxdb |