import { Rule } from "../rule"; import { Context } from "../context"; import { Options } from "../options"; import { Client } from "../client"; export default class ComputeUsage extends Rule { private readonly absolute: number; private readonly percentage: number; private readonly usageName: string; private readonly subscriptionId; constructor(context: Context, options: Options) { super(context, options); this.absolute = options.number("absolute", -1); this.percentage = options.number("percentage", 80); this.usageName = options.string("name", "cores"); this.subscriptionId = options.string("subscription", null); } async run(client: Client): Promise { const usageItems = await client.listUsages(this.subscriptionId); for (const usageItem of usageItems) { const { location, usage } = usageItem; if (usage.name.value === this.usageName) { if (usage.limit > 0) { const percentage = (usage.currentValue / usage.limit) * 100; if (this.percentage !== -1 && percentage > this.percentage) { this.report(location, "computeUsageOverPercentage", { usageName: this.usageName, percentage: this.percentage, currentValue: percentage }); } } if (this.absolute !== -1 && usage.currentValue > this.absolute) { this.report(location, "computeUsageOverAbsolute", { usageName: this.usageName, absolute: this.absolute, currentValue: usage.currentValue, limit: usage.limit }); } } } } }