Использование классов только со статическими методами для организационных целей? - PullRequest
0 голосов
/ 29 ноября 2018

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

Мой желаемый формат - иметь отдельный файл Python для каждого клиента, которого мы обслуживаем для организационных целей, и в каждом файле есть ряд условий с соответствующими действиями, если условия выполняются.Затем управляющий сценарий получает данные оповещения, пропускает их через каждое условие в соответствующем клиентском файле и, когда условие возвращает True, передает данные в соответствующую функцию действия.Поэтому мой вопрос заключается в том, как это организовать.

В настоящее время в файле клиента у меня есть класс для каждого «известного» условия с двумя @staticmethod функциями: condition () и action ().Тогда логика управляющего сценария будет эффективно [псевдокодом]:

for class in client_file:
    if class.condition(alert_data):
        class.action(alert_data)

Организационно, мне это нравится.У каждого клиента есть файл, и у каждой известной вещи есть класс.Мое сомнение, я не уверен, является ли это «питоническим» или вообще кошерным.Я использую @staticmethod s, потому что мне не нужно, чтобы эти классы имели несколько экземпляров, мне просто нравится организационная способность группировать функции по классам для логической релевантности, но все равно выглядит немного странно, и я боюсь, что это может привести кпутаница.

Итак, меня интересует мнение сообщества, кажется ли это нормальным организационным методом для моего приложения, или у вас есть какие-либо предложения о лучших способах поддержания аккуратности?

Пример класса:

class HostIsWindows:
    @staticmethod
    def condition(alert_data):
        if 'os_type' in alert and alert['os_type'] == 'windows':
            return True
        else:
            return False

    @staticmethod
    def action(alert_data):
        ... do something ...
        return "This is a result message."
...