Проверка Квоты TrafSvc TMeter

Веб Проверки, Веб-сценарии,
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 914
Стаж: 5 лет 11 месяцев
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 42 раза
Контактная информация:

Проверка Квоты TrafSvc TMeter

Сообщение Артём Мамзиков »

На основе программы TMeter
Данные берем из файла C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml


Мониторинг доступной квоты
квота задаётся в макросе
Отправка {$OTRAFKVOTA}
Прием {$PTRAFKVOTA}
За сутки
Отправка {$ODTRAFKVOTA}
Прием {$PDTRAFKVOTA}

Шаблон
Проверка Квоты TrafSvc TMeter.zip
Проверка Квоты TrafSvc TMeter.zip
(8.66 КБ) 0 скачиваний
Элементы данных:
Содержимое файла в JSON: test Обнаружение правил трафика serc.traffic.rulestrafsvc.tmeter 90d Зависимый элемент данных TrafSvc Деактивировано
Предобработка
Показать

Код: Выделить всё

// Преобразуем строку JSON в объект
var jsonObj = JSON.parse(value);

// Инициализируем массив для результата
var result = [];

// Получаем массив фильтров из JSON
var filters = jsonObj.TrafficReport.Filter;

// Функция для получения последней доступной даты и времени
function getLastDate(day) {
    if (Array.isArray(day)) {
        var lastEntry = day[day.length - 1];
        var lastDate = lastEntry.dt;

        if (lastEntry.Day2h) {
            var lastDay2hEntry = lastEntry.Day2h[lastEntry.Day2h.length - 1];
            if (lastDay2hEntry) {
                lastDate = lastDay2hEntry.dt;
            }
        }

        return lastDate;
    } else {
        var lastDate = day.dt;
        if (day.Day2h) {
            lastDate = day.Day2h.dt;
        }
        return lastDate;
    }
}

// Проходим по каждому фильтру и создаем новый объект с необходимыми свойствами
for (var i = 0; i < filters.length; i++) {
    var filter = filters[i];
    var lastDate = getLastDate(filter.Day);

    var transformed = {
        "{#TMETERID}": filter.Id,
        "{#TMETERNAME}": filter.Name,
        "{#TMETERDAYDT}": lastDate
    };
    result.push(transformed);
}

// Возвращаем результат в виде строки JSON
return JSON.stringify(result).replace(/\[/g, "[\n").replace(/\},/g, "},\n").replace(/\}]/g, "}\n]");

Получение содержимого файла: Содержимое файла в JSON json.trafsvc.tmete 0 Зависимый элемент данных TrafSvc Активировано
Предобработка
Показать

Код: Выделить всё

