Мониторинг производительности и искусственный интеллект




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

27 Comments

  1. bonv

    Нужно больше хайповых слов… Блокчейн забыли добавить.

    А где собственно Искуственный интеллект, Нейронные сети? Вижу только слова.

    От вынесения правил в отдельный файлик xml это не стало ИИ.

    Reply
  2. VmvLer

    Почти нечего не понял, лениво вникать после обеда.

    На всякий случай будут всем говорить, что я теперь спец по 1С: ИИ,

    вдруг это сейчас модно.

    По картинкам вспомнил журнал «Мурзилка» — прослезился.

    Еще порадовало, что автор не жаден — перспективные наработки отдает за копейки.

    Reply
  3. ivanov660

    (1)

    1. Коллега, давайте не будем мериться «глубиной» скрытых слоев.

    2. Читайте внимательнее. Про применение нейронных сети мы расскажем в следующей части.

    3. Файл xml достаточно удобно использовать для хранения и переноса.

    4. Нечеткие множества относятся к интеллектуальным системам.

    5. Наша предлагаемая система работает и выполняет возложенные задачи по мониторингу и анализу.

    6. Что по вашему ИИ?

    Reply
  4. ivanov660

    (2)

    1.Проект open source, можете все бесплатно скачать и установить с github. (если же лениво, тогда за стартмани).

    2. Тема действительно сложная, я предварительно показывал коллегам. Общее мнение, за день можно вникнуть и повторить.

    Reply
  5. pm74

    (0) сколько и какие парметры используется на входе ?

    на выходе как я понял всего несколько классов — рабочий режим, высокая нагрузка, критический ..

    как это помогает локализовать проблему ?

    Reply
  6. pm74

    (0) больше напоминает дерево решений , на первый взгляд

    Reply
  7. ivanov660

    (6) Похоже, но в основе нечеткая логика (fuzzy logic).

    Reply
  8. ivanov660

    (5)

    1. В демо примере мы используем на входе два параметра: «Нагрузку на процессор%» и «Очередь к процессору».

    2. У вас для системы существуют рабочие режимы — такие области в пространстве множества состояний, когда считается, что с ней все в порядке. Для нее существуют определенные состояния: нагрузка рабочая, очередь низкая.

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

    3. Вы можете увеличить количество входных параметров и увеличить точность оценки, к примеру, можно добавить, размер на диске и т.д.

    Reply
  9. pm74

    (8) вы классифицируете данные высокий , средний, низкий для чего ?

    для удобства разметки ? ну т.е вы тренируете ларису на предварительно размеченных данных?

    Reply
  10. ivanov660

    (9)

    1. Мы не классифицируем, а преобразуем сигналы. Эти параметры мы используем в качестве обозначения уровня сигнала (практически для всех сигналов мы можем свести суждение в эту область).

    По нагрузке: низкий — от 0% до 20%, средний от 20% до 60%, высокий от 60% до 100%. (синонимы и значения можно менять, а вот картинка пока не подстраивается)

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

    3. Это не совсем тренировка — мы создаем базу правил для Ларисы (т.е. проецируем свои знания на нее).

    Давайте попробуем представить как мы мыслим «внутри своего сознания»:

    1. У меня есть параметр за которым я слежу — это загрузка процессора%

    2. Я знаю, что загрузка в районе (фаззификация преобразование):

    — 0%-10% это холостой ход;

    — от 10% до 60% это нормальный рабочий режим

    — от 60% до 90% это высокая нагрузка

    — а от 90 до 100% мы считаем что очень высокая и это плохо.

    3. Далее, мы понимаем, что (база правил):

    — Если это холостой ход или нормальный То все хорошо система работает нормально

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

    В такой же последовательности выполняет анализ Лариса.

    Reply
  11. pm74

    (10) правильно ли я понял , что лариса принимает свои решения основываясь на безе данных экспертных решений созданной вручную ?

    может ли лариса принять решение самостоятельно основываясь на комбинации признаков которой нет в базе ?

    Reply
  12. pm74

    (10) или лариса последовательно анализирует каждый из признаков для принятия решения ?

    Reply
  13. AlexPC

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

    Reply
  14. bonv

    (3)

    2. Читайте внимательнее. Про применение нейронных сети мы расскажем в следующей части.

    А теги ведь тоже заранее проставили 🙂 ?

    Правила вы настраивали руками?

    Reply
  15. ivanov660

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

    Reply
  16. ivanov660

    (13)

    1. она рассматривает их комбинацию.

    Если первый=»» и второй=»» Тогда

    ИначеЕсли первый=»» и второй=»» Тогда

    ….

    Иначе сообщить «неизвестная комбинация, требуется указание эксперта»

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

    3. для нейронной сети, ситуация аналогична. вы обучаете наборами данных, и говорите: вот это котик, а это не котик.

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

    Reply
  17. ivanov660

    (14)

    1. Для нечеткого контроллера обычно так и выглядит процесс.

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

    2. Следующий шаг, нейронные сети. Применяем самообучающиеся сети по типу SOM. Однако и тут мы вынуждены будем добавить ручную классификацию.

    3. На практике (мониторинг), мы пока столкнулись со следующими параметрами за которыми надо следить (остальные имеют корреляцию): загрузка процессора, очередь к процессору, размер диска, объем трафика, количество пользователей в системе — это не так много. И это реально работает! А посидеть 30 минут, чтобы составить некоторое количество правил, на такая уж и большая цена за сервис.

    4 Скажите, а как Вы обучаете нейронные сети или что можете посоветовать в данном случае? Дайте идею как улучшить процесс, мы будем только рады, судя по Вашему докладу, опыт применения на практике у вас огромный.

    Reply
  18. starik-2005

    Это не искусственный интеллект — это просто преобразование решений из А в Б через словарь (в данном случае — диапазон). Все.

    Что такое ИИ? На входе массив исторических данных, который кластеризуется и таким образом классифицируется. В задаче слежения за нагрузкой этого ничего нафиг не надо — вплне подойдет какой-нить заббикс или совсем простой скрипт, который будет мерить нагрузку и в нем уже будет этот блок ветвлений (если А между Х и У и Б между С и Д, тогда «зелененькое», иначе если …. «желтенькое», иначе если …. «красненькое» и сообщить персоналу(«чета пашло ни таг») конец еслей) Все.

    Но красивые картинки в любом случае увеличивают стоимость проекта в 3 раза, а слова ИИ — еще в пять. Автору респект )))

    Reply
  19. starik-2005
    Reply
  20. pm74

    (19)

    но пока только хаят

    думаю вы слегка преувеличиваете

    (19)

    Было бы здорово если к нему присоединился кто-то из сообщества,

    добавил обработку , которая , возможно, вам пригодится для тестов и проч.

    Reply
  21. ivanov660

    (20)

    1. Коллега, вы убеждены что ИИ — это нейронные сети. Спорить с вами не буду.

    Может подскажите где взять наборы данных для обучения состоянию оборудования? Буду очень признателен.

    2. Мы не готовы потягаться силами с монстрами типа «Google» и даже «yandex», не тот уровень финансирования.

    Это первый шаг, все и сразу мы не сделаем. Дали коллегам, кому интересно попробует и даст фидбек. В рамках этого фдбека и нашего опыта эксплуатации будем дальше совершенствовать.

    3. Про преимущества мы писали, этих вещей пока достаточно на мой взгляд. Следующий раз я расскажу про применение нейронных сетей типа SOM.

    У вас другая реализация и работает, отлично. У нас своя реализация с определенным заделом на будущее. На мой взгляд — это была бы пыль в глаза если бы не работало. По отзывам коллег с которыми я общался лично, получил положительные отзывы.

    Reply
  22. ivanov660

    (21)спасибо посмотрим.

    Reply
  23. starik-2005

    (22)

    вы убеждены что ИИ — это нейронные сети. Спорить с вами не буду.

    Не, не так. Мы убеждены, что ИИ — это то, что способно учиться. Нейронные это сети или статистические алгоритмы — вообще по-барабану…

    2. Мы не готовы потягаться силами с монстрами типа «Google» и даже «yandex», не тот уровень финансирования.

    Это первый шаг, все и сразу мы не сделаем. Дали коллегам, кому интересно попробует и даст фидбек. В рамках этого фдбека и нашего опыта эксплуатации будем дальше совершенствовать.

    А что совершенствовать-то? Имя поменяете с Ларисы на Лауру? Или изменения будут более серьезные? Расскажите.

    3. Про преимущества мы писали, этих вещей пока достаточно на мой взгляд. Следующий раз я расскажу про применение нейронных сетей типа SOM.

    А про какие конкретно «преимущества» вы писали? А то поиском только три нашел совпадения, и все они в комментариях.

    Вот что я читаю в Вашей статье:

    2. Как вы можете предположить, то для многих сигналов большая детализация даст лучшее предсказание. Но чем больше сигналов мы оцениваем, тем более сложная настройка базы правил получается. К примеру, для двухмерной оценки 5 и 3 градации дадут нам 15 комбинаций, а 3 оценки по 5 диапазонной шкале дадут нам уже 125 комбинаций.

    Т.е. я эту матрицу должен руками задолбить на три элемента с пятью градациями (5#k8SjZc9Dxk3=125). Дальше Вы пишите, что нейросеть могла бы это все сама некоторым образом «замутить» — и это первое упоминание ИИ, которого у Вас в продукте как раз нет. Так зачем вообще все это писать под лозунгом искусственного интеллекта (нет, я понимаю, зачем, но все-таки…)?

    Reply
  24. ivanov660

    (24)

    Т.е. я эту матрицу должен руками задолбить на три элемента с пятью градациями (5#k8SjZc9Dxk3=125)

    Я не пойму вашей претензии коллега. Вы довольно искушены в получаемых сервисах и какой-то поделкой вас не удивишь. Не хотите не пользуйтесь. Вы не обязаны вбивать никакой матрицы из 125 условий.

    Основную вашу претензию я понял. Спасибо мнение учли.

    ИИ — это то, что способно учиться

    Как я говорил ранее, добавим алгоритм который сможет добавлять новые комбинации правил самостоятельно по существующим историческим данным в существующую базу знаний (это не сложно). Это уже самообучение, не так ли?

    А что совершенствовать-то? Имя поменяете с Ларисы на Лауру? Или изменения будут более серьезные? Расскажите.

    Так я же писал. У Ларисы сначала будут мозги на нечеткой логике, потом с использованием НС, возможно гибрид — вот оно развитие и улучшение Ларисы. А не смена имени с Ларисы на Лауру.

    SOM (self organized map).

    Reply
  25. ivanov660

    (24)А вообще спасибо за критику)

    Reply
  26. starik-2005

    (25)

    SOM (self organized map)

    Уже прочитал. Интересная тема, но в статье кроме упоминания ничего нет. Фактически эта ваша «som» — это кластеризация, которую можно использовать в том самом сборе настроек 5#k8SjZc9Dxk3 (кстати, это не равно 3#k8SjZc9Dxk5 — вам, на мой взгляд, нужно иметь это ввиду), но не совсем ясно, каким образом она определит вам «зону» (красная, зеленая, желтая).

    Чем хороши в данном случае простые подходы? Вот у нас есть совокупность показателей, для каждого из которых мы можем определить норму. Нам совокупное влияние часто и не нужно, ибо если на сервере 90% нагрузка на CPU, то для нас важна причина такой нагрузки — какое приложение «отличилось», 1С или SQL? Дальше уже почему: память скушалась, все юзеры пустые циклы крутят или внезапно сто документов одновременно провести решили? «ИИ» нам тут в чем поможет? Достаточно системы, которая просигнализирует в воцап о высокой нагрузке на сервере и скинет скрины по памяти, загрузке, дисковой подсистеме. Дальше все-равно ручками разгребать, т.к. это мог быть тупо новый запрос, в котором программист накосячил, не проверив его на нагрузке, аналогичной продуктовой. Без эксперта тут ничего не сделать…

    Reply
  27. A_Max

    (26) Соглашусь. Тут основная «придирка» в том, что вы отнесли фузилоджик (и экспертные системы в том числе) в категорию ИИ. Делается это всеми повсеместно для хайпа и из-за этого этот термин ИИ теряет смысл вообще. Да и больше начинает вызывать раздражение чем привлекать внимание.

    А ваш продукт очень полезный и желаю(ем) развития.

    (27) Ну тут напрашивается логирование всего и вся, а при срабатываение тригера (нагрузка ЦП например) раскручивать текущий лог и администратору предоставлять подготовленные отчёты-выборки. Кстати что-то такое у нас презентовали, пойду поспрашиваю админов.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *