Редактор фильтров
От: Lonely Dog Россия  
Дата: 25.12.18 16:40
Оценка:
Добрый день!

Размышляю над редактором фильтров для своей домашней поделки. Поделка получает некие данные из сети (набор сообщений) и отображает их на экране (используется .NET DataGridView в виртуальном режиме). У сообщения есть набор полей, скажем источник (хост), дата&время, категория, текст. Под фильтром я подразумеваю нечто, что позволит пользователю убрать лишние сообщения из списка (убрать мусор). Не иогу понять, как лучше сделать.

Есть следующие мысли:

1. Диалог редактирования фильтра. В нем юзер выбирает поле из списка, выбирает операцию (==, !=, contains и пр), вводит шаблон и выбирает действие (include, exclude). Получится что-то типа такого:
— Category < 2 Exclude
— Category > 4 Exclude
— Source == 192.168.100.0/24 Include
— Text contains "vasya" Include

В другом диалоге юзер выбирает какие фильтры применить и все, задача решена.
Здесь получается, что в одном фильтре нельзя указать несколько условий, но т.к. их можно комбинировать, то это не проблема.

2. Вместо UI для выбора операций сделать простое поле ввода (как в wireshark), пользователь пишет что-то типа:
(category >= 3) && (category <= 4) && (source == 192.168.100.0/24) && ("vasya" in Text)
Вроде пользователю это удобнее. Забыл сказать, что типичный пользователь это админ.
Но здесь надо писать парсер, или брать готовый. Плюс вопрос скорости (сообщений может быть много, несколько десятков тысяч, плюс они могут приходить в реальном времени).

3. Заюзать интерпретатор какого-нибудь языка. Скажем, lua. Пользователь сможет реализовывать какую-угодно сложную логику. Или писать более читабельный код. Здесь опять вопрос скорости и безопасности (вдруг он загрузит какой-то левый модуль и начнет от имени моего процесса ходить в сеть или еще куда-нибудь). Последнее по идее решается запуском в отдельном AppDomain

4. Дать пользователю писать фильтры на C#, компилировать их в код на лету. Вроде должно быть быстро, вопрос с безопасностью остается.


Что вы думаете про это? Как лучше поступить?

Заранее спасибо
Re: Редактор фильтров
От: Sharowarsheg  
Дата: 25.12.18 17:33
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Что вы думаете про это? Как лучше поступить?


Если пользователь доступен, то лучше всего спросить его. А еще лучше посадить его и посмотреть, как он вообще работает.
Отредактировано 25.12.2018 17:34 Sharowarsheg . Предыдущая версия .
Re[2]: Редактор фильтров
От: Lonely Dog Россия  
Дата: 25.12.18 17:39
Оценка:
Здравствуйте, Sharowarsheg, Вы писали:

S>Здравствуйте, Lonely Dog, Вы писали:


LD>>Что вы думаете про это? Как лучше поступить?


S>Если пользователь доступен, то лучше всего спросить его. А еще лучше посадить его и посмотреть, как он вообще работает.


К сожалению, не доступен. С другой стороны, пользователь это типичный админ/программист.
Re[3]: Редактор фильтров
От: Sharowarsheg  
Дата: 25.12.18 17:47
Оценка: 6 (1)
Здравствуйте, Lonely Dog, Вы писали:

S>>Если пользователь доступен, то лучше всего спросить его. А еще лучше посадить его и посмотреть, как он вообще работает.

LD>К сожалению, не доступен. С другой стороны, пользователь это типичный админ/программист.

Реализовать вариант 1 и собрать статистику использования, что вообще люди делают с его помощью. По данным статистики смотреть, надо ли переделывать, или нет.
Re: Редактор фильтров
От: Буравчик Россия  
Дата: 30.12.18 15:29
Оценка: 6 (1)
Здравствуйте, Lonely Dog, Вы писали:

LD>1. Диалог редактирования фильтра. В нем юзер выбирает поле из списка, выбирает операцию (==, !=, contains и пр), вводит шаблон и выбирает действие (include, exclude). Получится что-то типа такого:

LD> — Category < 2 Exclude
LD> — Category > 4 Exclude
LD> — Source == 192.168.100.0/24 Include
LD> — Text contains "vasya" Include

LD>В другом диалоге юзер выбирает какие фильтры применить и все, задача решена.

LD>Здесь получается, что в одном фильтре нельзя указать несколько условий, но т.к. их можно комбинировать, то это не проблема.

LD>2. Вместо UI для выбора операций сделать простое поле ввода (как в wireshark), пользователь пишет что-то типа:

LD>(category >= 3) && (category <= 4) && (source == 192.168.100.0/24) && ("vasya" in Text)
LD>Вроде пользователю это удобнее. Забыл сказать, что типичный пользователь это админ.
LD>Но здесь надо писать парсер, или брать готовый. Плюс вопрос скорости (сообщений может быть много, несколько десятков тысяч, плюс они могут приходить в реальном времени).

В одном из онлайн-сервисов видел совмещение пунктов 1 и 2:
— редактируется список правил как в п.1. Просто условия — без Include, Exclude и т.п. Каждому правилу присваивается номер (1, 2, 3 и т.д.)
— далее формируется логическое выражение (как в п.2.). Но состоит из цифр, указывающих номера правил. Например: "1 И (2 ИЛИ 3 ИЛИ 4) И (НЕ 5)"

Пользоваться удобно
Best regards, Буравчик
Re: Редактор фильтров
От: Qulac Россия  
Дата: 30.12.18 16:29
Оценка: 6 (1)
Здравствуйте, Lonely Dog, Вы писали:

LD>Добрый день!


LD>Размышляю над редактором фильтров для своей домашней поделки. Поделка получает некие данные из сети (набор сообщений) и отображает их на экране (используется .NET DataGridView в виртуальном режиме). У сообщения есть набор полей, скажем источник (хост), дата&время, категория, текст. Под фильтром я подразумеваю нечто, что позволит пользователю убрать лишние сообщения из списка (убрать мусор). Не иогу понять, как лучше сделать.


LD>Есть следующие мысли:


LD>1. Диалог редактирования фильтра. В нем юзер выбирает поле из списка, выбирает операцию (==, !=, contains и пр), вводит шаблон и выбирает действие (include, exclude). Получится что-то типа такого:

LD> — Category < 2 Exclude
LD> — Category > 4 Exclude
LD> — Source == 192.168.100.0/24 Include
LD> — Text contains "vasya" Include

LD>В другом диалоге юзер выбирает какие фильтры применить и все, задача решена.

LD>Здесь получается, что в одном фильтре нельзя указать несколько условий, но т.к. их можно комбинировать, то это не проблема.

LD>2. Вместо UI для выбора операций сделать простое поле ввода (как в wireshark), пользователь пишет что-то типа:

LD>(category >= 3) && (category <= 4) && (source == 192.168.100.0/24) && ("vasya" in Text)
LD>Вроде пользователю это удобнее. Забыл сказать, что типичный пользователь это админ.
LD>Но здесь надо писать парсер, или брать готовый. Плюс вопрос скорости (сообщений может быть много, несколько десятков тысяч, плюс они могут приходить в реальном времени).

LD>3. Заюзать интерпретатор какого-нибудь языка. Скажем, lua. Пользователь сможет реализовывать какую-угодно сложную логику. Или писать более читабельный код. Здесь опять вопрос скорости и безопасности (вдруг он загрузит какой-то левый модуль и начнет от имени моего процесса ходить в сеть или еще куда-нибудь). Последнее по идее решается запуском в отдельном AppDomain


LD>4. Дать пользователю писать фильтры на C#, компилировать их в код на лету. Вроде должно быть быстро, вопрос с безопасностью остается.



LD>Что вы думаете про это? Как лучше поступить?


LD>Заранее спасибо


Сделать набор элементарных правил, типа "Если источник равен такому то" и т.д. А дальше ясно что делать:
Правило := Правило И(ИЛИ) Правило И(ИЛИ)Правило И(ИЛИ) и т.д Т.е. получается такая древообразная структура, ну и дать пользователю возможность ее создавать самому.
Программа – это мысли спрессованные в код
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.