Автор Тема: Обсуждение и предложения по реализации базы данных проб оборудования  (Прочитано 71746 раз)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 166
    • Домашняя страница
... во всех репозиториях.
Кстати, по этой же причине я не делал никаких зависимостей в apt-repo, чтобы его при любом ограничении можно было запускать.
Андрей Черепанов (cas@)

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
"Всем спасибо, все свободны" :) Лавочка временно закрывается на прием, т.к. найдены некоторые отклонения. Возможность заливать пробы вернется сразу после устранения недоработок, причем вернется с нулем проб (потому как изменится несколько алгоритм обработки присылаемых данных), возможность же просмотра уже загруженных данных на время проведения изменений остается. При этом уже можно будет не сообщать (и лучше на самом деле этого не делать публично) мне на форуме о загруженной конфигурации.
А пока проводится работа с сервером можно и нужно высказываться по сервису в плане замечаний, предложений и т.п. В первую очередь интересно мнение тех, кто сервис опробовал и получил представления что же это такое, хотя если у кого есть мысли, то выкладывайте, т.к. самое время.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 166
    • Домашняя страница
"Всем спасибо, все свободны" :) Лавочка временно закрывается на прием, т.к. найдены некоторые отклонения. Возможность заливать пробы вернется сразу после устранения недоработок, причем вернется с нулем проб (потому как измениться несколько алгоритм обработки присылаемых данных), возможность же просмотра уже загруженных данных останется. При этом уже можно будет не сообщать (и лучше на самом деле этого не делать публично) мне на форуме о загруженной конфигурации.
А пока проводится работа с сервером можно и нужно высказываться по сервису в плане замечаний, предложений и т.п. В первую очередь интересно мнение тех, кто сервис опробовал и получил представления что же это такое, хотя если у кого есть мысли, то выкладывайте, т.к. самое время.
Группировка по типам нужна, поле поиска, нумерация устройств для того, чтобы в комментарии сослаться.
Андрей Черепанов (cas@)

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Группировка по типам нужна
Это я так понимаю что-то вроде процессора, видеоадаптера, звуковой карты и т.п. ?
поле поиска
Погодите, не так быстро :)
нумерация устройств для того, чтобы в комментарии сослаться
Только для результатов отображения или это нужно в самой структуре данных базы ?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 166
    • Домашняя страница
1. Да
3. Для показа результатов
Андрей Черепанов (cas@)

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
"Всем спасибо, все свободны" :) Лавочка временно закрывается на прием, т.к. найдены некоторые отклонения. Возможность заливать пробы вернется сразу после устранения недоработок, причем вернется с нулем проб (потому как изменится несколько алгоритм обработки присылаемых данных), возможность же просмотра уже загруженных данных на время проведения изменений остается. При этом уже можно будет не сообщать (и лучше на самом деле этого не делать публично) мне на форуме о загруженной конфигурации.
Отклонения оказались не такими уж и страшными, поэтому пробы можно продолжать заливать прежним порядком. Возможность залива возвращена и работа будет сосредоточена на обработке информации из собранных проб.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Группировка по типам нужна, поле поиска, нумерация устройств для того, чтобы в комментарии сослаться.
Да, самое-то главное забыл спросить!
Все ли есть в том выводе (кроме текстовой части - названия, модели, фирмы и т.п.), что сейчас отображается при обращении за информацией пробы ?

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Я готов предоставить данные с очень большого количества компьютеров. Только напишите чётко что нужно сделать, пожалуйста.
Так что, попробовали информацию добавить ? И если да, то каковы результаты и впечатления от использования клиента в частности и системы в целом ?

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 074
Я готов предоставить данные с очень большого количества компьютеров. Только напишите чётко что нужно сделать, пожалуйста.
Так что, попробовали информацию добавить ? И если да, то каковы результаты и впечатления от использования клиента в частности и системы в целом ?
Цитировать
Только напишите чётко по пунктам что нужно сделать, пожалуйста.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Я готов предоставить данные с очень большого количества компьютеров. Только напишите чётко что нужно сделать, пожалуйста.
Так что, попробовали информацию добавить ? И если да, то каковы результаты и впечатления от использования клиента в частности и системы в целом ?
Цитировать
Только напишите чётко по пунктам что нужно сделать, пожалуйста.
Ставите пакеты (два noarch) с первого сообщения темы (вообще, см. первое сообщение темы - там собрана вся необходимая информация во второй половине сообщения) и выполняете от пользователя hcl-get -r. Выполнение других действий по желанию, для этого прочтите хотя бы информацию на странице сервиса HCL (hcl.arenet.ru) на предмет этих самых действий.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Да и содержимое
lsb_release -aне помешает.
В этой связи вышла новая версия hcl-get, версия сервера также поменялась и теперь сбор информации принимается только от клиента версии 0.2.1 или старше.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Новая версия с исправлением и доработкой замеченных несуразностей.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Недоглядел небольшой недочет по коду, поэтому выкладываю исправленную версию.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Теперь добавлять комментарии можно и в кодировке ASCII. Версия клиента и сервера обновлены для соответствия такой возможности. Плюс несколько мелких несущественных изменений.
Крайне рекомендуется использовать именно эту версию клиента либо более поздние, т.к. начиная с этой версии все возможные недочеты, которые были присущи ранней альфе и заявленному функционалу, были устранены. Теперь это альфа (судя по всему), которую хорошо бы довести до беты, а потом и релиза, в котором уже не останется проблемных мест и нереализованных возможностей. С этого момента основные усилия будут направлены на серверную часть, чтобы можно было получить те хотелки, которые были озвучены. Поэтому рекомендую тестировать данную версию по всем заявленным функциям (с учетом оговорок и текущего положения в плане выдачи пока ещё неполного спектра информации об оборудовании).

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 6 046
Попробовал соорудить простецкий GUI :) Вроде фурычит :)))

Сергей, а поиск по комментариям будет? :) А то без поиска бида-бида :)))

#!/bin/bash

# Требует: zenity gksu readlink xrandr lspci sed cut tr



XXRA=`xrandr | grep -m 1 current  | sed 's/.*\(current[0-9x ]*,\).*$/\1/g;s/current//' | tr -d ', '`
XRES=`echo $XXRA | cut -d 'x' -f 1` # X
YRES=`echo $XXRA | cut -d 'x' -f 2` # Y
if [ "$XRES" -lt 100 ]; then XRES=630; else let XRES=XRES-40; fi
if [ "$YRES" -lt 100 ]; then YRES=470; else let YRES=YRES-40; fi


if [ "$1" = "-h" ] || [ "$1" = "--help" ]
then
    echo "Ключи запуска:"
    echo "------------------------------------------------------------------"
    echo "     -r или --root  - Запустить от пользователя root для отчета"
    echo "     -h или --help  - Данная информация по ключам командной строки"
    exit
fi

if [ "$1" = "-r" ] || [ "$1" = "--root" ]
then
    ROOT=1
else
    ROOT=0
    if [ "$XRES" -lt 800 ]; then XRES2=XRES; else XRES2=720; fi
    choice=`zenity --list --width=$XRES2 --height=250 --title "Требуемое действие"  --text "Выберите требуемое действие:"  --radiolist --column "V" --column "Ваш выбор" TRUE "1. Создать отчет о работе компьютера и периферии (требуются права ROOT)" FALSE "2. Выполнить поиск по базы данных проб оборудования" `
    cho=${choice:0:1}
    if [ "1" = "$cho" ]
    then
ABSFN=$(readlink -e "$0")
gksu "$ABSFN -r"
exit
    fi
    if [ "2" != "$cho" ]
    then
zenity --error --text="Выбор не сделан!\nРабота закончена!"
exit
    fi
fi


# Читаем lspci

ARRLS=( )
ARRBAD=( )

while read lin
do
    if [ "${#lin}" -gt 10 ]
    then
