Редактор фильтров
От: 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#, компилировать их в код на лету. Вроде должно быть быстро, вопрос с безопасностью остается.


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

Заранее спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.