Как отслеживать, что скрипт работает и не "упал" ?

Поддержка
  • @Q_Q said in Как отслеживать, что скрипт работает и не "упал" ?:

    @kuzkuz ты можешь и просто асинхронку при on application пустить и пусть она пишет в тг раз в пару часов. Единственное, если ресурсы кончатся и потоки сдохнут, асинхронка останется, поэтому надо ещё условий докинуть, чтобы слать предсмертное сообщение потока асинхронки) и после ее убивать.

    Ну если писать в ТГ реально, так зачем онапликейшн, просто первый поток будет это делать при старте. А стартовать он будет автоматически каждые 20-30 минут. Как только час сообщения нет - софт лежит. Вопрос только это фантазии или такое реально реализовать. Надо как в новом бас так и в старой версии. Очень старой. 23.2.2

  • @kuzkuz прикол метрики в том что можно смотреть графики, + насколько мне известно можно будет настроить различные алётры, которые будут приходить куда тебе удобно.
    онапликейшен для тг нужен что бы запустить отдельный поток который будет мониторить нужные тебе параметры и стучать в тг, такое реально (и не очень сложно) реализовать. Что в новой, что в старой версии - без проблем, отправить сообщение в тг это ведь http запрос 🙂

  • В веб интерфейсе можно при срабатывании евента Stop что-либо делать, к примеру, запускать бас функцию, которая бы отправляла сообщение в телегу.

  • В BAS лично мне не хватает пачку функций по аналогии с OnApplicationStart:

    • OnApplicationEnd
    • OnThreadStart
    • OnThreadEnd

    Если бы такие функции там были, можно было бы запихнуть нужное в них.

    Да и вообще events штука полезная, я бы нашел применение onBrowserStart, onBrowserOpenUrl, etc.

  • @sergerdn said in Как отслеживать, что скрипт работает и не "упал" ?:

    Если бы такие функции там были, можно было бы запихнуть нужное в них.

    Да и вообще events штука полезная, я бы нашел применение onBrowserStart, onBrowserOpenUrl, etc.

    Нейросеть нужнее что бы кубики придумывала )) Об этом сто раз просили, но раз раз пилит, то что ему по приколу

  • Есть программа, она же что то делает.

    Скачивает порнушку например, ставит на неё лайки, или делает гугл ADS.

    За час она вырабатывает энную норму, и вы скорее всего её знаете. 10 фильмов, 2 аккаунта, и т.д
    Ставите глобальную переменную, + время. Естественно асинхронно, и проверяете скок ваша скотина отпахала, если не 10 а 8, пишем в TG что так и так чет мало пинка, если 5 то ахтунг нас порнохаб забанил. Если 0, все приплыли.

  • @lomaster said in Как отслеживать, что скрипт работает и не "упал" ?:

    Есть программа, она же что то делает.

    Скачивает порнушку например, ставит на неё лайки, или делает гугл ADS.

    За час она вырабатывает энную норму, и вы скорее всего её знаете. 10 фильмов, 2 аккаунта, и т.д
    Ставите глобальную переменную, + время. Естественно асинхронно, и проверяете скок ваша скотина отпахала, если не 10 а 8, пишем в TG что так и так чет мало пинка, если 5 то ахтунг нас порнохаб забанил. Если 0, все приплыли.

    Все проще. Софт работает в 30 потоков. Каждый поток запускается раз в n минут. И задача простая - при запуске потока №1 - давать сигнал - "я запустился". Всё. Больше ничего и не нужно.

  • @rkk9 said in Как отслеживать, что скрипт работает и не "упал" ?:

    онапликейшен для тг нужен что бы запустить отдельный поток который будет мониторить нужные тебе параметры и стучать в тг, такое реально (и не очень сложно) реализовать. Что в новой, что в старой версии - без проблем, отправить сообщение в тг это ведь http запрос 🙂

    Ну да, это как вариант. В онапликейшн запускается отдельный поток и раз в 30 минут, например, стучит в ТГ - "работаю". Тоже выглядит все просто и логично. Пока не понимаю как реализовать "стук" в ТГ. Буду разбираться завтра.

    ps но в целом меня устроит и то что если поток №1 это будет делать при запуске. Тогда и огород городить не надо. Стартанул поток №1 и проделал "стук". Через n минут он выполнит работу, передохнет и снова запустится и снова "стукнет" - вот был бы норм вариант.

  • @kuzkuz Происходит отвал, работает 1 поток, отвалился 7, 14, и с 20 по 27... либо зависло что то. И ваша схема тютю.

  • @lomaster said in Как отслеживать, что скрипт работает и не "упал" ?:

    @kuzkuz Происходит отвал, работает 1 поток, отвалился 7, 14, и с 20 по 27... либо зависло что то. И ваша схема тютю.

    Нет. Софт падает совсем или работает исправно. Та ситуация о которой пишете вы - не возможна.

  • Всё решается просто через гугл таблицы. В них можно написать скрипт в "App script" для приёма данных (заполнения таблицы), для проверки данных и отправки данных в телеграм бота (да-да, гугл таблица может фоном отправлять get-запросы). В "App script" можно создать тригер по времени, который запускает функцию проверки данных в таблице (например раз в минуту или раз в пол часа). Если непонятно, но интересно, могу расписать пошагово

  • @Fox said in Как отслеживать, что скрипт работает и не "упал" ?:

    угл таблица может фоном отправлять get-запросы

    Пока вопрос такой - если гугл таблица это может делать, так может быть такой же гет запрос можно сделать к ТГ непосредственно из софта на БАС?

  • @kuzkuz said in Как отслеживать, что скрипт работает и не "упал" ?:

    @Fox said in Как отслеживать, что скрипт работает и не "упал" ?:

    угл таблица может фоном отправлять get-запросы

    Пока вопрос такой - если гугл таблица это может делать, так может быть такой же гет запрос можно сделать к ТГ непосредственно из софта на БАС?

    Цель то какая? Я так понял, вам нужно оперативное уведомление о сбое вне зависимости от причины (вылетел BAS, крашнулся сервер и т.д.). Если да, то проверять работу нужно извне. А так для работы с телеграмм в BAS есть даже модуль :D

  • @Fox said in Как отслеживать, что скрипт работает и не "упал" ?:
    \

    Цель то какая? Я так понял, вам нужно оперативное уведомление о сбое вне зависимости от причины (вылетел BAS, крашнулся сервер и т.д.). Если да, то проверять работу нужно извне. А так для работы с телеграмм в BAS есть даже модуль :D

    Да, цель именно такая.
    Я предположил, что можно раз в 30 минут заставить софт открывать некую ссылку (телеграмм) благодаря которой в ТГ будет приходить уведомление типа "работаю".
    Модуль я так понимаю есть для новой версии бас, а мне нужно решить задачу эту и для старой версии тоже. В идеале решить без модуля.

  • @kuzkuz said in Как отслеживать, что скрипт работает и не "упал" ?:

    Да, цель именно такая.
    Я предположил, что можно раз в 30 минут заставить софт открывать некую ссылку (телеграмм) благодаря которой в ТГ будет приходить уведомление типа "работаю".

    В итоге вы получите кучу спам сообщений от бота с текстом "работаю", вместо того, что бы в случае проблемы получить уведомление именно о проблеме

    Модуль я так понимаю есть для новой версии бас, а мне нужно решить задачу эту и для старой версии тоже. В идеале решить без модуля.

    Модуль появился в официальной сборке очень-очень давно, задолго до 23 версии BAS.

  • @Fox said in Как отслеживать, что скрипт работает и не "упал" ?:

    В итоге вы получите кучу спам сообщений от бота с текстом "работаю", вместо того, что бы в случае проблемы получить уведомление именно о проблеме

    Хм, понял. Слабо пока представляю логику , как реализовать уведомление именно при "вылете".

  • @Fox said in Как отслеживать, что скрипт работает и не "упал" ?:

    Всё решается просто через гугл таблицы. В них можно написать скрипт в "App script" для приёма данных (заполнения таблицы), для проверки данных и отправки данных в телеграм бота (да-да, гугл таблица может фоном отправлять get-запросы). В "App script" можно создать тригер по времени, который запускает функцию проверки данных в таблице (например раз в минуту или раз в пол часа). Если непонятно, но интересно, могу расписать пошагово

    Ясно! Есть тригер по времени. Если пол часа в таблице "0" , например, то срабатывает тригер.

  • Для начала нужен гугл аккаунт, авторизируемся, переходим в гугл таблицы https://docs.google.com/spreadsheets и создаём новую таблицу

    9343344c-69b8-4b66-b459-5de5489a4270-изображение.png


    Далее заходим в меню "расширения" -> "Apps script"

    82e2aa80-bff8-4905-aefc-0c4e35b05891-изображение.png


    В нём пишем функцию заполнения данных из скрипта BAS через get-запрос. Отправлять мы будем номер строки для записи данных и сами данные:

    function doGet(e) {
      var rowNumber = e.parameter.rowNumber;
      var data = e.parameter.data;
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    
      sheet.getRange(rowNumber, 1).setValue(new Date().getTime());
      sheet.getRange(rowNumber, 2).setValue(data);
    
      return ContentService.createTextOutput("Your advertisement could be here :)");
    }
    

    Благодаря этому скрипту данные будут заполнятся в таблице в таком виде:

    7727b75c-edc2-4a41-be42-e63e3c78b8ae-изображение.png


    Что бы проверить, что всё работает как надо, нужно сохранить скрипт

    25018afe-e3f9-4b21-8c11-a06a293effdf-изображение.png


    Затем нужно развернуть приложение "Начать развёртывание" -> "Новое развёртывание":

    b1e261d4-e120-4537-9bbd-344b291e7ad2-изображение.png


    В описании укажите хотя бы цирфу, что бы потом не запутаться. В поле "запуск от имени" нужно указать "От моего имени" что бы данные в таблицу можно было добавлять без авторизации в гугле через get-запросы из BAS. В поле "У кого есть доступ" указать нужно "Все" тоже для того, что бы не авторизовываться в гугле при добавлении данных в таблицу

    a59e2256-3c15-47c8-9240-52cb28b3a2ab-изображение.png


    Затем нужно нажать "Начать развёртывание" и в появившемся окне скопировать ссылку на веб-приложение и нажать кнопку "Готово"

    6dfc8e57-af88-467b-95c5-2338f675352c-изображение.png


    Сохранённая ссылка будет подобного вида:

    https://script.google.com/macros/s/AKfyмногобукавOia06eA/exec
    

    Пробуем передать данные. Для этого к ссылке нужно добавить параметры "rowNumber" и "data"

    https://script.google.com/macros/s/AKfyмногобукавOia06eA/exec?rowNumber=1&data=potok_1
    

    Заходим в BAS и создаём get-запрос с этой ссылкой. После выполнения проверяем добавились ли данные в таблицу:

    78223200-8320-4a3f-a724-3fa2b1c21543-изображение.png


    Убедившись, что всё хорошо продолжаем работу. Теперь нам нужно создать функцию отправки сообщения в телеграмм. Для этого нужно создать бота телеграмм и получить id чата. Расписывать подробно не буду, проще прочитать здесь https://habr.com/ru/articles/306222/

    Добавляем в наш скрипт в "Apps script" функцию отправки:

    function sendTelegramMessage(messageText) {
      var telegramToken = "BOT_TOKEN";
      var chatId = "CHAT_ID";
      var url = "https://api.telegram.org/bot" + telegramToken + "/sendMessage?chat_id=" + chatId + "&text=" + encodeURIComponent(messageText);
      var response = UrlFetchApp.fetch(url);
    }
    

    Для проверки добавляем чуть ниже вызов функции:

    sendTelegramMessage("hello")
    

    выбираем функцию "sendTelegramMessage" и нажимаем кнопку "Выполнить". В итоге вам в тг от бота должно придти сообщение "hello".


    Если всё хорошо, удаляем из кода строку sendTelegramMessage("hello") и приступаем к написанию функции проверки данных.

    function checkForData() {
      var minutesCheck = 5 //количество минут прошедших с последнего обновления данных, для регистрации проблемы
    
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var dataRange = sheet.getDataRange();
      var data = dataRange.getValues();
      var currentTime = new Date().getTime();
      var resultArray = [];
      for (var i = 0; i < data.length; i++) {
        var timestamp = data[i][0];
        var timeDifference = (currentTime - timestamp) / (1000 * 60);
        if (timeDifference > minutesCheck) {
          resultArray.push(data[i][1]); 
        }
      }
      if(resultArray.length > 0) {
        sendTelegramMessage("Проблема с потоками:\n" + resultArray.join('\n'))
      }
    }
    

    Функция проверяет столбец "A" с записанным временем и сверяет, прошло ли с того времени 5 минут, если прошло, то функция берёт данные с этой строки из столбца "B" и отправляет в тг


    Для проверки выбираем функцию "checkForData" и жмём кнопку "Выполнить". В итоге вам в тг от бота должно придти сообщение

    изображение.png


    Если всё хорошо, можно приступить к установке тригера по времени. Для этого нужно нажать на значок с часами на левой панели "Apps scripts"

    изображение.png


    Справа внизу будет кнопка "Добавить триггер"

    изображение.png


    Функцию нужно выбрать "checkForData". Развёртывание лучше указать "Основное развёртывание". Тип триггера указать "по минутам" и промежуток указать "раз в минуту" (ну или по больше, если не так важно)

    28695c22-7f86-4627-8967-4227eaaacf97-изображение.png


    Нажимаем кнопку "Сохранить" и в списке триггеров должен появится только что созданный триггер:

    ccebc94c-727f-431e-8063-66d0e94bbf15-изображение.png


    В конце нужно сделать снова новое развёртывание и получить ссылку. Разворачивать кстати придётся при каждом изменении скрипта в будущем.

    Приступаем к проверке работы всей системы. Создаём скрипт BAS на 10 потоков, в которых каждый поток узнаёт свой номер и отправляет его в качестве номера строки в таблице и данных. Для корректной передачи данных для параметра "data" нужно использовать действие "Url компонент кодировать/декодировать", а номер потока можно передавать просто цифрой:

    df0e7de3-7c70-4ff5-8b41-e9d0de16c408-изображение.png


    Данные в таблице будут в таком виде:

    8ba09cee-b753-4cf3-bd0d-50cb9947176f-изображение.png


    Всё. Если остановить скрипт, то через минуту придёт сообщение в тг:

    92819650-8361-4b7c-9cb1-0ed6944220be-изображение.png


    Сообщение об ошибках будет приходить в тг каждую минуту, потому что в настройках триггера было установлено частота выполнения "раз в минуту"

  • Я показал только самые основы, можно как угодно изменять, улучшать и усложнять скрипты на любых этапах (передавать данные в json, добавлять стили, цвета, кнопки управления в таблицу или тг чат и т.д.)

  • Решение твоей проблемы зовут zabbix, там без танца бубном (гугл таблицы) все это можно сделать