blob: a3f9874fbc9d59a2f2c09165cbae78be7d9b0c59 [file] [log] [blame] [edit]
// Copyright 2021 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.
use fidl_fuchsia_cobalt::{CobaltEvent, EventPayload};
use fidl_fuchsia_cobalt_test::LoggerQuerierProxy;
pub struct ExpectedEvent {
pub metric_id: u32,
pub value: i64,
}
pub fn verify_event_present_once(events: &Vec<CobaltEvent>, expected_event: ExpectedEvent) -> bool {
let mut observed_count = 0;
for event in events {
match event.payload {
EventPayload::EventCount(event_count) => {
if event.metric_id == expected_event.metric_id
&& event_count.count == expected_event.value
{
observed_count += 1;
}
}
EventPayload::MemoryBytesUsed(value) => {
if event.metric_id == expected_event.metric_id && value == expected_event.value {
observed_count += 1;
}
}
_ => panic!("Only should be observing EventCount or MemoryBytesUsed; got {:?}", event),
}
}
observed_count == 1
}
pub struct LogQuerierConfig {
pub project_id: u32,
pub expected_batch_size: usize,
}
pub async fn gather_sample_group(
log_querier_config: LogQuerierConfig,
logger_querier: &LoggerQuerierProxy,
) -> Vec<CobaltEvent> {
let mut events: Vec<CobaltEvent> = Vec::new();
loop {
let watch = logger_querier.watch_logs(
log_querier_config.project_id,
fidl_fuchsia_cobalt_test::LogMethod::LogCobaltEvent,
);
let (mut new_events, more) = watch.await.unwrap().unwrap();
assert!(!more);
events.append(&mut new_events);
if events.len() < log_querier_config.expected_batch_size {
continue;
}
if events.len() == log_querier_config.expected_batch_size {
break;
}
panic!("Sampler should provide descrete groups of cobalt events. Shouldn't see more than {:?} here.", log_querier_config.expected_batch_size);
}
events
}