import * as os from 'os'; import { FormatOptions, millisTo, prettyPrintJson, removeHTML } from 'af-tools-ts'; import { TAlert, TAlertEmailDetails } from '../i-alert'; export const htmlTemplate = `
${prettyPrintJson.toHtml(json, prettyPrintJsonOptions)}\n`;
};
const rSpace = (str: string, strLength: number) => {
str = removeHTML(String(str || ''));
if (str.length < strLength) {
return ' '.repeat(Math.min(Math.max(0, strLength - str.length), 10000));
}
return '';
};
export const alertEmailDetails = (options: { detailsArray: TAlertEmailDetails, wrapPre?: boolean, indent?: string, prefix?: string }): string => {
const { detailsArray, wrapPre = false, indent = '', prefix = '' } = options;
const padLen = Math.max(...detailsArray.map(([label]) => removeHTML(label).length)) + 2;
const details = detailsArray.map(([label, text]) => indent + prefix + label + rSpace(label, padLen) + text).join('\n');
return wrapPre ? `${details}` : details;
};
export const alertEmailHeader = (args: { alert: TAlert, wrapPre?: boolean, indent?: string, prefix?: string }): string => {
const { alert, wrapPre = false, indent = '', prefix = '# ' } = args;
const { eventName } = alert;
const detailsArray: TAlertEmailDetails = [[millisTo.human.utc.z(alert.ts), `Event: [${eventName}]`]];
let header = alertEmailDetails({ detailsArray, indent, prefix });
header = `${header}`;
return wrapPre ? `${header}` : header;
};
const THIS_HOST_NAME = os.hostname();
const COMMON_LINK_PART = `/alerts?clue=1,100,ts,1$f:ts=null;createdAt=null;tsFrom=null;tsTo=null`;
const getTypedAlertsLink = (linkBase: string, alertTypeId: number) => `${linkBase}${COMMON_LINK_PART};alertTypeId=${alertTypeId}`;
const getCertainAlertsLink = (linkBase: string, alertGUID: string) => `${linkBase}${COMMON_LINK_PART};guid=${alertGUID}`;
export const alertEmailFooter = (args: {
alert: TAlert,
wrapPre?: boolean,
indent?: string,
prefix?: string,
linkBase?: string,
}): string => {
const { alert, wrapPre = false, indent = '', prefix = '# ', linkBase } = args;
const { hashTags = [], guid, alertTypeId = 0 } = alert;
const detailsArray: TAlertEmailDetails = [];
if (linkBase) {
detailsArray.push(['Signal URL', getCertainAlertsLink(linkBase, guid)]);
}
detailsArray.push(['Service host', THIS_HOST_NAME], ...hashTags.map((tag) => [tag, '']) as TAlertEmailDetails);
if (linkBase) {
detailsArray.push([`Alerts of type`, getTypedAlertsLink(linkBase, alertTypeId)]);
}
let footer = alertEmailDetails({ detailsArray, indent, prefix });
footer = ``;
return wrapPre ? `${footer}` : footer;
};