Skip to content

Commit

Permalink
improvement(EventsTab): Multi-nemesis events
Browse files Browse the repository at this point in the history
Some events happen during multiple nemeses. This commit updates the
logic to find all nemeses that were active during a specific event,
instead of just looking for one like previously.

Fixes #470
  • Loading branch information
k0machi committed Jan 20, 2025
1 parent 65f07fe commit 3e74413
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 23 deletions.
48 changes: 30 additions & 18 deletions frontend/TestRun/EventsTab.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
import Fa from "svelte-fa";
import RawEvent from "./RawEvent.svelte";
import StructuredEvent from "./StructuredEvent.svelte";
import dayjs from "dayjs";
export let testRun;
let parsedEvents = [];
let filterString = "";
let nemesisByKey = {};
let nemesisPeriods = {};
const displayCategories = {
CRITICAL: {
Expand Down Expand Up @@ -92,10 +95,27 @@
return parsedEvent;
};
const calculateNemesisKey = function(nemesis) {
return `${nemesis.name}-${nemesis.start_time}-${nemesis.end_time}-${nemesis.target_node.name}`;
};
const defineNemesisPeriods = function(nemesisData) {
let periods = nemesisData.reduce((acc, nemesis) => {
acc[calculateNemesisKey(nemesis)] = {
start: dayjs.utc(nemesis.start_time * 1000).toDate(),
end: dayjs.utc(nemesis.end_time * 1000).toDate(),
};
return acc;
}, {});
return periods;
};
/**
* @param {{last_events: string[], event_amount: int, severity: string }[]} events
*/
const prepareEvents = function (events, nemesisData) {
const prepareEvents = function (events) {
let flatEvents = events.reduce((acc, val) => {
displayCategories[val.severity].totalEvents = val.event_amount;
displayCategories[val.severity].eventsSubmitted = val.last_events.length;
Expand All @@ -106,6 +126,9 @@
let parsed = {};
try {
parsed = parseEvent(val);
parsed.nemesis = Object.entries(nemesisPeriods)
.filter(([_, period]) => period.start <= parsed.time && period.end >= parsed.time)
.map(([key, _]) => nemesisByKey[key]);
} catch (error) {
parsed = {
time: new Date(0),
Expand All @@ -117,27 +140,16 @@
return parsed;
});
let sortedNemesises = nemesisData.sort((a, b) => a.start_time - b.start_time);
let nemesisIndex = 0;
for (let event of parsedEvents.sort((a, b) => a.time - b.time)) {
event.nemesis = undefined;
while(sortedNemesises[nemesisIndex]) {
if (event.time.getTime() < sortedNemesises[nemesisIndex].start_time * 1000) {
break;
} else if(event.time.getTime() <= sortedNemesises[nemesisIndex].end_time * 1000) {
event.nemesis = sortedNemesises[nemesisIndex];
break;
}
nemesisIndex++;
}
}
return parsedEvents.sort((a, b) => b.time - a.time);
};
onMount(() => {
parsedEvents = prepareEvents(testRun?.events ?? [], testRun?.nemesis_data ?? []);
nemesisByKey = testRun.nemesis_data.reduce((acc, val) => {
acc[calculateNemesisKey(val)] = val;
return acc;
}, {});
nemesisPeriods = defineNemesisPeriods(testRun.nemesis_data);
parsedEvents = prepareEvents(testRun?.events ?? []);
});
</script>
Expand Down
8 changes: 3 additions & 5 deletions frontend/TestRun/StructuredEvent.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,9 @@
<div class="event-header d-flex align-items-start flex-wrap">
<div class="ms-2 mb-2 bg-dark text-light rounded px-2">{event.eventType}</div>
<div class="ms-2 mb-2 rounded px-2 severity-{event.severity.toLowerCase()}">{event.severity}</div>
{#if event.nemesis}
<div class="ms-2 mb-2 rounded px-2 status-{event.nemesis.status.toLowerCase()}">{event.nemesis.name}</div>
{:else}
<div class="ms-2 mb-2 rounded px-2 status-skipped">no nemesis</div>
{/if}
{#each event.nemesis as nemesis}
<div class="ms-2 mb-2 rounded px-2 status-{nemesis.status.toLowerCase()}">{nemesis.name}</div>
{/each}
<div class="ms-auto mb-2 rounded px-2">
<button
class="btn btn-light"
Expand Down

0 comments on commit 3e74413

Please sign in to comment.