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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *