You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.6 KiB
94 lines
2.6 KiB
import { createAnalyticUnitFromObject } from './utils'; |
|
import { AnalyticUnit } from './analytic_unit_model'; |
|
import { AnalyticUnitId, FindManyQuery } from './types'; |
|
import { Collection } from '../../services/data_service/collection'; |
|
import { makeDBQ, SortingOrder } from '../../services/data_service'; |
|
|
|
import { Metric } from 'grafana-datasource-kit'; |
|
|
|
import * as _ from 'lodash'; |
|
|
|
|
|
const db = makeDBQ(Collection.ANALYTIC_UNITS); |
|
|
|
export async function findById(id: AnalyticUnitId): Promise<AnalyticUnit | null> { |
|
let obj = await db.findOne(id); |
|
if (obj === null) { |
|
return null; |
|
} |
|
return createAnalyticUnitFromObject(obj); |
|
} |
|
|
|
export async function findMany(query: FindManyQuery): Promise<AnalyticUnit[]> { |
|
const analyticUnits = await db.findMany(query, { |
|
createdAt: SortingOrder.ASCENDING, |
|
name: SortingOrder.ASCENDING |
|
}); |
|
if (analyticUnits === null) { |
|
return []; |
|
} |
|
return analyticUnits.map(createAnalyticUnitFromObject); |
|
} |
|
|
|
|
|
/** |
|
* Creates and updates new unit.id |
|
* |
|
* @param unit to create |
|
* @returns unit.id |
|
*/ |
|
export async function create(unit: AnalyticUnit): Promise<AnalyticUnitId> { |
|
let obj = unit.toObject(); |
|
return db.insertOne(obj); |
|
} |
|
|
|
export async function insertMany(analyticUnits: AnalyticUnit[]): Promise<AnalyticUnitId[]> { |
|
return db.insertMany(analyticUnits); |
|
} |
|
|
|
export async function remove(id: AnalyticUnitId): Promise<void> { |
|
// TODO: remove it`s segments |
|
// TODO: remove it`s cache |
|
await db.removeOne(id); |
|
} |
|
|
|
/** |
|
* Changes values of analytic unit fields to according values of obj |
|
* |
|
* @param id analytic unit id |
|
* @param obj object with keys and values which need to be updated in analytic unit |
|
*/ |
|
export async function update(id: AnalyticUnitId, obj: any) { |
|
const analyticUnitObj = await db.findOne(id); |
|
if(analyticUnitObj === null) { |
|
throw new Error(`Analytic unit ${id} doesn't exist`); |
|
} |
|
|
|
const analyticUnit = createAnalyticUnitFromObject(analyticUnitObj); |
|
let updateObj: any = analyticUnit.toPanelObject(); |
|
delete updateObj.id; |
|
updateObj = _.mapValues(updateObj, (value, key) => { |
|
if(_.has(obj, key)) { |
|
return obj[key]; |
|
} |
|
return value; |
|
}); |
|
|
|
return db.updateOne(id, updateObj); |
|
} |
|
|
|
export async function setStatus(id: AnalyticUnitId, status: string, error?: string) { |
|
return db.updateOne(id, { status, error }); |
|
} |
|
|
|
export async function setDetectionTime(id: AnalyticUnitId, lastDetectionTime: number) { |
|
return db.updateOne(id, { lastDetectionTime }); |
|
} |
|
|
|
export async function setAlert(id: AnalyticUnitId, alert: boolean) { |
|
return db.updateOne(id, { alert }); |
|
} |
|
|
|
export async function setMetric(id: AnalyticUnitId, metric: Metric) { |
|
return db.updateOne(id, { metric }); |
|
}
|
|
|