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.
scrutiny/webapp/frontend/src/app/shared/device-status.pipe.ts

72 lines
2.3 KiB

import {Pipe, PipeTransform} from '@angular/core';
import {MetricsStatusThreshold} from '../core/config/app.config';
import {DeviceModel} from '../core/models/device-model';
const DEVICE_STATUS_NAMES: { [key: number]: string } = {
0: 'passed',
1: 'failed',
2: 'failed',
3: 'failed'
};
const DEVICE_STATUS_NAMES_WITH_REASON: { [key: number]: string } = {
0: 'passed',
1: 'failed: smart',
2: 'failed: scrutiny',
3: 'failed: both'
};
@Pipe({
name: 'deviceStatus'
})
export class DeviceStatusPipe implements PipeTransform {
static deviceStatusForModelWithThreshold(
deviceModel: DeviceModel,
hasSmartResults: boolean = true,
threshold: MetricsStatusThreshold = MetricsStatusThreshold.Both,
includeReason: boolean = false
): string {
// no smart data, so treat the device status as unknown
if (!hasSmartResults) {
return 'unknown'
}
let statusNameLookup = DEVICE_STATUS_NAMES
if (includeReason) {
statusNameLookup = DEVICE_STATUS_NAMES_WITH_REASON
}
// determine the device status, by comparing it against the allowed threshold
// tslint:disable-next-line:no-bitwise
const deviceStatus = deviceModel.device_status & threshold
return statusNameLookup[deviceStatus]
}
// static deviceStatusForModelWithThreshold(deviceModel: DeviceModel | any, threshold: MetricsStatusThreshold): string {
// // tslint:disable-next-line:no-bitwise
// const deviceStatus = deviceModel?.device_status & threshold
// if(deviceStatus === 0){
// return 'passed'
// } else if(deviceStatus === 3){
// return 'failed: both'
// } else if(deviceStatus === 2) {
// return 'failed: scrutiny'
// } else if(deviceStatus === 1) {
// return 'failed: smart'
// }
// return 'unknown'
// }
transform(
deviceModel: DeviceModel,
hasSmartResults: boolean = true,
threshold: MetricsStatusThreshold = MetricsStatusThreshold.Both,
includeReason: boolean = false
): string {
return DeviceStatusPipe.deviceStatusForModelWithThreshold(deviceModel, hasSmartResults, threshold, includeReason)
}
}