New metric for empty coverage (#3610)

* add

* Adding coverage output to every iteration of coverage task.

* Adding metric for empty coverage.

* Fixing.

* Fixing.
This commit is contained in:
Noah McGregor Harper
2023-10-31 13:56:29 -07:00
committed by GitHub
parent 902557f78c
commit ca6f3cdfd9
2 changed files with 10 additions and 3 deletions

View File

@ -28,7 +28,9 @@ use onefuzz_file_format::coverage::{
}; };
use onefuzz_result::job_result::JobResultData; use onefuzz_result::job_result::JobResultData;
use onefuzz_result::job_result::{JobResultSender, TaskJobResultClient}; use onefuzz_result::job_result::{JobResultSender, TaskJobResultClient};
use onefuzz_telemetry::{event, warn, Event::coverage_data, Event::coverage_failed, EventData}; use onefuzz_telemetry::{
event, warn, Event::coverage_data, Event::coverage_empty, Event::coverage_failed, EventData,
};
use storage_queue::{Message, QueueClient}; use storage_queue::{Message, QueueClient};
use tokio::fs; use tokio::fs;
use tokio::sync::RwLock; use tokio::sync::RwLock;
@ -148,7 +150,6 @@ impl CoverageTask {
info!("report initial coverage"); info!("report initial coverage");
context.report_coverage_stats().await; context.report_coverage_stats().await;
context.heartbeat.alive(); context.heartbeat.alive();
for dir in &self.config.readonly_inputs { for dir in &self.config.readonly_inputs {
@ -174,7 +175,6 @@ impl CoverageTask {
context.save_and_sync_coverage().await?; context.save_and_sync_coverage().await?;
} }
info!("report coverage");
context.report_coverage_stats().await; context.report_coverage_stats().await;
context.heartbeat.alive(); context.heartbeat.alive();
@ -308,6 +308,11 @@ impl<'a> TaskContext<'a> {
async fn try_record_input(&mut self, input: &Path) -> Result<()> { async fn try_record_input(&mut self, input: &Path) -> Result<()> {
let coverage = self.record_impl(input).await?; let coverage = self.record_impl(input).await?;
let coverage_stats = CoverageStats::new(&coverage);
if coverage_stats.covered == 0 {
event!(coverage_empty; EventData::Path = input.display().to_string());
metric!(coverage_empty; 1.0; EventData::Path = input.display().to_string());
}
let mut self_coverage = RwLock::write(&self.coverage).await; let mut self_coverage = RwLock::write(&self.coverage).await;
self_coverage.merge(&coverage); self_coverage.merge(&coverage);
Ok(()) Ok(())

View File

@ -76,6 +76,7 @@ pub enum Event {
task_start, task_start,
coverage_data, coverage_data,
coverage_failed, coverage_failed,
coverage_empty,
new_result, new_result,
new_crashdump, new_crashdump,
new_coverage, new_coverage,
@ -94,6 +95,7 @@ impl Event {
Self::task_start => "task_start", Self::task_start => "task_start",
Self::coverage_data => "coverage_data", Self::coverage_data => "coverage_data",
Self::coverage_failed => "coverage_failed", Self::coverage_failed => "coverage_failed",
Self::coverage_empty => "coverage_empty",
Self::new_coverage => "new_coverage", Self::new_coverage => "new_coverage",
Self::new_crashdump => "new_crashdump", Self::new_crashdump => "new_crashdump",
Self::new_result => "new_result", Self::new_result => "new_result",