lin=$(echo $lin | tr -d '|' ) # 0000:00:00.0 Host bridge [0600]: Intel Corporation 440FX - 82441FX PMC [Natoma] [8086:1237] (rev 02)
a1="PCI"
a2=`echo $lin | cut -d ' ' -f 1` # 0000:00:00.0
lin=${lin#$a2}
a4=`echo $lin | sed 's/^.*\(\[[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]\]:\).*$/\1/g' | tr -d ':[]' ` # 0600
lin=`echo $lin | sed 's/\[[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]\]:/|/' `
a6=`echo $lin | sed 's/^.*\(\[[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]\]\).*$/\1/g' | tr -d '[]' ` # 8086:1237
lin=`echo $lin | sed 's/\[[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]\]/|/' `
a3=`echo $lin | cut -d '|' -f 1 | sed 's/^[ ]*//;s/[ ]*$//'` # Host bridge
a5=`echo $lin | cut -d '|' -f 2 | sed 's/^[ ]*//;s/[ ]*$//'` # Intel Corporation 440FX - 82441FX PMC [Natoma]
a7=`echo $lin | cut -d '|' -f 3 | sed 's/^[ ]*//;s/[ ]*$//'` # (rev 02)
if [ "${#a4}" -gt 1 ] &&  [ "${#a3}" -gt 1 ] && [ "${#a6}" -gt 1 ] &&  [ "${#a5}" -gt 1 ]
then
    lin="$a1|$a2|$a3|$a4|$a5|$a6|$a7"
    ARRLS=( "${ARRLS[@]}" "$lin" )
    ARRBAD=( "${ARRBAD[@]}" "0" )
fi
    fi
done < <( lspci -nn -D )


# Читаем usb

while read lin
do
    if [ "${#lin}" -gt 1 ]
    then
if [ -f /sys/bus/usb/devices/$lin/product  ] && [ -f /sys/bus/usb/devices/$lin/idVendor ] && [ -f /sys/bus/usb/devices/$lin/idProduct ]
then
    a1="USB"
    a2=""
    a3="USB device"
    a4=""
    a5=`cat /sys/bus/usb/devices/$lin/product`
    a6=`cat /sys/bus/usb/devices/$lin/idProduct`
    a7=`cat /sys/bus/usb/devices/$lin/idVendor`
    a6="$a7:$a6"
    a7=""
    if [ ${#a5} -gt 1 ] &&  [ ${#a6} -gt 1 ]
    then
if [ "$a6" != "1d6b:0001" ]
then
    lin="$a1|$a2|$a3|$a4|$a5|$a6|$a7"
    ARRLS=( "${ARRLS[@]}" "$lin" )
    ARRBAD=( "${ARRBAD[@]}" "0" )
fi
    fi
fi
    fi
done < <( ls -1 /sys/bus/usb/devices/ )


# Выполняем

if [ "$ROOT" -eq 1 ]
then
    # От Рута
    # Новый временный каталог
    tmpdir=`mktemp -dt "$(basename $0).XXXXXXXXXX"`

    username=`whoami`
    if [ "$username" = "root" ]
    then
userhome="/root/"
    else
userhome="/home/$username"
    fi
    if [ -d $userhome ]
    then
echo $userhome
    else
        zenity --error --text="Ошибка при определении каталога пользователя !\nРабота закончена!"
exit
    fi

    existfile=`find $userhome/.hcl-get/ -name *.tar.bz2 | head -n 1`
    if [ -f $existfile ]
    then
existfile=`basename $existfile | cut -d "." -f1 `
zenity --warning --text="Ваш номер пробы: $existfile \n\nТеперь, пожалуйста, кратко прокомментируйте корректность работы дистрибутива на Вашем компьютере"
    else
#Отправка основы
(echo y | hcl-get -r >$tmpdir/hcl-main-number.txt ; echo $? >$tmpdir/hcl-main-exit.txt ; echo "100" )| zenity --progress --pulsate --title="Сбор данных о устройствах компьютера и занесение в базу" --text "Подождите! Идет работа..." --auto-close

hclexit=`cat $tmpdir/hcl-main-exit.txt`
if [ "$hclexit" -eq 0 ]
then
    hclout=`cat $tmpdir/hcl-main-number.txt |  grep "ей присвоен номер:" | cut -d ":" -f2 `
    zenity --warning --text="Файла для базы успешно отправлен !\nВаш номер пробы: $hclout \n\nТеперь, пожалуйста, кратко прокомментируйте корректность работы дистрибутива на Вашем компьютере"
else
    hclout=`cat $tmpdir/hcl-main-number.txt | tail -n 2 `
    zenity --error --text="Ошибка при отправке файла для базы !\n\n-----------------------\n$hclout\n-----------------------\n\nРабота закончена!"
    exit
fi
    fi

    #Подготовка комментария
    comm1=`echo -e "Опишите, пожалуйста, проблемы при установке:\n\n\nОпишите, пожалуйста, проблемы при работе:\n\n\nОпишите, пожалуйста, общие ощущения от работы дистрибутива:\n" | zenity --width=$XRES --height=$YRES --text-info --title "Общий отчет о работе дистрибутива на Вашем компьютере:" --editable`

    ARGS=""
    total=${#ARRLS[@]}
    comm2=""
    if [ "$total" -gt 0 ]
    then
comm2="${comm2}"$'\n'$'\n'"${comm2}"
for (( index=0; index<$total; index++ ))
do
    ABOOL="FALSE";
    lin=${ARRLS[$index]}
    let a1=index+1
    a2=`echo $lin | cut -d '|' -f 5`
    a3=`echo $lin | cut -d '|' -f 6`
    a4=`echo $lin | cut -d '|' -f 3`
        ARGS="$ARGS $ABOOL \"$a1  $a2\"  \"$a3\"  \"$a4\" "
done
ARGS="--list --width=$XRES --height=$YRES --title \"Не работающие или проблемные устройства\"  --text \"Отметье все устройства которые у Вас не заработали или с которыми были проблемы\"  --checklist --column \"V\" --column \"Название проблемного устройства\" --column \"VID&PID\" --column \"Тип устройства\" $ARGS"
choice=`echo $ARGS | xargs zenity`
IFS='|' read -r -a ARRRD <<<"$choice"
total2=${#ARRRD[@]}
if [ "$total2" -gt 0 ]
then
    #по устройствам
    for (( index2=0; index2<$total2; index2++ ))
    do
lin2=${ARRRD[$index2]}
b1=`echo $lin2 | cut -d ' ' -f 1`
let b2=b1-1
ARRBAD[$b2]=1
lin3=${ARRLS[$b2]}
a3=`echo $lin3 | cut -d '|' -f 5`
a4=`echo $lin3 | cut -d '|' -f 6`
a7=`echo $lin3 | cut -d '|' -f 3`
a5=`echo -e "Опишите, пожалуйста, проблемы c устройством $a3:\n\n\nЕсли Вы нашли решение проблемы, то опишите его пожалуйста:\n" | zenity --text-info --width=$XRES --height=$YRES  --title "Проблемы с устройством $a3 ($a4)"  --editable | tr '\n' '^' `
a0="BAD | $a4 | $a3  - $a7 | $a5 "
comm2="${comm2}"$'\n'"${a0}"
    done
fi
for (( index=0; index<$total; index++ ))
do
    lin=${ARRLS[$index]}
    a2=`echo $lin | cut -d '|' -f 5`
    a3=`echo $lin | cut -d '|' -f 6`
    a4=`echo $lin | cut -d '|' -f 3`
    a6=${ARRBAD[$index]}
    if [ "$a6" -eq 0 ]
    then
a0="OK! | $a3 | $a2  - $a4 | Проблем не зафиксированно!"
comm2="${comm2}"$'\n'"${a0}"
    fi
done
    else
zenity --error --text="Устройства не найдены!"
    fi

    #Пишем комментарий в файл
    echo "$comm1$comm2" > $tmpdir/hcl-comm-write.txt

    # Отправка комментария
    existfile=`find $userhome/.hcl-get/ -name *.tar.bz2 | head -n 1`
    if [ -f $existfile ]
    then
echo "$existfile |  hcl-get -c $tmpdir/hcl-comm-write.txt"
echo $existfile |  hcl-get -c $tmpdir/hcl-comm-write.txt
if [ $? -ne 0 ]
then
    zenity --error --text="Отправка закончилась неудачей!"
else
    zenity --warning --text="Комментарий добавлен!\nСпасибо за Ваш отзыв!"
fi
    else
zenity --error --text="Пробы не найдены!\nОтправка комментария не возможна!"
    fi

else
    # От Юзера
    ARGS=""
    total=${#ARRLS[@]}
    if [ "$total" -gt 0 ]
    then
for (( index=0; index<$total; index++ ))
do
    ABOOL="FALSE";
    if [ $index -eq 0 ]; then ABOOL="TRUE";  fi
    lin=${ARRLS[$index]}
    let a1=index+1
    a2=`echo $lin | cut -d '|' -f 5`
    a3=`echo $lin | cut -d '|' -f 6`
    a4=`echo $lin | cut -d '|' -f 3`
        ARGS="$ARGS $ABOOL \"$a1  $a2\"  \"$a3\"  \"$a4\" "
done
ARGS="--list --width=$XRES --height=$YRES --title \"Поиск информации по устройству\"  --text \"Выберите по какому устройству будет производится поиск\"  --radiolist --column \"V\" --column \"Название искомого устройства\" --column \"VID&PID\" --column \"Тип устройства\" $ARGS"

varexit=0
while [ "$varexit" -eq 0  ]
do
    choice=`echo $ARGS | xargs zenity`
    if [ $? -ne 0 ]; then zenity --warning --text="Работа закончена!"; varexit=1; exit; fi
    cho=`echo $choice | cut -d ' ' -f 1`
    let index=cho-1
    lin=${ARRLS[$index]}
    a2=`echo $lin | cut -d '|' -f 5`
    a3=`echo $lin | cut -d '|' -f 6`
    if [ ${#a2} -gt 1 ] &&  [ ${#a3} -gt 1 ]
    then
# Пробуем искать
varread1=`hcl-get -q $a3`
if [ $? -ne 0 ]; then zenity --error --text="Ошибка чтения из базы данных устройств\nРабота закончена!"; exit; fi
varread2=`hcl-get -q $a2`
#Удалим одинаковые строки
varread=`echo "$varread1\n$varread2" | grep '|' | uniq -u`
#вывод окна
IFS='\n' read -r -a ARRRD <<<"$varread"
ARGS2=""
total2=${#ARRRD[@]}
if [ "$total2" -gt 0 ]
        then
    for (( index2=0; index2<$total2; index2++ ))
    do
lin2=${ARRRD[$index2]}
let a9=index2+1
a5=`echo $lin2 | cut -d '|' -f 1`
a6=`echo $lin2 | cut -d '|' -f 2`
a7=`echo $lin2 | cut -d '|' -f 3`
a8=`echo $lin2 | cut -d '|' -f 4`
if [ ${#a6} -gt 1 ] &&  [ ${#a7} -gt 1 ]
then
        ARGS2="$ARGS2 \"$a9  $a5  $a6  $a7  $a8\" "
    else
        ARGS2="$ARGS2 \"$a9    $a5\" "
    fi
    done
    ARGS2="--list --width=$XRES --height=$YRES --title \"Найденная в базе информации по устройству\"  --text \"Выберите какую запись по устройству вывести на экран\" --column \"Запись по устройству\" $ARGS2"
    varexit2=0
    while [ "$varexit2" -eq 0  ]
    do
choice=`echo $ARGS2 | xargs zenity`
if [ $? -ne 0 ]
then
    varexit2=1
else
    cho=`echo $choice | cut -d ' ' -f 1`
    let index3=cho-1
    lin3=${ARRRD[$index3]}
    a5=`echo $lin3 | cut -d '|' -f 1`
    a6=`echo $lin3 | cut -d '|' -f 2`
    a7=`echo $lin3 | cut -d '|' -f 3`
    a8=`echo $lin3 | cut -d '|' -f 4 | tr '^' '\n'`
    echo "$a7 ($a6) - $a5 \n\n$a8" | zenity --text-info --title "Комментарий по $a7 ($a6)"
fi
    done
else
    zenity --warning --text="По запросу ничего не найдено!"
fi
    else
zenity --error --text="Ошибка чтения строки описания устройства!\nРабота закончена!"
    fi
done
    else
zenity --error --text="Устройства не найдены!\nРабота закончена!"
    fi
fi