Skip to content

Commit 3475277

Browse files
committed
Copy+clean up transmission logic from v1 metrics
Moving over `send.h/cc` logic into `metrics_transmitter.h/cc`. This way we can use a `Result` to surface errors, or make other improvements without concern for modifying the original metrics code. Bug: 452136634
1 parent 44f154a commit 3475277

File tree

2 files changed

+47
-8
lines changed

2 files changed

+47
-8
lines changed

base/cvd/cuttlefish/host/libs/metrics/BUILD.bazel

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,11 @@ cf_cc_library(
100100
],
101101
deps = [
102102
"//cuttlefish/common/libs/utils:result",
103-
"//cuttlefish/host/commands/metrics:send",
104-
"//cuttlefish/host/libs/metrics:metrics_headers",
103+
# TODO CJR: do we need all of these?
104+
"//cuttlefish/host/libs/web/http_client",
105+
"//cuttlefish/host/libs/web/http_client:curl_global_init",
106+
"//cuttlefish/host/libs/web/http_client:curl_http_client",
107+
"//cuttlefish/host/libs/web/http_client:http_string",
105108
"//external_proto:clientanalytics_cc_proto",
106109
],
107110
)

base/cvd/cuttlefish/host/libs/metrics/metrics_transmitter.cc

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,54 @@
1717
#include "cuttlefish/host/libs/metrics/metrics_transmitter.h"
1818

1919
#include "cuttlefish/common/libs/utils/result.h"
20-
#include "cuttlefish/host/commands/metrics/send.h"
21-
#include "cuttlefish/host/libs/metrics/metrics_defs.h"
20+
#include "cuttlefish/host/libs/web/http_client/curl_global_init.h"
21+
#include "cuttlefish/host/libs/web/http_client/curl_http_client.h"
22+
#include "cuttlefish/host/libs/web/http_client/http_client.h"
23+
#include "cuttlefish/host/libs/web/http_client/http_string.h"
2224
#include "external_proto/clientanalytics.pb.h"
2325

2426
namespace cuttlefish {
27+
namespace {
28+
29+
// TODO: chadreynolds - create a compilation or runtime flag to swap
30+
// environments
31+
enum class ClearcutEnvironment {
32+
kLocal = 0,
33+
kStaging = 1,
34+
kProd = 2,
35+
};
36+
37+
std::string ClearcutEnvironmentUrl(const ClearcutEnvironment environment) {
38+
switch (environment) {
39+
case ClearcutEnvironment::kLocal:
40+
return "http://localhost:27910/log";
41+
case ClearcutEnvironment::kStaging:
42+
return "https://play.googleapis.com:443/staging/log";
43+
case ClearcutEnvironment::kProd:
44+
return "https://play.googleapis.com:443/log";
45+
}
46+
}
47+
48+
Result<void> PostRequest(HttpClient& http_client, const std::string& output,
49+
const ClearcutEnvironment server) {
50+
const std::string clearcut_url = ClearcutEnvironmentUrl(server);
51+
HttpResponse<std::string> response =
52+
CF_EXPECT(HttpPostToString(http_client, clearcut_url, output));
53+
CF_EXPECTF(response.HttpSuccess(), "Metrics POST failed ({}): {}",
54+
response.http_code, response.data);
55+
return {};
56+
}
57+
58+
} // namespace
2559

2660
Result<void> TransmitMetricsEvent(
2761
const wireless_android_play_playlog::LogRequest& log_request) {
28-
int reporting_outcome = metrics::PostRequest(log_request.SerializeAsString(),
29-
metrics::ClearcutServer::kProd);
30-
CF_EXPECTF(reporting_outcome != MetricsExitCodes::kSuccess,
31-
"Issue reporting metrics: {}", reporting_outcome);
62+
CurlGlobalInit curl_global_init;
63+
std::unique_ptr<HttpClient> http_client = CurlHttpClient();
64+
CF_EXPECT(http_client.get() != nullptr,
65+
"Unable to create cURL client for metrics transmission");
66+
CF_EXPECT(PostRequest(*http_client, log_request.SerializeAsString(),
67+
ClearcutEnvironment::kProd));
3268
return {};
3369
}
3470

0 commit comments

Comments
 (0)