All files / utils/backend alarmStatus.ts

85.71% Statements 18/21
80% Branches 4/5
100% Functions 1/1
85.71% Lines 18/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 421x         1x   1x   1x   1x 1x                       7x 7x 7x 7x 7x 7x   7x 2x 2x   7x 7x       7x  
import {
  GetObjectCommand, S3Client
} from '@aws-sdk/client-s3';
 
import { AlertCategory } from '@/types/backend/alerts';
import { getLogger } from '@/utils/common/logger';
 
const logger = getLogger('utils/backend/alarmStatus');
 
const s3 = new S3Client();
 
export const ALARM_S3_BUCKET = process.env.COSTS_BUCKET;
export const ALARM_S3_KEY = 'alarm-data.json';
 
export interface DataCache {
  [key: string]: {
    type: AlertCategory;
    lastAlarm?: number;
    lastOk?: number;
    lastOkSent?: number;
    lastReason?: string;
  };
}
 
export async function getCachedAlarmData(): Promise<DataCache> {
  try {
    const rawData = await s3.send(new GetObjectCommand({
      Bucket: ALARM_S3_BUCKET,
      Key: ALARM_S3_KEY,
    }));
 
    if (typeof rawData.Body === 'undefined') {
      return {};
    }
 
    return JSON.parse(await rawData?.Body.transformToString('utf-8')) as DataCache;
  } catch (e) {
    logger.error('Failed to get cached alarm data', e);
    throw e;
  }
}