//Преобразуем XML в JSON
// Проверка на пустую строку
    if (value === '') {
        // Выводим пустой результат если строка пустая, дальше ничего не делаем.
        return value;
    } else {
        // Удалим первые 1-2 строки в XML
        var stdl = value.replace(/\<\?xml(.+?)\?\>[\n\r]/g, "").replace(/version="[0-9.]+"\s+xmlns=.*\"/g, "");

        // Преобразуем XML в JSON
        var fromXML;
        !function(r) {
            var t = {"&amp;": "&", "&lt;": "<", "&gt;": ">", "&apos;": "'", "&quot;": '"'};
            function n(r) { return r && r.replace(/^\s+|\s+$/g, ""); }
            function s(r) { return r.replace(/(&(?:lt|gt|amp|apos|quot|#(?:\d{1,6}|x[0-9a-fA-F]{1,5}));)/g, function(r) { if ("#" === r[1]) { var n = "x" === r[2] ? parseInt(r.substr(3), 16) : parseInt(r.substr(2), 10); if (n > -1) return String.fromCharCode(n); } return t[r] || r; }); }
            function e(r, t) {
                if ("string" == typeof r) return r;
                var u = r.r;
                if (u) return u;
                var a, o = function(r, t) {
                    if (r.t) {
                        for (var e, u, a = r.t.split(/([^\s='"]+(?:\s*=\s*(?:'[\S\s]*?'|"[\S\s]*?"|[^\s'"]*))?)/), o = a.length, i = 0; i < o; i++) {
                            var l = n(a[i]);
                            if (l) {
                                e || (e = {});
                                var c = l.indexOf("=");
                                if (c < 0) l = l, u = null;
                                else {
                                    u = l.substr(c + 1).replace(/^\s+/, ""), l = l.substr(0, c).replace(/\s+$/, "");
                                    var p = u[0];
                                    p !== u[u.length - 1] || "'" !== p && '"' !== p || (u = u.substr(1, u.length - 2)), u = s(u);
                                }
                                t && (u = t(l, u)), f(e, l, u);
                            }
                        }
                        return e;
                    }
                }(r, t), i = r.f, l = i.length;
                if (o || l > 1) a = o || {}, i.forEach(function(r) { "string" == typeof r ? f(a, "#", r) : f(a, r.n, e(r, t)); });
                else if (l) {
                    var c = i[0];
                    if (a = e(c, t), c.n) {
                        var p = {};
                        p[c.n] = a, a = p;
                    }
                } else a = r.c ? null : "";
                return t && (a = t(r.n || "", a)), a;
            }
            function f(r, t, n) { if (void 0 !== n) { var s = r[t]; s instanceof Array ? s.push(n) : r[t] = t in r ? [s, n] : n; } }
            r.fromXML = fromXML = function(r, t) { return e(function(r) { for (var t = String.prototype.split.call(r, /<([^!<>?](?:'[\S\s]*?'|"[\S\s]*?"|[^'"<>])*|!(?:--[\S\s]*?--|\[[^\[\]'"<>]+\[[\S\s]*?]]|DOCTYPE[^\[<>]*?\[[\S\s]*?]|(?:ENTITY[^"<>]*?"[\S\s]*?")?[\S\s]*?)|\?[\S\s]*?\?)>/), e = t.length, f = {f: []}, u = f, a = [], o = 0; o < e;) {
                var i = t[o++];
                i && v(i);
                var l = t[o++];
                l && c(l);
            }
            return f;
            function c(r) {
                var t = r.length, n = r[0];
                if ("/" === n) for (var s = r.replace(/^\/|[\s\/].*$/g, "").toLowerCase(); a.length;) {
                    var e = u.n && u.n.toLowerCase();
                    if (u = a.pop(), e === s) break;
                } else if ("?" === n) p({n: "?", r: r.substr(1, t - 2)});
                else if ("!" === n) "[CDATA[" === r.substr(1, 7) && "]]" === r.substr(-2) ? v(r.substr(8, t - 10)) : p({n: "!", r: r.substr(1)});
                else {
                    var f = function(r) {
                        var t = {f: []}, n = (r = r.replace(/\s*\/?$/, "")).search(/[\s='"\/]/);
                        n < 0 ? t.n = r : (t.n = r.substr(0, n), t.t = r.substr(n));
                        return t;
                    }(r);
                    p(f), "/" === r[t - 1] ? f.c = 1 : (a.push(u), u = f);
                }
            }
            function p(r) { u.f.push(r); }
            function v(r) { (r = n(r)) && p(s(r)); }
        }(r), t); };
        }("object" == typeof exports && exports || {});

        // Преобразовываем и выводим результат
        var jsonString = JSON.stringify(fromXML(stdl));
        // Удаляем "@" из ключей
        jsonString = jsonString.replace(/"@/g, '"');
        // Возвращаем результат в читаемом виде с переносами строк
        return jsonString.replace(/\{/g, "{\n").replace(/\[/g, "[\n").replace(/\,/g, ",\n").replace(/\"}/g, "\"\n}").replace(/\]/g, "\n]");
    }
Получение содержимого файла vfs.file.contents[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml,utf8] 20m 0 Zabbix агент TrafSvc Активировано

Контрольная сумма файла vfs.file.cksum[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml] 1h 90d 90d Zabbix агент TrafSvc Активировано

Проверка существования файла Триггеры 1 vfs.file.exists[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml] 1h 90d 90d Zabbix агент TrafSvc Активировано

MD5 контрольная сумма файла vfs.file.md5sum[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml] 1h 90d Zabbix агент TrafSvc Активировано

Размер файла Триггеры 1 vfs.file.size[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml] 1h 90d 90d Zabbix агент TrafSvc Активировано

Информация о времени файла vfs.file.time[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml] 1h 90d 90d Zabbix агент TrafSvc Активировано

Поиск строки в файле vfs.file.regexp[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml,utf8,начальная строка,конечная строка,вывод] 1h 90d Zabbix агент TrafSvc Деактивировано
Проверка Квоты TrafSvc TMeter Элементы данных
Проверка Квоты TrafSvc TMeter Элементы данных

Триггеры
Внимание/Предупреждение Файл не найден {$DATE_YYYY}-{$DATE_MM}.xml {TrafSvc TMeter:vfs.file.exists[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml].last()}=0 Активировано

Информационная Файл более 300Mb {$DATE_YYYY}-{$DATE_MM}.xml {TrafSvc TMeter:vfs.file.size[C:\Program Files\TMeter\XmlTrafficReports\{$DATE_YYYY}-{$DATE_MM}.xml].last()}>=300M Активировано
Проверка Квоты TrafSvc TMeter Триггеры
Проверка Квоты TrafSvc TMeter Триггеры

Правила обнаружения
Получение содержимого файла: Обнаружение правил трафика Прототипы элементов данных 4 Прототипы триггеров 5 Прототипы графиков 2 Прототипы узлов сети detecting.traffic.rulestrafsvc.tmeter Зависимый элемент данных Активировано
Проверка Квоты TrafSvc TMeter Правило обнаружения
Проверка Квоты TrafSvc TMeter Правило обнаружения
Предобработка
Показать

Код: Выделить всё

//Преобразуем XML в JSON
// Проверка на пустую строку
    if (value === '') {
        // Выводим пустой результат если строка пустая, дальше ничего не делаем.
        return value;
    } else {
        // Удалим первые 1-2 строки в XML
        var stdl = value.replace(/\<\?xml(.+?)\?\>[\n\r]/g, "").replace(/version="[0-9.]+"\s+xmlns=.*\"/g, "");

        // Преобразуем XML в JSON
        var fromXML;
        !function(r) {
            var t = {"&amp;": "&", "&lt;": "<", "&gt;": ">", "&apos;": "'", "&quot;": '"'};
            function n(r) { return r && r.replace(/^\s+|\s+$/g, ""); }
            function s(r) { return r.replace(/(&(?:lt|gt|amp|apos|quot|#(?:\d{1,6}|x[0-9a-fA-F]{1,5}));)/g, function(r) { if ("#" === r[1]) { var n = "x" === r[2] ? parseInt(r.substr(3), 16) : parseInt(r.substr(2), 10); if (n > -1) return String.fromCharCode(n); } return t[r] || r; }); }
            function e(r, t) {
                if ("string" == typeof r) return r;
                var u = r.r;
                if (u) return u;
                var a, o = function(r, t) {
                    if (r.t) {
                        for (var e, u, a = r.t.split(/([^\s='"]+(?:\s*=\s*(?:'[\S\s]*?'|"[\S\s]*?"|[^\s'"]*))?)/), o = a.length, i = 0; i < o; i++) {
                            var l = n(a[i]);
                            if (l) {
                                e || (e = {});
                                var c = l.indexOf("=");
                                if (c < 0) l = l, u = null;
                                else {
                                    u = l.substr(c + 1).replace(/^\s+/, ""), l = l.substr(0, c).replace(/\s+$/, "");
                                    var p = u[0];
                                    p !== u[u.length - 1] || "'" !== p && '"' !== p || (u = u.substr(1, u.length - 2)), u = s(u);
                                }
                                t && (u = t(l, u)), f(e, l, u);
                            }
                        }
                        return e;
                    }
                }(r, t), i = r.f, l = i.length;
                if (o || l > 1) a = o || {}, i.forEach(function(r) { "string" == typeof r ? f(a, "#", r) : f(a, r.n, e(r, t)); });
                else if (l) {
                    var c = i[0];
                    if (a = e(c, t), c.n) {
                        var p = {};
                        p[c.n] = a, a = p;
                    }
                } else a = r.c ? null : "";
                return t && (a = t(r.n || "", a)), a;
            }
            function f(r, t, n) { if (void 0 !== n) { var s = r[t]; s instanceof Array ? s.push(n) : r[t] = t in r ? [s, n] : n; } }
            r.fromXML = fromXML = function(r, t) { return e(function(r) { for (var t = String.prototype.split.call(r, /<([^!<>?](?:'[\S\s]*?'|"[\S\s]*?"|[^'"<>])*|!(?:--[\S\s]*?--|\[[^\[\]'"<>]+\[[\S\s]*?]]|DOCTYPE[^\[<>]*?\[[\S\s]*?]|(?:ENTITY[^"<>]*?"[\S\s]*?")?[\S\s]*?)|\?[\S\s]*?\?)>/), e = t.length, f = {f: []}, u = f, a = [], o = 0; o < e;) {
                var i = t[o++];
                i && v(i);
                var l = t[o++];
                l && c(l);
            }
            return f;
            function c(r) {
                var t = r.length, n = r[0];
                if ("/" === n) for (var s = r.replace(/^\/|[\s\/].*$/g, "").toLowerCase(); a.length;) {
                    var e = u.n && u.n.toLowerCase();
                    if (u = a.pop(), e === s) break;
                } else if ("?" === n) p({n: "?", r: r.substr(1, t - 2)});
                else if ("!" === n) "[CDATA[" === r.substr(1, 7) && "]]" === r.substr(-2) ? v(r.substr(8, t - 10)) : p({n: "!", r: r.substr(1)});
                else {
                    var f = function(r) {
                        var t = {f: []}, n = (r = r.replace(/\s*\/?$/, "")).search(/[\s='"\/]/);
                        n < 0 ? t.n = r : (t.n = r.substr(0, n), t.t = r.substr(n));
                        return t;
                    }(r);
                    p(f), "/" === r[t - 1] ? f.c = 1 : (a.push(u), u = f);
                }
            }
            function p(r) { u.f.push(r); }
            function v(r) { (r = n(r)) && p(s(r)); }
        }(r), t); };
        }("object" == typeof exports && exports || {});

        // Преобразовываем и выводим результат
        var jsonString = JSON.stringify(fromXML(stdl));
        // Удаляем "@" из ключей
        jsonString = jsonString.replace(/"@/g, '"');
        // Возвращаем результат в читаемом виде с переносами строк
        return jsonString.replace(/\{/g, "{\n").replace(/\[/g, "[\n").replace(/\,/g, ",\n").replace(/\"}/g, "\"\n}").replace(/\]/g, "\n]");
    }

Код: Выделить всё

// Преобразуем строку JSON в объект
var jsonObj = JSON.parse(value);

// Инициализируем массив для результата
var result = [];

// Получаем массив фильтров из JSON
var filters = Array.isArray(jsonObj.TrafficReport.Filter) ? jsonObj.TrafficReport.Filter : [jsonObj.TrafficReport.Filter];

// Проходим по каждому фильтру и создаем новый объект с необходимыми свойствами
for (var i = 0; i < filters.length; i++) {
    var filter = filters[i];
    var lastDate = "";

    // Проверяем, является ли Day массивом или объектом и не пусто ли оно
    if (Array.isArray(filter.Day) && filter.Day.length > 0) {
        // Если Day является массивом и не пусто, находим последнюю дату
        lastDate = filter.Day[filter.Day.length - 1].dt;
    } else if (filter.Day && typeof filter.Day === 'object') {
        // Если Day является объектом, берем значение dt из объекта
        lastDate = filter.Day.dt;
    }

    var transformed = {
        "{#TMETERID}": filter.Id,
        "{#TMETERNAME}": filter.Name,
        "{#TMETERDAYDT}": lastDate
    };
    result.push(transformed);
}

// Возвращаем результат в виде строки JSON
return JSON.stringify(result, null, 2);
Фильтры тут можно исключать лишние правила
A {#TMETERNAME} не соответствует пример
Проверка Квоты TrafSvc TMeter Правило обнаружения фильтры
Проверка Квоты TrafSvc TMeter Правило обнаружения фильтры

Прототипы элементов данных
Содержимое файла в JSON: За Сутки Трафик Приема правило: {#TMETERID} {#TMETERNAME} recv.d.[{#TMETERID}] 90d 90d Зависимый элемент данных Квота TrafSvc Да
Предобработка
Показать

Код: Выделить всё

// Преобразуем JSON в объект JS
var obj = JSON.parse(value);
// Переменная для хранения результата
var result = 0;

// Проверяем наличие объекта obj и объекта TrafficReport
if (obj && obj.TrafficReport) {
    // Проверяем, является ли Filter массивом или объектом
    var filters = Array.isArray(obj.TrafficReport.Filter) ? obj.TrafficReport.Filter : [obj.TrafficReport.Filter];
    
    // Перебираем каждый фильтр в массиве
    filters.forEach(function(filter) {
        // Если Id текущего фильтра равен "{#TMETERID}"
        if (filter.Id === "{#TMETERID}") {
            // Проверяем, является ли Day массивом или объектом
            if (Array.isArray(filter.Day)) {
                // Если Day является массивом, находим последний день и присваиваем его Recv
                var lastDay = filter.Day[filter.Day.length - 1];
                result = lastDay.Recv || 0;
            } else {
                // Если Day является объектом, берем значение Recv из объекта
                result = filter.Day.Recv || 0;
            }
        }
    });
}

// Возвращаем результат
return result;
Содержимое файла в JSON: Общее Трафик Приема правило: {#TMETERID} {#TMETERNAME} recv.[{#TMETERID}] 90d 90d Зависимый элемент данных Квота TrafSvc Нет
Предобработка
Показать

Код: Выделить всё

// Преобразуем JSON в объект JS
var obj = JSON.parse(value);
// Переменная для хранения результата
var result = 0;

// Проверяем наличие объекта value, объекта TrafficReport и свойства Filter
if (obj && obj.TrafficReport && obj.TrafficReport.Filter) {
    // Преобразуем Filter в массив, если это не массив
    var filters = Array.isArray(obj.TrafficReport.Filter) ? obj.TrafficReport.Filter : [obj.TrafficReport.Filter];

    // Перебираем каждый фильтр в массиве
    filters.forEach(function(filter) {
        // Если Id текущего фильтра равен "{#TMETERID}"
        if (filter.Id === "{#TMETERID}") {
            // Присваиваем значение Sent переменной result
            result = filter.Recv || 0;
        }
    });
}

// Возвращаем результат
return result;
Содержимое файла в JSON: За Сутки Трафик Отправки правило: {#TMETERID} {#TMETERNAME} sent.d.[{#TMETERID}] 90d 90d Зависимый элемент данных Квота TrafSvc Да
Предобработка
Показать

Код: Выделить всё

// Преобразуем JSON в объект JS
var obj = JSON.parse(value);
// Переменная для хранения результата
var result = 0;

// Проверяем наличие объекта obj и объекта TrafficReport
if (obj && obj.TrafficReport) {
    // Проверяем, является ли Filter массивом или объектом
    var filters = Array.isArray(obj.TrafficReport.Filter) ? obj.TrafficReport.Filter : [obj.TrafficReport.Filter];
    
    // Перебираем каждый фильтр в массиве
    filters.forEach(function(filter) {
        // Если Id текущего фильтра равен "{#TMETERID}"
        if (filter.Id === "{#TMETERID}") {
            // Проверяем, является ли Day массивом или объектом
            if (Array.isArray(filter.Day)) {
                // Если Day является массивом, находим последний день и присваиваем его Sent
                var lastDay = filter.Day[filter.Day.length - 1];
                result = lastDay.Sent || 0;
            } else {
                // Если Day является объектом, берем значение Sent из объекта
                result = filter.Day.Sent || 0;
            }
        }
    });
}

// Возвращаем результат
return result;
Содержимое файла в JSON: Общее Трафик Отправки правило: {#TMETERID} {#TMETERNAME} sent.[{#TMETERID}] 90d 90d Зависимый элемент данных Квота TrafSvc Нет
Предобработка
Показать

Код: Выделить всё

// Преобразуем JSON в объект JS
var obj = JSON.parse(value);
// Переменная для хранения результата
var result = 0;

// Проверяем наличие объекта value, объекта TrafficReport и свойства Filter
if (obj && obj.TrafficReport && obj.TrafficReport.Filter) {
    // Преобразуем Filter в массив, если это не массив
    var filters = Array.isArray(obj.TrafficReport.Filter) ? obj.TrafficReport.Filter : [obj.TrafficReport.Filter];

    // Перебираем каждый фильтр в массиве
    filters.forEach(function(filter) {
        // Если Id текущего фильтра равен "{#TMETERID}"
        if (filter.Id === "{#TMETERID}") {
            // Присваиваем значение Sent переменной result
            result = filter.Sent || 0;
        }
    });
}

// Возвращаем результат
return result;
Проверка Квоты TrafSvc TMeter Прототипы элементов данных
Проверка Квоты TrafSvc TMeter Прототипы элементов данных

Прототипы триггеров
Высокая Общее Превышение Квоты Отправки правило: {#TMETERID} {#TMETERNAME} {TrafSvc TMeter:sent.[{#TMETERID}].last()}>={$OTRAFKVOTA} or {TrafSvc TMeter:sent.[{#TMETERID}].nodata(8h)}=1 Нет

Высокая Общее Превышение Квоты Приема правило: {#TMETERID} {#TMETERNAME} {TrafSvc TMeter:recv.[{#TMETERID}].last()}>={$PTRAFKVOTA} or {TrafSvc TMeter:recv.[{#TMETERID}].nodata(8h)}=1 Нет

Высокая Превышение квоты на передачу данных в сутки порт 8080 {#TMETERID} {#TMETERNAME} {TrafSvc TMeter:sent.d.[{#TMETERID}].last()}>={$ODTRAFKVOTA} or {TrafSvc TMeter:sent.d.[{#TMETERID}].nodata(8h)}=1 Да

Высокая Превышение квоты на приема данных в сутки порт 8080 {#TMETERID} {#TMETERNAME} {TrafSvc TMeter:recv.d.[{#TMETERID}].last()}>={$PDTRAFKVOTA} or {TrafSvc TMeter:recv.d.[{#TMETERID}].nodata(8h)}=1 Да

Высокая Проверьте работу TMetr порт 8080 {#TMETERID} {#TMETERNAME} {$WEEK_DAY}<=5 and {$TIME_HH}>=12 and {TrafSvc TMeter:sent.d.[{#TMETERID}].last()}<=500M or {TrafSvc TMeter:sent.d.[{#TMETERID}].nodata(8h)}=1 Да
Проверка Квоты TrafSvc TMeter Прототипы триггеров
Проверка Квоты TrafSvc TMeter Прототипы триггеров

Прототипы графиков
За сутки Трафик для правила: {#TMETERID} {#TMETERNAME} 900 200 Нормальный

Общее Трафик для правила: {#TMETERID} {#TMETERNAME} 900 200 Нормальный
Проверка Квоты TrafSvc TMeter Прототипы графиков
Проверка Квоты TrafSvc TMeter Прототипы графиков
количество слов: 1898

Вернуться в «Веб Проверки»