Рубрики
Uncategorized

Журнал Mailer для (узла) JS. Соглашите свою почту для журнала/ошибки со всего вашего приложения и отправьте его, когда захотите.

Привет, я Даниэль, и я хочу представить вам один из моих маленьких миньонов, которые я разработал в контексте … Tagged с ShowDev, Node, JavaScript, DevOps.

Привет, я Даниэль, и я хочу представить вам один из моих маленьких миньонов, которые я разработал в контексте моего нынешнего побочного проекта, Фонд глобального уровня № 1 , который является фондом акций на основе машинного обучения (ISIN DE000A2PE1D2).

Смотрите также мой другой миньон под названием «Терпеливо». Вы можете найти больше информации о терпеливо Здесь и Здесь Анкет

Я был бы так счастлив за звезду GitHub на моем репо. 😃 😍 Я очень ищу для обсуждений и комментариев. Благодарю вас!

Краткое описание

Подумайте о следующем сценарии: в вашем приложении есть несколько событий, и вы хотите, чтобы их заметили по электронной почте. Ну, если у вас есть одно уведомление, то у вас есть одно письмо. Это нормально. Но что, если у вас много уведомлений о времени выполнения, брошенные функциями, разбросанными по всему вашему приложению? Тогда вам придется собирать все эти уведомления в файл (журнал) и отправить его, когда ваше приложение будет завершено. Многие регистраторы могут записать в файлы. Но что, если вы хотите иметь хорошо отформатированную HTML -электронную почту? Тогда вы можете использовать Logmailer.:)

Где найти

logmailer @ github

logmailer @ npm

А «Почему»

В контексте бокового проекта я отвечаю за разработку и работу нескольких веб -скребков, которые работают несколько раз в день и загружают данные веб -сайта, обрабатывают их и записывают в базы данных. Поскольку это мой «боковой» проект, у меня не так много времени для мониторинга и отчетности. Но: поскольку приложения являются важной частью программного обеспечения, стоящего за фондом на основе ML, требуется высокая стабильность и прозрачность.

Если что -то пойдет не так, команда должна знать об этом. Также нам нужен отчет для выполнения приложения.

Поэтому мне нужен какой -то наблюдатель, чтобы наблюдать за выполнением приложения (задание) и уведомить нас, если есть какие -либо инциденты. Также нам нужен отчет за работу в аналитических целях.

Я разделяю эти инциденты на серьезные («ошибки») и менее серьезные инциденты («предупреждения»). Ошибки должны быть немедленно проверены «команда DevOps», которая является моей коллегой и я. Например, Если наши базы данных или веб -сервисы не работают. Предупреждения не должны быть обработаны мгновенно. Это достаточно хорошо, если они оцениваются в более поздний момент времени. Например, если одна из многих записей данных коррумпирован.

Поскольку это мой «боковой» проект, у меня не так много времени для мониторинга и отчетности. Поэтому я хочу быть уведомленным, только если есть серьезные инциденты.

Только если серьезные инциденты происходят во время работы, мой коллега И я хочу быть уведомленным непосредственно по электронной почте на наши частные адреса электронной почты. Обычный отчет и предупреждения могут быть отправлены по адресу группы.

В контексте этих сценариев можно получить следующие требования:

  • Нам нужен хорошо структурированный отчет, отправленный по электронной почте нашей группе Адрес электронной почты
  • Мы должны быть уведомлены по электронной почте по нашим частным адресам электронной почты, если в выполнении приложения были серьезные инциденты, в то время как электронное письмо также должно быть хорошо структурировано, чтобы наиболее важная информация могла быть получена быстро
  • Отчет должен быть агрегирован из нескольких мест по всему приложению

Во время моего исследования о существующих библиотеках или пакетах я наткнулся на общих лесозаготовок, таких как Уинстон или аналогичные. Такие регистраторы могут регистрировать текст в файлы, которые затем можно отправить по электронной почте. Но это было не то, что мне было нужно. Мне нужны были хорошо отформатированы и структурированные электронные письма. Другое решение, которое я обнаружил, было отправить электронное письмо на каждую ошибку. Есть регистраторы, которые можно настроить таким образом. Но это было не то, что мне было нужно, потому что мне нужна агрегированная электронная почта и отчет.

Поэтому я решил разработать свой собственный сервис уведомлений — или лучше: logmailer Анкет

Пожалуйста, см. Ниже скриншоты некоторых примеров журнала почты.

Установка

Использование NPM:

$ npm install logmailer

Как использовать

Настройте Logmailer (изначально)

Создайте файл для создания и настройки Logmailer (например, logmailer.js). Обязательно экспортируйте сами логисты и ваши главы.

