@prefecthq/prefect-ui-library
Version:
This library is the Vue and Typescript component library for [Prefect 2](https://github.com/PrefectHQ/prefect) and [Prefect Cloud 2](https://www.prefect.io/cloud/). _The components and utilities in this project are not meant to be used independently_.
96 lines (85 loc) • 3.11 kB
text/typescript
import { AutomationTrigger } from '@/automations'
import { createTuple, secondsToString } from '@/utilities'
export type ServiceLevelAgreementSeverity = 'minor' | 'low' | 'moderate' | 'high' | 'critical'
export const { values: ServiceLevelAgreementType, isValue: isServiceLevelAgreementType } = createTuple(['FrequencySla', 'LatenessSla', 'TimeToCompletionSla'])
export type ServiceLevelAgreementType = typeof ServiceLevelAgreementType[number]
export type ServiceLevelAgreementDisplayType = 'Frequency' | 'Lateness' | 'Time to Completion'
export interface IServiceLevelAgreement {
id: string,
name: string,
description: string,
enabled: boolean,
trigger: AutomationTrigger,
severity: ServiceLevelAgreementSeverity,
type: ServiceLevelAgreementType,
created: Date,
updated: Date,
account: string,
workspace: string,
actor: {
actorId: string,
handle: string,
userId: string | null,
botId: string | null,
},
}
export class ServiceLevelAgreement implements IServiceLevelAgreement {
public readonly id: string
public readonly name: string
public readonly description: string
public readonly enabled: boolean
public readonly trigger: AutomationTrigger
public readonly severity: ServiceLevelAgreementSeverity
public readonly type: ServiceLevelAgreementType
public readonly created: Date
public readonly updated: Date
public readonly account: string
public readonly workspace: string
public readonly actor: {
actorId: string,
handle: string,
userId: string | null,
botId: string | null,
}
public constructor(serviceLevelAgreement: IServiceLevelAgreement) {
this.id = serviceLevelAgreement.id
this.name = serviceLevelAgreement.name
this.description = serviceLevelAgreement.description
this.enabled = serviceLevelAgreement.enabled
this.trigger = serviceLevelAgreement.trigger
this.created = serviceLevelAgreement.created
this.updated = serviceLevelAgreement.updated
this.account = serviceLevelAgreement.account
this.workspace = serviceLevelAgreement.workspace
this.actor = serviceLevelAgreement.actor
this.severity = serviceLevelAgreement.severity
this.type = serviceLevelAgreement.type
}
public durationInSeconds(): number {
return this.trigger.within
}
public getSlaDefinitionKeyValuePairs(): { key: string, value: unknown }[] {
switch (this.type) {
case 'FrequencySla':
return [{ key: 'Stale After', value: secondsToString(this.trigger.within) }]
case 'LatenessSla':
return [{ key: 'Within', value: secondsToString(this.trigger.within) }]
case 'TimeToCompletionSla':
return [{ key: 'Duration', value: secondsToString(this.trigger.within) }]
default:
return []
}
}
public getDisplaySlaType(): ServiceLevelAgreementDisplayType {
switch (this.type) {
case 'FrequencySla':
return 'Frequency'
case 'LatenessSla':
return 'Lateness'
case 'TimeToCompletionSla':
return 'Time to Completion'
default:
return 'Time to Completion'
}
}
}