Implement elapsed_time for VmBooted and VmExited
Bug: 243613715
Test: atest MicrodroidTestCase#testTelemetryPushedAtoms
Change-Id: I837c3c1606aa128663b703898c62ffb777938d44
diff --git a/virtualizationservice/src/atom.rs b/virtualizationservice/src/atom.rs
index feaa72a..01f3e27 100644
--- a/virtualizationservice/src/atom.rs
+++ b/virtualizationservice/src/atom.rs
@@ -25,6 +25,7 @@
use log::{trace, warn};
use microdroid_payload_config::VmPayloadConfig;
use statslog_virtualization_rust::{vm_booted, vm_creation_requested, vm_exited};
+use std::time::{Duration, SystemTime};
use zip::ZipArchive;
fn get_vm_payload_config(config: &VirtualMachineAppConfig) -> Result<VmPayloadConfig> {
@@ -36,6 +37,13 @@
Ok(vm_payload_config)
}
+fn get_duration(vm_start_timestamp: Option<SystemTime>) -> Duration {
+ match vm_start_timestamp {
+ Some(vm_start_timestamp) => vm_start_timestamp.elapsed().unwrap_or_default(),
+ None => Duration::default(),
+ }
+}
+
/// Write the stats of VMCreation to statsd
pub fn write_vm_creation_stats(
config: &VirtualMachineConfig,
@@ -116,8 +124,17 @@
}
/// Write the stats of VM boot to statsd
-pub fn write_vm_booted_stats(uid: i32, vm_identifier: &String) {
- let vm_booted = vm_booted::VmBooted { uid, vm_identifier };
+pub fn write_vm_booted_stats(
+ uid: i32,
+ vm_identifier: &String,
+ vm_start_timestamp: Option<SystemTime>,
+) {
+ let duration = get_duration(vm_start_timestamp);
+ let vm_booted = vm_booted::VmBooted {
+ uid,
+ vm_identifier,
+ elapsed_time_millis: duration.as_millis() as i64,
+ };
match vm_booted.stats_write() {
Err(e) => {
warn!("statslog_rust failed with error: {}", e);
@@ -127,10 +144,17 @@
}
/// Write the stats of VM exit to statsd
-pub fn write_vm_exited_stats(uid: i32, vm_identifier: &String, reason: DeathReason) {
+pub fn write_vm_exited_stats(
+ uid: i32,
+ vm_identifier: &String,
+ reason: DeathReason,
+ vm_start_timestamp: Option<SystemTime>,
+) {
+ let duration = get_duration(vm_start_timestamp);
let vm_exited = vm_exited::VmExited {
uid,
vm_identifier,
+ elapsed_time_millis: duration.as_millis() as i64,
death_reason: match reason {
DeathReason::INFRASTRUCTURE_ERROR => vm_exited::DeathReason::InfrastructureError,
DeathReason::KILLED => vm_exited::DeathReason::Killed,