Не знаю, как точно сформулировать, поэтому надеюсь на коллективную телепатию.
Суть вот в чём.
Допустим, я запускаю в консоли что-то длинное — компиляцию проекта, юнит-тесты и т.п.
Весь вывод можно ранжировать по трём категориям:
— шапка/подвал "будет запущено 100500 тестов..." / "100 тестов прошло, 500 провалилось" — чтобы понимать, чего следует ожидать от забега
— критичные сообщения "[FAILED] Some.Test" — чтобы видеть проблемы по мере их поступления, а не только постфактум, разгребая лог
— весь вывод — чтобы убедиться, что процесс не завис, грубо говоря
(возможно и более мелкое дробление)
Проблем здесь три
1) уровней критичности больше, чем 2 (т.е. нельзя просто так раскидать на stderr и stdout)
2) у исходной программы своё видение, что в какой поток валить; а мне хотелось бы, например, в критичном потоке видеть не только красное [FAILED], но и немножко предыстории
3) как визуализировать?
В общем-то, не так уж и сложно написать программу-фильтр (на питоне или даже awk) и запускать
my_unit_tests 2>&1 | my_pretty_filter
Но как эту красоту визуализировать?
Связываться с голыми curses не хочу. Вот если бы припахать tmux или screen какой-нибудь...
Открыть параллельно три терминала и подключить в каждом из них соответствующий tail -f ~/workspace/severityN.log — это самый последний вариант. Хуже не придумаешь.
Чуть лучше — запустить SublimeText и открыть в нём эти логфайлы — пусть он следит за изменениями. Но это тоже так себе.
Да, желательно решение, пригодное для убунты, мака и гитбаша. Или хотя бы для мака.
Здравствуйте, Кодт, Вы писали: К>Допустим, я запускаю в консоли что-то длинное — компиляцию проекта, юнит-тесты и т.п.
Надо курить систему непрерывной интеграции. Лично я бы поискал необходимые возможности в Jenkins, причём в оригинальном репозитории, который со всеми плагинами.
Здравствуйте, Кодт, Вы писали:
К>Не знаю, как точно сформулировать, поэтому надеюсь на коллективную телепатию...
Ну не знаю) реализовали мы для своего проекта недавно подобную шнягу с кучкой транспортных протоколов, но открывать код пока не собираемся, а то еще конкуренты юзать начнут)
Вкратце, правильно мыслите. Идут сообщения
[PASS] test
, или
[....] test
details...
[FAIL]
все цветное, по завершению echo $? (код завершения) говорит о числе заваленных тестов, больше 255 уже не суть важно сколько не прошло.
Детализация задается параметрами, выхлопа и текста теста достаточно для анализа.
Тест конкретный запускается отдельно, если надо детальнее. Ну, плюшек много, очень) можно еще прикрутить.
Что еще добавить то? Напишите конкретнее что надо, пока не понятно в чем затык конкретно. Ах, да, все это в терминале запускается и выводится.
Здравствуйте, vsb, Вы писали:
vsb>tail можно натравливать на несколько файлов, если это поможет.
Круто, не знал. Одна беда, tail тупо демультиплексирует обновления хвостов, комментируя при этом, какой хвост поменялся. Что при этом на экране творится, догадаться несложно.
Здравствуйте, boot, Вы писали:
B>Что еще добавить то? Напишите конкретнее что надо, пока не понятно в чем затык конкретно. Ах, да, все это в терминале запускается и выводится.
tmux видел? Или, скажем, vim в режиме нескольких тайлов? Вот хочу похожую фигню.
Только мне vim шибко избыточен, хватило бы less, чтобы быстро прокручивать туда-сюда и искать.
А голый less не умеет обновлять в реальном времени. А голый tail не умеет прокручивать и искать.
А на голых curses писать — совсем уж базовую функциональность, конечно, можно — чтоб каждый поток в свою область; но делать геометрию и интерактивность вручную — свят-свят-свят.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, boot, Вы писали:
B>>Что еще добавить то? Напишите конкретнее что надо, пока не понятно в чем затык конкретно. Ах, да, все это в терминале запускается и выводится.
К>tmux видел? Или, скажем, vim в режиме нескольких тайлов? Вот хочу похожую фигню. К>Только мне vim шибко избыточен, хватило бы less, чтобы быстро прокручивать туда-сюда и искать. К>А голый less не умеет обновлять в реальном времени. А голый tail не умеет прокручивать и искать.
Это 2 разных окна, одновременно чтобы показывался хвост и другое место потока, так не бывает. "tail не умеет прокручивать и искать" зато терминал умеет, правда у него надо размер буфера задать, а так, это почти что less.
К>А на голых curses писать — совсем уж базовую функциональность, конечно, можно — чтоб каждый поток в свою область; но делать геометрию и интерактивность вручную — свят-свят-свят.
А вам все вместе или можно частями?) В юникс лайк ос для каждой операции своя тулза, комбайны это другой путь. Чтобы сделать несколько окошек терминала в одном, заодно сохраняя сессию, это screen | tail, если файл читать | grep или sed, если фильтровать надо | в конце можно влепить преобразование текста, цвет, подчеркивание и пр. Как бы все очевидно, конвейер.
Здравствуйте, Кодт, Вы писали:
К>Но как эту красоту визуализировать? К>Связываться с голыми curses не хочу. Вот если бы припахать tmux или screen какой-нибудь...
К>Открыть параллельно три терминала и подключить в каждом из них соответствующий tail -f ~/workspace/severityN.log — это самый последний вариант. Хуже не придумаешь. К>Чуть лучше — запустить SublimeText и открыть в нём эти логфайлы — пусть он следит за изменениями. Но это тоже так себе.
К>Да, желательно решение, пригодное для убунты, мака и гитбаша. Или хотя бы для мака.
Привет,
Я бы попробовал tail + tmux + tmux-copycat для подсвечивания результатов поиска, и возможно использования предопределенных шаблонов.
Здравствуйте, Miroff, Вы писали:
M>grc гиганта мысли не спасет?
Однозначно, не спасёт. GTest и так выдаёт раскрашенный текст, а что толку, если зелёные, жёлтые и красные надписи стремительно скрываются за горизонтом среди обычной дебажной макулатуры?
Здравствуйте, boot, Вы писали:
B>А вам все вместе или можно частями?) В юникс лайк ос для каждой операции своя тулза, комбайны это другой путь. Чтобы сделать несколько окошек терминала в одном, заодно сохраняя сессию, это screen | tail, если файл читать | grep или sed, если фильтровать надо | в конце можно влепить преобразование текста, цвет, подчеркивание и пр. Как бы все очевидно, конвейер.
Так я поэтому и заговорил про тмукс.
Каким-то волшебным способом его запустить, чтобы в каждом под-окошке был свой процесс, а не интерактивный шелл по умолчанию. Чтобы размеры окошек выставились из конфига (и туда же записались, если я их подкручу).
Вот это и будет у-вей: тмукс отвечает за организацию экрана, авк/перл/питон за разбор монолитного выхлопа, лесс/тейл за показ. И скрипт интеграции всего этого добра.
Здравствуйте, Grelkin, Вы писали:
G>Я бы попробовал tail + tmux + tmux-copycat для подсвечивания результатов поиска, и возможно использования предопределенных шаблонов.
Здравствуйте, Кодт, Вы писали:
К>Так я поэтому и заговорил про тмукс. К>Каким-то волшебным способом его запустить, чтобы в каждом под-окошке был свой процесс, а не интерактивный шелл по умолчанию. Чтобы размеры окошек выставились из конфига (и туда же записались, если я их подкручу).
К>Вот это и будет у-вей: тмукс отвечает за организацию экрана, авк/перл/питон за разбор монолитного выхлопа, лесс/тейл за показ. И скрипт интеграции всего этого добра.
Можно записать в ~/.screenrc или ~/.tmuxrc, благо примеров полно, например тут https://bbs.archlinux.org/viewtopic.php?id=55618
А вот если выхлоп одного процесса в разные окошки, это через сокеты прикрутить можно
Здравствуйте, Кодт, Вы писали:
К> Вот это и будет у-вей: тмукс отвечает за организацию экрана, авк/перл/питон за разбор монолитного выхлопа, лесс/тейл за показ. И скрипт интеграции всего этого добра.
Создавайте именованные пайпы (mkfifo) для каждого потока и соединяйте их, как вам нужно.
Hardware eventually fails. Software eventually works. ::: avalon/1.0.442
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, vsb, Вы писали:
vsb>>tail можно натравливать на несколько файлов, если это поможет.
К>Круто, не знал. Одна беда, tail тупо демультиплексирует обновления хвостов, комментируя при этом, какой хвост поменялся. Что при этом на экране творится, догадаться несложно.