• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Как выполнить ручное изменение файла usb.ids и перенести изменения в базу?
#1
Добрый день.
В ходе реализации инвертаризации периферии возник очередной завтык. Надо подкорректировать базу вендоров и устройств, так как там некоторых не хватает, а некоторые хотелось бы назвать по другому. Было бы идеально изменить файл usb.ids и загнать изменения в базу MySQL, правда пока не доганяю как это сделать.

Видел такую штуку как datafilter. Если я все правильно понял, то с её помощью можно сгенерить usb.sql на основе usb.ids, который потом можно выполнить руками в mysql.
Этот инструмент вроде должен изначально быть в fusioninventory-for-glpi 9.5+1.0, но у себя я его не наблюдаю.

Собственно, в чем вопрос: как возможно внести изменения в базу данных (а именно таблицы glpi_plugin_fusioninventory_usbdevices и glpi_plugin_fusioninventory_usbvendors) с минимальными костылями, что бы в будущих апгрейдах не вылазило боком?

Буду рад любой помощи.
  Reply
#2
(2020-10-20, 12:03:51)Apomelitos Wrote: Добрый день.
В ходе реализации инвертаризации периферии возник очередной завтык. Надо подкорректировать базу вендоров и устройств, так как там некоторых не хватает, а некоторые хотелось бы назвать по другому. Было бы идеально изменить файл usb.ids и загнать изменения в базу MySQL, правда пока не доганяю как это сделать.

Видел такую штуку как datafilter. Если я все правильно понял, то с её помощью можно сгенерить usb.sql на основе usb.ids, который потом можно выполнить руками в mysql.
Этот инструмент вроде должен изначально быть в fusioninventory-for-glpi 9.5+1.0, но у себя я его не наблюдаю.

Собственно, в чем вопрос: как возможно внести изменения в базу данных (а именно таблицы glpi_plugin_fusioninventory_usbdevices и glpi_plugin_fusioninventory_usbvendors) с минимальными костылями, что бы в будущих апгрейдах не вылазило боком?

Буду рад любой помощи.

Приветствую. Интересная функция, не знал о такой. А как оно работает? Я смотрю, что этот файл есть как у агента так и у сервера. А также на сервере рядышком лежит FilesToDB.php который, судя по названию, должен перегонять содержимое файлов в базу. Он у меня выдает кучу ошибок, но у меня система старая, может еще не доделан.
  Reply
#3
(2020-10-20, 13:43:10)maxwal41 Wrote: Приветствую. Интересная функция, не знал о такой. А как оно работает? Я смотрю, что этот файл есть как у агента так и у сервера. А также на сервере рядышком лежит FilesToDB.php который, судя по названию, должен перегонять содержимое файлов в базу. Он у меня выдает кучу ошибок, но у меня система старая, может еще не доделан.

Под datafilter я как раз подразумевал этот скрипт, FilesToDB.php Big Grin Он просто лежит в папке datafilter.
Пока его попробую использовать, а там как пойдет.
  Reply
#4
Я просто не пойму, если у сервака есть эта база, то зачем она агентам? Или файлы должны соответствовать на агенте и серваке.
  Reply
#5
(2020-10-20, 14:04:48)maxwal41 Wrote: Я просто не пойму, если у сервака есть эта база, то зачем она агентам? Или файлы должны соответствовать на агенте и серваке.

Code:
// * PERIPHERAL
      $a_inventory['peripheral'] = [];
      $a_peripheral_name = [];
      $per = 0;
      if (isset($array['USBDEVICES'])) {
         foreach ($array['USBDEVICES'] as $a_peripherals) {
            $array_tmp = $thisc->addValues($a_peripherals,
                                           [
                                              'NAME'         => 'name',
                                              'MANUFACTURER' => 'manufacturers_id',
                                              'SERIAL'       => 'serial',
                                              'PRODUCTNAME'  => 'productname']);

            $array_tmp['is_dynamic'] = 1;
            if (isset($a_peripherals['VENDORID'])
                     AND $a_peripherals['VENDORID'] != ''
                     AND isset($a_peripherals['PRODUCTID'])) {

               $dataArray = PluginFusioninventoryInventoryExternalDB::getDataFromUSBID(
                          $a_peripherals['VENDORID'],
                          $a_peripherals['PRODUCTID']
                       );
               $dataArray[0] = preg_replace('/&(?!\w+;)/', '&', $dataArray[0]);
               if (!empty($dataArray[0])
                       AND empty($array_tmp['manufacturers_id'])) {
                  $array_tmp['manufacturers_id'] = $dataArray[0];
               }
               $dataArray[1] = preg_replace('/&(?!\w+;)/', '&', $dataArray[1]);
               if (!empty($dataArray[1])
                       AND empty($array_tmp['productname'])) {
                  $array_tmp['productname'] = $dataArray[1];
               }
            }

            if ($array_tmp['productname'] != '') {
               $array_tmp['name'] = $array_tmp['productname'];
            }

            unset($array_tmp['productname']);

            $a_inventory['peripheral'][] = $array_tmp;
            $a_peripheral_name[$array_tmp['name']] = $per;
            $per++;
         }
      }

С этого куска кода видно, что в случае, если с агента не удается подтянуть имя вендора или девайса, то он ищет на сервере. Не факт, что они идентичные, так как плагин и агенты обновляются отдельно.
Хотя, скорее всего главная причина добавления файла на агенты это генерация xml на локальной машине. А на сервере он нужен для упрощения изменения базы, если компов много.
Было бы логично)
  Reply
#6
Не совсем пойму логику. Возможно это просто стандарт совместимый с OCSinventory. Логичнее было бы просто на сервак передавать полученный Id, а тот уже пусть сам переименовывает как ему нравится. А универсальнее было бы агенту с сервака подтягивать эти файлы для идентичности. Но разработчикам виднее.

FilesToDB.php работает? А то я всё думаю обновляться или нет.
  Reply
#7
(2020-10-21, 07:23:28)maxwal41 Wrote: Не совсем пойму логику. Возможно это просто стандарт совместимый с OCSinventory. Логичнее было бы просто на сервак передавать полученный Id, а тот уже пусть сам переименовывает как ему нравится.  А универсальнее было бы агенту с сервака подтягивать эти файлы для идентичности. Но разработчикам виднее.

FilesToDB.php работает? А то я всё думаю обновляться или нет.

SQL скрипт генерируется без проблем. Сейчас внесу еще пару изменений и попробую выполнить в базу.
Не думаю, что обновления влияют на работу скрипта. Он просто парсит файл usb.ids и на основе данных формирует sql для пересоздания таблиц в базе.
Какого рода ошибки у тебя возникают при выполнении FilesToDB.php?
  Reply
#8
А этот php из интерфейса выполняется или отдельно?
При отдельном выполнении я получаю ошибки feof в строках 45,46:

while (!feof($pciFile)) {
$buffer = fgets($pciFile, 4096);

Какая-то ошибка при открытии файла ids.
Но я в это не вникал, т.к. функционал пока не востребован и функция эта вроде не была заявлена в моей версии.
  Reply
#9
(2020-10-21, 09:03:12)maxwal41 Wrote: А этот php из интерфейса выполняется или отдельно?

Я выполнял его как независимый файл, в терминале:
    sudo php FilesToDB.php

Как вариант можно проверить пути к файлам, и убедится, что есть права на изменение указаных файлов.
У меня вылазили ошибки когда я без sudo скрипт запускал.
  Reply
#10
Скрипт в базу выполнен успешно. Проблема решена. Можно закрывать.
  Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)