logmailer.js

    let { logmailer, Recipient, Chapter, StandardChapters } = require("logmailer");
    // import { logmailer, Recipient, Chapter, StandardChapters } from "logmailer";

    // the order in this object is the order of the chapters in the email
    let chapters = {
        summary: StandardChapters.Summary,
        ffOnly: new Chapter("Firefighter only", false, "DeepPink"),
        managerOnly: new Chapter("Manager only", false, "DarkSlateBlue"),
        errors: StandardChapters.Errors,
        logs: StandardChapters.Logs
    }

    logmailer.create({
        appName: "My App",
        mailAlias: "myapp@mymail.com",
        client: {
            host: "smtp.googlemail.com",
            user: "user",
            password: "password",
            ssl: true
        },
        recipients: [
            "baerbel@gmx.de", // receives everything

            // receives email if the "managerOnly" chapter is not empty
            // receives only the chapter "managerOnly"
            new Recipient("guenther@gmail.com", [chapters.managerOnly], [chapters.managerOnly]),

            // receives email if the "ffOnly" chapter is not empty
            // receives only the chapters "ffOnly" and "errors"
            new Recipient("horst@web.de", [chapters.ffOnly], [chapters.summary, chapters.ffOnly, chapters.errors]),
        ],
        chapters: chapters
    })

    module.exports.logmail = chapters;
    module.exports.logmailer = logmailer;

Глава класса

Глава это объект единственной главы

let Chapter: new (name: string, hasCount?: boolean, color?: string) => Chapter

Параметры:

  • @Param имя — Имя главы, например «Резюме»
  • @Param hascount — (Необязательно, по умолчанию неверно) установите True, если вы хотите подсчитать, как часто вы добавляете контент в главу (хорошо для ошибок или предупреждений)
  • @Param Цвет — (Необязательно, по умолчанию — «черный») Используйте цвета, чтобы раскрасить заголовки (вы можете использовать HEX, RGB, RGBA, цветные коды и т. Д. но важно, чтобы почтовый клиент мог правильно отобразить цвет)

Получатель класс

Получатель один объект получателя

let Recipient: new (emailAddress: string, getsEmailOnlyIfChaptersNotEmpty?: Chapter[], canOnlySeeChapters?: Chapter[]) => Recipient

Параметры:

  • @Param Адрес электронной почты
  • @Param getSemailonlyifchaptersnotempty — (Необязательно) массив глав, например [wathers.errors], получатель получит электронное письмо только в том случае, если будет не менее 1 зарегистрированной ошибки
  • @Param CanonlySeeChapters — (Необязательно) массив глав, например [главы. Зарегистрированные ошибки

Используйте Logmailer

Во всех других ваших файлах вы можете просто импортировать свои главы и Logmailer и использовать их.

myapp.js

    let { logmailer, logmail } = require("./logmailer");
    // import { logmailer, logmail } from "./logmailer";

    logmail.summary.add("Starting time", `Starting app run now: ${new Date().toISOString()}`);

    // ..

    logmail.errors.add("Error heading", "Info about error");
    logmail.errors.add(null, "Further info about error");
    logmail.errors.add(null, "Further info about error");

    // ..

    logmail.managerOnly.add("Info for the manager heading", "Info for the manager");
    logmail.managerOnly.add(null, "Further info for the manager");
    logmail.managerOnly.add(null, "Further info for the manager");

    // ..

    logmail.ffOnly.add("Info for the firefighter heading", "Instructions for the firefighter");
    logmail.ffOnly.add(null, "Further instructions");
    logmail.ffOnly.add(null, "Further instructions");

Отправить почту

    logmailer.sendMail(err => {
        if (err) {
            console.log("error while sending", err);
        } else {
            console.log("mail sent successfully");
        }
    })

Сбросьте свои главы

    logmail.errors.reset();
    logmail.warnings.reset();

Формат объектов или массивов объектов как HTML столы

    let object = {
        "row1, col1": "row1, col2",
        "row2, col1": "row2, col2",
        "row3, col1": {
            "row3.1, col2.1": "row3.1, col2.2",
            "row3.2, col2.1": "row3.2, col2.2"
        }
    }

    logmail.logs.add("My object as a html table", logmailer.convertObjectToHTMLTable(object));

    let arrayOfObjects = [object, object];

    logmail.logs.add("My object array as a html table", logmailer.convertObjectArrayToHTMLTable(arrayOfObjects));

Хорошее решение для узла JS

index.js или server.js

    process.on('uncaughtException', function (err) {
        logmail.errors.add("Uncaught exception", `► Error message: ${err.message}
Error stack: ${err.stack}`); }); process.on('unhandledRejection', function (err) { logmail.errors.add("Unhandled rejection", `► Error message: ${err.message}
Error stack: ${err.stack}`); unplannedExit("rejection error"); }) function unplannedExit(info) { logmail.errors.add("Unnormal exit:", `► Info: ${info}`); logmail.summary.add("Ending time", `Ending app run now: ${new Date().toISOString()}`); logmailer.sendMail(err => { if (err) { console.log("error while sending", err); } else { console.log("mail sent successfully"); } process.exit(); }); } process.on('beforeExit', function (exitCode) { unplannedExit(exitCode); }) process.on("SIGTERM", function (signal) { unplannedExit(signal); }) process.on("SIGINT", function (signal) { unplannedExit(signal); }) // ..

Скриншоты

Менеджеры просмотрите

Пожарные видят

Полный вид (все главы)

Лицензия

Герметичный

Оригинал: «https://dev.to/mindactuate/log-mailer-for-node-js-aggregate-your-log-error-mail-from-all-over-your-app-and-send-it-when-you-want-1oh1»