Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Расширение функционала #5

Closed
gimntut opened this issue Dec 25, 2016 · 4 comments
Closed

Расширение функционала #5

gimntut opened this issue Dec 25, 2016 · 4 comments
Assignees
Labels
Milestone

Comments

@gimntut
Copy link

gimntut commented Dec 25, 2016

Здравствуйте Артём.
Мне не хватает стандартного функционала gloog'a и я уже собирался начать изучать Си, чтобы улучшить glogg, но заметил, что вы уже занялись улучшением.
В glogg сложно работать с очень широким логами, поэтому хочется чтобы при клике на строке производилась разбивка на более мелкие части.
Т.е. разбивается одна строка, а не все строки, как это делается в анализаторах лога.
Как это выглядит, я изобразил в прототипе:
online: http://webix.com/snippet/bc6dbf4a
gist: https://gist.github.com/gimntut/1b30f92b99dd95485efdd5c8758dbea0#file-klogg-advance-html
Прототип без интерактива, но если захочется, то могу его доработать.
Правая раскладка для большого числа коротких полей.
Нижняя для малого числа длинных полей.

Так же я заложил в прототип идею сложных запросов.
(word1)*(word2) - поиск строк в которых есть и word1 и word2
(word1)+(word2) - поиск строк в которых есть или word1 или word2
Естественно, можно комбинировать: (word1)*(word2)+(word3)*(word4)
Можно было использовать символы & и |, но для работы с русскими текстами символы * и + более удобны - не нужно переключаться. А символ скобки всё равно не используется в классическом glogg'е.
Кроме поиска по сложным выражениям, должно быть и исключение из результатов поиска.

Самое сложное это управление схемами. Т.к. я не был уверен, что вы примите мои идеи, то в прототип закладывать пример реализации не стал, но в общих чертах это должно быть похоже на это видео:
https://youtu.be/i-Agb6IWsDQ
Если захотите, то я могу показать, как я это вижу в виде дополненного прототипа.

Если всё это появится в glogg'e, то это будет программа мечты.

@variar
Copy link
Owner

variar commented Dec 25, 2016

Добрый день. По поводу длинных строк нужно посмотреть код отрисовки. Там могут быть завязки на то, что текст рисуется по одной строке. Я подумаю на эту тему.

По поводу сложных запросов, в glogg используется более - менее стандартный язык регулярных выражений. В klogg синтаксис регулярных выражений максимально приближенный к такому в perl. Не вижу смысла тут что-то менять.

@gimntut
Copy link
Author

gimntut commented Dec 25, 2016

Я подумаю на эту тему.

Т.е. могу надеяться, что вы посмотрите мой пример до того, как начнёте думать.

Не вижу смысла тут что-то менять.

А что скажете о возможности исключать из поиска лишние строки? Например, как исключить строки, которые содержат слово Info?
Кстати, Вы догадались, что я под word1 и word2, подразумевал те самые регулярные выражения?
Самая частая задача: найти строку в которой встречаются все необходимые слова.
Хотелось бы писать (word1)*(word2)*(word3) вместо
(word1|word2|word3).*\1.*\1 - который даст много лишнего
и вместо
(word1.*word2.*word3|word1.*word3.*word2|word2.*word1.*word3|word2.*word3.*word1|word3.*word1.*word2|word3.*word1.*word2) - который точный, но писать задолбаешься
В данном случае word1-word3, действительно слова.

variar added a commit that referenced this issue May 23, 2021
This commit adds new experimental feature -- combining multiple search
patterns using boolean operators `and`, `or`, and `not` (#5, #22, #320).

This mode is enabled by separate button in the search panel. When this
mode is enabled all sub-patterns must be enclosed in `"`. `not` operator
requires its pattern to be enclosed in `()`.

Example of valid combination:
```
("pattern 1" or "pattern 2) and not("pattern 3")
```
@variar variar self-assigned this May 23, 2021
@variar variar added this to the 2021.06 milestone May 23, 2021
variar added a commit that referenced this issue May 23, 2021
This commit adds new experimental feature -- combining multiple search
patterns using boolean operators `and`, `or`, and `not` (#5, #22, #320).

This mode is enabled by separate button in the search panel. When this
mode is enabled all sub-patterns must be enclosed in `"`. `not` operator
requires its pattern to be enclosed in `()`.

Example of valid combination:
```
("pattern 1" or "pattern 2) and not("pattern 3")
```
variar added a commit that referenced this issue May 23, 2021
This commit adds new experimental feature -- combining multiple search
patterns using boolean operators `and`, `or`, and `not` (#5, #22, #320).

This mode is enabled by separate button in the search panel. When this
mode is enabled all sub-patterns must be enclosed in `"`. `not` operator
requires its pattern to be enclosed in `()`.

Example of valid combination:
```
("pattern 1" or "pattern 2) and not("pattern 3")
```
@variar
Copy link
Owner

variar commented May 24, 2021

@gimntut в сборках 21.05.0.995+ появилась возможность комбинировать регулярные выражения с помощью операторов and, or и not. Сами выражения при этом нужно заключать в кавычки. Пример:

("pattern1" or "pattern2") and (not("pattren3") or "pattern4")

Операторы and, or, not выбраны, т.к. во-первых, нашлась хорошая библиотека для парсинга выражений, а во-вторых, это ближе к человеческому синтаксису, чтобы не приходилось учить дополнительный мини-язык для комбинирования выражений.

@gimntut
Copy link
Author

gimntut commented May 24, 2021

Спасибо, посмотрю. Отдельное, огромное спасибо, за возможность исключать строки с помощью регулярок.
[offtop]
Я тут придумал решение, которое позволило бы вообще не изучать новый синтаксис.
Можно было бы сделать так, чтобы результаты поиска можно было бы открывать как файл в новом окне, по которому можно искать.
Тогда можно было бы анализировать самые сложные кейсы, но регулярки оставались бы простыми.
Можно было бы сделать новые окна с обновлением и без. Окно без обновления - это просто открытый temp-файл с результатами родительского поиска, который (файл) удаляется при закрытии программы. Окно с обновлением, это окно содержимое которого меняется при изменении запроса в родительском окне, но не всегда, а только тогда, переходишь на вкладку окна с обновлением и если не включен ручной режим. В ручном режиме окно с обновлением обновляется, только при нажатии на соответствующую кнопку.
Понимаю, что без картинок сложно понять. Если интересно, то могу дать пояснения.
[/offtop]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants