Skip to content

Commit f5fd04b

Browse files
committed
Include instance_id from the instance database
Preferring the user or `cvd` identifiers rather than generating sequential numbers. Bug: 450049144
1 parent dad182f commit f5fd04b

File tree

5 files changed

+46
-34
lines changed

5 files changed

+46
-34
lines changed

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,23 @@ constexpr char kAvbtool[] = "avbtool";
3131

3232
} // namespace
3333

34-
Result<std::vector<GuestInfo>> GetGuestInfo(const GuestPaths& guest_paths) {
35-
std::vector<GuestInfo> result;
36-
result.reserve(guest_paths.artifacts.size());
37-
int i = 1;
34+
Result<std::vector<GuestMetrics>> GetGuestMetrics(const Guests& guests) {
35+
std::vector<GuestMetrics> result;
36+
result.reserve(guests.guest_infos.size());
3837

39-
for (const std::string& artifact_path : guest_paths.artifacts) {
38+
for (const GuestInfo& guest : guests.guest_infos) {
4039
const std::string boot_image_path =
41-
fmt::format("{}/boot.img", artifact_path);
40+
fmt::format("{}/boot.img", guest.product_out);
4241
const std::string avbtool_path =
43-
fmt::format("{}/bin/{}", guest_paths.host_artifacts, kAvbtool);
44-
result.emplace_back(GuestInfo{
45-
.instance_number = i,
42+
fmt::format("{}/bin/{}", guests.host_artifacts, kAvbtool);
43+
result.emplace_back(GuestMetrics{
44+
.instance_id = guest.instance_id,
4645
.os_version = CF_EXPECTF(
4746
ReadAndroidVersionFromBootImage(boot_image_path, avbtool_path),
4847
"Failed to read guest os version from \"{}\" using `{}` at "
4948
"\"{}\".",
5049
boot_image_path, kAvbtool, avbtool_path),
5150
});
52-
i++;
5351
}
5452
return result;
5553
}

base/cvd/cuttlefish/host/libs/metrics/guest_metrics.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#pragma once
1818

19+
#include <cstdint>
1920
#include <string>
2021
#include <string_view>
2122
#include <vector>
@@ -24,16 +25,21 @@
2425

2526
namespace cuttlefish {
2627

27-
struct GuestPaths {
28+
struct GuestInfo {
29+
uint32_t instance_id;
30+
std::string product_out;
31+
};
32+
33+
struct Guests {
2834
std::string host_artifacts;
29-
std::vector<std::string> artifacts;
35+
std::vector<GuestInfo> guest_infos;
3036
};
3137

32-
struct GuestInfo {
33-
int instance_number;
38+
struct GuestMetrics {
39+
uint32_t instance_id;
3440
std::string os_version;
3541
};
3642

37-
Result<std::vector<GuestInfo>> GetGuestInfo(const GuestPaths& guest_paths);
43+
Result<std::vector<GuestMetrics>> GetGuestMetrics(const Guests& guests);
3844

3945
} // namespace cuttlefish

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,11 @@ CuttlefishLogEvent BuildCuttlefishLogEvent(const MetricsData& metrics_data) {
104104

105105
MetricsEventV2& metrics_event = *cf_log_event.mutable_metrics_event_v2();
106106

107-
for (const GuestInfo& guest_info : metrics_data.guest_metrics) {
107+
for (const GuestMetrics& guest_info : metrics_data.guest_metrics) {
108108
CuttlefishGuest& guest = *metrics_event.add_guest();
109109
guest.set_event_type(ConvertEventType(metrics_data.event_type));
110-
guest.set_guest_id(fmt::format("{}-{}", metrics_data.session_id,
111-
guest_info.instance_number));
110+
guest.set_guest_id(
111+
fmt::format("{}-{}", metrics_data.session_id, guest_info.instance_id));
112112
guest.set_guest_os_version(guest_info.os_version);
113113
}
114114

base/cvd/cuttlefish/host/libs/metrics/metrics_conversion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ struct MetricsData {
3333
std::string cf_common_version;
3434
std::chrono::milliseconds now;
3535
HostInfo host_metrics;
36-
std::vector<GuestInfo> guest_metrics;
36+
std::vector<GuestMetrics> guest_metrics;
3737
};
3838

3939
wireless_android_play_playlog::LogRequest ConstructLogRequest(

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

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "cuttlefish/common/libs/utils/result.h"
3232
#include "cuttlefish/common/libs/utils/tee_logging.h"
3333
#include "cuttlefish/host/commands/cvd/instances/instance_group_record.h"
34+
#include "cuttlefish/host/commands/cvd/instances/instance_record.h"
3435
#include "cuttlefish/host/commands/cvd/metrics/is_enabled.h"
3536
#include "cuttlefish/host/commands/cvd/version/version.h"
3637
#include "cuttlefish/host/libs/metrics/event_type.h"
@@ -58,37 +59,44 @@ constexpr char kReadmeText[] =
5859

5960
struct MetricsPaths {
6061
std::string metrics_directory;
61-
GuestPaths guest_paths;
62+
Guests guests;
6263
};
6364

6465
std::chrono::milliseconds GetEpochTime() {
6566
auto now = std::chrono::system_clock::now().time_since_epoch();
6667
return std::chrono::duration_cast<std::chrono::milliseconds>(now);
6768
}
6869

69-
// use as many ProductOut values are available, then pad with the first value up
70-
// to the number of instances
71-
std::vector<std::string> GetProductOutPaths(
72-
const std::string& group_product_out, const int instance_count) {
73-
std::vector<std::string> result =
70+
std::vector<GuestInfo> GetGuestInfos(
71+
const std::string& group_product_out,
72+
const std::vector<LocalInstance>& instances) {
73+
std::vector<GuestInfo> result;
74+
75+
// Split always returns at least one element
76+
std::vector<std::string> product_out_paths =
7477
android::base::Split(group_product_out, ",");
75-
if (!result.empty() && result.size() < instance_count) {
76-
for (int i = result.size(); i < instance_count; i++) {
77-
result.emplace_back(result.front());
78+
for (int i = 0; i < instances.size(); i++) {
79+
auto guest = GuestInfo{
80+
.instance_id = instances[i].id(),
81+
};
82+
if (product_out_paths.size() > i) {
83+
guest.product_out = product_out_paths[i];
84+
} else { // pad with the first value
85+
guest.product_out = product_out_paths.front();
7886
}
87+
result.emplace_back(guest);
7988
}
8089
return result;
8190
}
8291

8392
MetricsPaths GetMetricsPaths(const LocalInstanceGroup& instance_group) {
8493
return MetricsPaths{
8594
.metrics_directory = instance_group.MetricsDir(),
86-
.guest_paths =
87-
GuestPaths{
95+
.guests =
96+
Guests{
8897
.host_artifacts = instance_group.HostArtifactsPath(),
89-
.artifacts =
90-
GetProductOutPaths(instance_group.ProductOutPath(),
91-
instance_group.Instances().size()),
98+
.guest_infos = GetGuestInfos(instance_group.ProductOutPath(),
99+
instance_group.Instances()),
92100
},
93101
};
94102
}
@@ -110,7 +118,7 @@ Result<MetricsData> GatherMetrics(const MetricsPaths& metrics_paths,
110118
.cf_common_version = GetVersionIds().ToString(),
111119
.now = GetEpochTime(),
112120
.host_metrics = GetHostInfo(),
113-
.guest_metrics = CF_EXPECT(GetGuestInfo(metrics_paths.guest_paths)),
121+
.guest_metrics = CF_EXPECT(GetGuestMetrics(metrics_paths.guests)),
114122
};
115123
}
116124

0 commit comments

Comments
 (0)