fix missing history on the minute mark bug

This commit is contained in:
2025-01-25 09:48:45 -08:00
parent 39ddf45f0d
commit 4d90575f8b

View File

@@ -540,14 +540,32 @@ impl TelemetryHistory {
maximum_resolution: TimeDelta, maximum_resolution: TimeDelta,
telemetry_history_service: &TelemetryHistoryService, telemetry_history_service: &TelemetryHistoryService,
) -> Vec<TelemetryDataItem> { ) -> Vec<TelemetryDataItem> {
let mut result = vec![]; let mut disk_result = vec![];
let mut ram_result = vec![];
let segments = self.segments.read().await;
let mut from = from; let mut from = from;
let mut to = to;
let initial_to = to;
let mut ram_from_result = from;
{ {
let segments = self.segments.read().await;
let first_ram_segment = segments.front().map(|x| x.start); let first_ram_segment = segments.front().map(|x| x.start);
if let Some(first_ram_segment) = first_ram_segment {
let mut ram_from = first_ram_segment;
for i in 0..segments.len() {
let (new_from, new_data) = segments[i].get(ram_from, to, maximum_resolution);
ram_from = new_from;
ram_result.extend(new_data);
}
from = min(from, first_ram_segment);
to = min(to, first_ram_segment);
ram_from_result = ram_from;
}
}
{
let start = from let start = from
.duration_trunc(telemetry_history_service.segment_width) .duration_trunc(telemetry_history_service.segment_width)
.unwrap(); .unwrap();
@@ -555,12 +573,6 @@ impl TelemetryHistory {
.duration_trunc(telemetry_history_service.segment_width) .duration_trunc(telemetry_history_service.segment_width)
.unwrap(); .unwrap();
let end = if let Some(first_ram_segment) = first_ram_segment {
min(end, first_ram_segment)
} else {
end
};
let mut path = telemetry_history_service.data_root_folder.clone(); let mut path = telemetry_history_service.data_root_folder.clone();
path.push(&self.data.definition.uuid); path.push(&self.data.definition.uuid);
@@ -574,7 +586,7 @@ impl TelemetryHistory {
match disk.get(from, to, maximum_resolution, self.data.definition.data_type) { match disk.get(from, to, maximum_resolution, self.data.definition.data_type) {
Ok((new_from, new_data)) => { Ok((new_from, new_data)) => {
from = new_from; from = new_from;
result.extend(new_data); disk_result.extend(new_data);
} }
Err(err) => { Err(err) => {
error!("Failed to get from disk segment: {err}"); error!("Failed to get from disk segment: {err}");
@@ -585,13 +597,21 @@ impl TelemetryHistory {
} }
} }
{
// Go through the ram segments a second time to capture any data added since we dealt
// with the disk data
from = ram_from_result;
to = initial_to;
let segments = self.segments.read().await;
for i in 0..segments.len() { for i in 0..segments.len() {
let (new_from, new_data) = segments[i].get(from, to, maximum_resolution); let (new_from, new_data) = segments[i].get(from, to, maximum_resolution);
from = new_from; from = new_from;
result.extend(new_data); ram_result.extend(new_data);
}
} }
result disk_result.extend(ram_result);
disk_result
} }
pub async fn cleanup(&self, service: &TelemetryHistoryService) -> anyhow::Result<()> { pub async fn cleanup(&self, service: &TelemetryHistoryService) -> anyhow::Result<()> {