Как анализировать постоянно обновляемые журналы, содержащие данные XML?

Согласно странице руководства для apt-get флаг -v просто выводит версию apt-get . Так что никакого программного обеспечения устанавливать не будет.

Запустить вместо этого

ssh -t root@111.111.111 'apt-get install -y expect'

0
22.02.2018, 07:14
1 ответ

Язык TXR имеет в своей библиотеке «конечные потоки» :это потоковые объекты, которые следуют за файлами динамического журнала, аналогично утилите tail -f.

Вызов функции (open-tail "/path/to/it")создает и возвращает хвостовой поток. Файл еще не должен существовать. Если и когда файл действительно существует, поток будет читать его до конца, а затем отслеживать его рост, внезапное уменьшение или исчезновение/появление, создавая приложению иллюзию плоского, бесконечного потока данных. Приложение должно читать из потока достаточно быстро, конечно, относительно того, как часто файл ротируется.

В следующей программе мы определяем структуру данных для отслеживания информации о каждой транзакции (запроса -пары ответов )и используем хвостовой поток для сканирования файла журнала с именем dataс использованием TXR. язык шаблонов.

Когда мы сопоставляем запрос, мы создаем новый объект транзакции и помещаем его в хэш-таблицу с ключом на основе идентификатора.

Когда мы видим код неудачного ответа (, отличный от 200 ), мы извлекаем транзакцию для идентификатора. Если он существует, мы обновляем его информацией ответа и печатаем (с помощью пользовательской функции печати объекта, которая регенерирует пару ответов XML-запрос -).

После сопоставления ответа, успешного или нет, мы удаляем соответствующую транзакцию из хеш-таблицы.

@(do                                                                        
   (defstruct xact nil
     id
     req-inner-xml
     res-inner-xml
     (:method print (me *stdout* pretty-p)
       (cond
         (pretty-p
           (put-line "<dataReq>")
           [mapdo put-line me.req-inner-xml]
           (put-line "</dataReq>")
           (put-line "<dataRes>")
           [mapdo put-line me.res-inner-xml]
           (put-line "</dataRes>"))
         (t :))))

   (defvarl xact (hash)))
@(next (open-tail "data"))
@(repeat)
@  (cases)
<dataReq>
@    (all)
  <id>@id</id>
@    (and)
@      (collect)
@lines
@      (until)
</dataReq>
@      (end)
@    (end)
@    (do (set [xact id] (new xact
                             id id
                             req-inner-xml lines)))
@  (or)
<dataRes>
@    (all)
   <id>@id</id>
@    (and)
@      (skip)
   <errcode>
       <errNum>@err</errNum>
   </errcode>
@    (and)
@      (collect)
@lines
@      (until)
</dataRes>
@      (end)
@    (end)
@    (do
       (whenlet ((x (del [xact id])))
         (when (nequal err "200")
           (set x.res-inner-xml lines)
           (pprint x))))
@  (end)
@(end)
0
28.01.2020, 04:30

Теги

Похожие вопросы