core/reporters/nginx.reporter.ts
core/reporters/nginx.reporter.ts is a file in Bane's Lab Deploy. 109 lines of code and 13 definitions.
import {
BACKUP_FIELD,
LOCAL_FILE_FIELD,
MONITORING_FIELD,
NGINX_ATTACHMENT,
OPERATION_FIELD,
PREVIEW_FIELD,
PULL_FAILURE_TITLE,
PULL_SUCCESS_TITLE,
PUSH_FAILURE_TITLE,
PUSH_SUCCESS_TITLE,
RELOADED_VALUE,
RELOAD_FIELD,
ROLLBACK_ATTEMPTED,
ROLLBACK_FIELD,
SITE_FIELD,
SOURCE_FIELD,
SYSTEM_FIELD,
TEST_PASSED_VALUE,
VALIDATION_FIELD,
} from "#configuration/strings/notification.strings";
import { ELLIPSIS, MONITORING } from "#configuration/constants/deployment.constants";
import { ERROR_COLOR, INFO_COLOR, NGINX_COLOR, UPDATES_ROLE } from "#configuration/constants/discord.constants";
import type { Journal, Span } from "#types/deployment.types";
import { NGINX_FOLDER, PREVIEW_LENGTH } from "#configuration/constants/nginx.constants";
import { code, fencedBlock, link } from "#core/converters/markdown.converter";
import { embed, failureAttachment, failureField, field, notify, timing } from "#core/reporters/notification.reporter";
import type { EmbedField } from "#types/discord.types";
import { NOT_AVAILABLE } from "#configuration/strings/deployment.strings";
import { SITE_URL } from "@banes-lab/web/core/assets/link.assets.ts";
import { basename } from "node:path";
import { describeSystem } from "#core/probes/system.probe";
import { readFileSync } from "node:fs";
import { truncate } from "#core/converters/text.converter";
const PULL = "pull";
const PUSH = "push";
const tail = function tail(): EmbedField {
return field(SYSTEM_FIELD, describeSystem());
};
const backupField = function backupField(backup: string): EmbedField {
return field(BACKUP_FIELD, backup.length > 0 ? code(basename(backup)) : NOT_AVAILABLE, true);
};
export const reportPull = async function reportPull(
journal: Journal,
url: string,
span: Span,
local: string,
): Promise<boolean> {
const fields = [
field(OPERATION_FIELD, code(PULL), true),
...timing(span, true),
field(LOCAL_FILE_FIELD, code(basename(local)), true),
field(SOURCE_FIELD, code(SITE_URL), true),
tail(),
];
return notify(journal, url, UPDATES_ROLE, embed(PULL_SUCCESS_TITLE, INFO_COLOR, fields));
};
export const reportPullFailure = async function reportPullFailure(
journal: Journal,
url: string,
span: Span,
failure: string,
): Promise<boolean> {
const fields = [failureField(failure), field(OPERATION_FIELD, code(PULL), true), ...timing(span, false), tail()];
const message = embed(PULL_FAILURE_TITLE, ERROR_COLOR, fields);
return notify(journal, url, UPDATES_ROLE, message, failureAttachment(failure));
};
export const reportPush = async function reportPush(
journal: Journal,
url: string,
span: Span,
backup: string,
config: string,
): Promise<boolean> {
const content = readFileSync(config, "utf8");
const [security] = MONITORING;
const preview = truncate(content, PREVIEW_LENGTH, ELLIPSIS);
const fields = [
field(OPERATION_FIELD, code(PUSH), true),
...timing(span, true),
backupField(backup),
field(VALIDATION_FIELD, code(TEST_PASSED_VALUE), true),
field(RELOAD_FIELD, code(RELOADED_VALUE), true),
field(SITE_FIELD, link(SITE_URL, SITE_URL), true),
field(MONITORING_FIELD, security === undefined ? NOT_AVAILABLE : link(security[0], security[1])),
field(PREVIEW_FIELD, fencedBlock(NGINX_FOLDER, preview)),
tail(),
];
const message = embed(PUSH_SUCCESS_TITLE, NGINX_COLOR, fields);
return notify(journal, url, UPDATES_ROLE, message, { content, name: NGINX_ATTACHMENT });
};
export const reportPushFailure = async function reportPushFailure(
journal: Journal,
url: string,
span: Span,
backup: string,
failure: string,
): Promise<boolean> {
const fields = [
failureField(failure),
field(OPERATION_FIELD, code(PUSH), true),
...timing(span, false),
backupField(backup),
field(ROLLBACK_FIELD, backup.length > 0 ? ROLLBACK_ATTEMPTED : NOT_AVAILABLE, true),
tail(),
];
const message = embed(PUSH_FAILURE_TITLE, ERROR_COLOR, fields);
return notify(journal, url, UPDATES_ROLE, message, failureAttachment(failure));
};