pipeplot — интерактивная визуализация потока данных из pipe в консоли

    Для тех, кто не хочет покидать консоль, любит её ascii-графику, появилась утилита для отрисовки графиков из pipe. Под катом анимация и примеры.

    Пинг




    ping ya.ru | grep --line-buffered time | sed -u -e 's#.*time=\([^ ]*\).*#\1#' | pipeplot --min 0
    

    Можно отслеживать коронавирус через covidAPI


    while true; \
        do curl -s https://coronavirus-19-api.herokuapp.com/all \
        | jq '.deaths'; \
        sleep 60; \
    done \
    | pipeplot --color 1 --direction left
    

    потребуется установить jq для разбора json

    Пятисотки через графит


    while true; \
    do \
        curl -s 'http://graphite/render?target=my_app_rps_error&format=json&from=-5min&until=now' \
        | jq -c '.[0].datapoints[-1]'; \
        sleep 5; \
    done \
    | sed -u s/null/0/ \
    | stdbuf -oL uniq \
    | stdbuf -oL jq '.[0]' \
    | pipeplot
    

    Буферизация


    Многие консольные утилиты буферизируют stdout. Из-за этого последовательный pipe ломается. Некоторые утилиты поддерживают настройку буферизации: sed -u, grep --line-buffered. В другом случае можно использовать универсальный способ stdbuf -oL и unbuffer.

    Доступные опции


    --color COLOR — цвет колонок, число из палитры Xterm
    --symbol SYMBOL — символ для отображения колонок, поддерживает котиков
    --scale {all,window} — настройка автоматического масштабирования минимума и максимума, all — учитывает все данные, window — только видимые
    --direction {left,right} — направление
    --min MIN --max MAX — фиксирует минимум и максимум, сочетается с автоматическим масштабированием

    Установка


    pip install pipeplot

    P.S.: Добро пожаловать на github проекта ^-^. Пишите в ПРы, или комменты, свои примеры. Самые интересные добавлю в readme!

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 12

      +1

      че-то не работает=)

        0
        можно подробней? какая ось? какая команда? какая ошибка?
          +1

          Ошибок не наблюдается. Просто останавливается при направлении конвейером в вашу тулзу.
          У меня убунту 18.04.
          Команда любая, включая ваш пример с пингом.
          В код загляну надосуге. Некогда пока.

            0
            Проверил. Во втором питоне работает, а в третьем выходит после первой отрисовки. Буду чинить. Спасибо за сообщение!
              0

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

                0
                Может стоит удалить поддержку второго питона и не парится больше?
                  0

                  Ну… У вас же не библиотека, а утилита. В убунте штатно третьего Пайтона ещё в 18.04 нет. Придется поддерживать. Вам:). Я-то пользователь, могу забить на 2й. Вы мантейнер, положено страдать.

              0
              Вторая и третья версия по разному обрабатывают отсутствие данных в пайпе. Второй питон генерит ошибку Resource temporarily unavailable, третий отдаёт пустую строку. При том если пайп закрывается, второй и третий отдаёт пустую строку.
                0
                Поправил. Теперь не должен падать. Но как выйти при поломке пайпа в py3 пока не придумал. Сейчас он висит и ждёт ввода.
            +1

            Мне кажется, еще нужны опции:


            1. Вычисления скользящего среднего
            2. Подстановки единиц измерения
            3. Подстановки названия графика в верхней строке
              0
              Спасибо за предложение. Как вы видите подстановку едениц измерения?

              Ещё думаю добавить временную шкалу.
                +1

                Наверное должно быть два варианта:


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

            Only users with full accounts can post comments. Log in, please.