mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
[ML] Fixing issue with empty object creation (#186821)
Using `Object.create(null)` when creating objects for the anomaly results table.
This commit is contained in:
parent
9fd2978fd7
commit
8e76b0b113
1 changed files with 12 additions and 7 deletions
|
@ -125,7 +125,7 @@ function aggregateAnomalies(anomalyRecords, interval, dateFormatTz) {
|
|||
return [];
|
||||
}
|
||||
|
||||
const aggregatedData = {};
|
||||
const aggregatedData = Object.create(null);
|
||||
anomalyRecords.forEach((record) => {
|
||||
// Use moment.js to get start of interval.
|
||||
const roundedTime =
|
||||
|
@ -133,27 +133,32 @@ function aggregateAnomalies(anomalyRecords, interval, dateFormatTz) {
|
|||
? moment(record.timestamp).tz(dateFormatTz).startOf(interval).valueOf()
|
||||
: moment(record.timestamp).startOf(interval).valueOf();
|
||||
if (aggregatedData[roundedTime] === undefined) {
|
||||
aggregatedData[roundedTime] = {};
|
||||
aggregatedData[roundedTime] = Object.create(null);
|
||||
}
|
||||
|
||||
// Aggregate by job, then detectorIndex.
|
||||
const jobId = record.job_id;
|
||||
const jobsAtTime = aggregatedData[roundedTime];
|
||||
if (jobsAtTime[jobId] === undefined) {
|
||||
jobsAtTime[jobId] = {};
|
||||
if (jobsAtTime[jobId] === undefined || Object.hasOwn(jobsAtTime, jobId) === false) {
|
||||
jobsAtTime[jobId] = Object.create(null);
|
||||
}
|
||||
|
||||
// Aggregate by detector - default to function_description if no description available.
|
||||
const detectorIndex = record.detector_index;
|
||||
if (typeof detectorIndex !== 'number') {
|
||||
return;
|
||||
}
|
||||
const detectorsForJob = jobsAtTime[jobId];
|
||||
if (detectorsForJob[detectorIndex] === undefined) {
|
||||
detectorsForJob[detectorIndex] = {};
|
||||
detectorsForJob[detectorIndex] = Object.create(null);
|
||||
}
|
||||
|
||||
// Now add an object for the anomaly with the highest anomaly score per entity.
|
||||
// For the choice of entity, look in order for byField, overField, partitionField.
|
||||
// If no by/over/partition, default to an empty String.
|
||||
const entitiesForDetector = detectorsForJob[detectorIndex];
|
||||
const entitiesForDetector = Object.hasOwn(detectorsForJob, detectorIndex)
|
||||
? detectorsForJob[detectorIndex]
|
||||
: Object.create(null);
|
||||
|
||||
// TODO - are we worried about different byFields having the same
|
||||
// value e.g. host=server1 and machine=server1?
|
||||
|
@ -163,7 +168,7 @@ function aggregateAnomalies(anomalyRecords, interval, dateFormatTz) {
|
|||
}
|
||||
if (entitiesForDetector[entity] === undefined) {
|
||||
entitiesForDetector[entity] = record;
|
||||
} else {
|
||||
} else if (Object.hasOwn(entitiesForDetector, entity)) {
|
||||
if (record.record_score > entitiesForDetector[entity].record_score) {
|
||||
entitiesForDetector[entity] = record;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue