Перейти к основному содержимому

kickstarter_processing

Общее описание проекта

Основная задача системы - автоматизировать процессы обработки в рамках инструмента управления задачами.

Описание модулей проекта

  1. Модель данных: Включает определения объектов KickstarterRedvoiceSetting и RightsSupport, обрабатывающих настройки задач и права доступа.

  2. Обработка задач: В этом модуле реализованы функции для обработки исходящих задач, включая их блокировку, отложенную обработку и обработку связанных задач.

  3. Интеграция с системами управления задачами: Система интегрирована с внешними системами управления задачами, такими как Redmine.

  4. Тестирование: Включает тесты для проверки логики обработки задач.

  5. Утилиты: Вспомогательные инструменты для работы с внешними системами управления задачами и их настройками.

Общая логика работы системы

Система автоматически обрабатывает задачи по расписанию CRON. Это включает проверку статусов задач, обработку блокированных, отложенных и связанных задач. При обнаружении изменений система взаимодействует с внешними системами управления задачами для обновления статусов, переназначения или открытия задач.

Интеграции с внешними системами

Система интегрирована с внешними системами управления задачами (например, Redmine) через API. Это позволяет автоматически обрабатывать задачи на основе их статусов и связей, обновлять информацию о задачах и управлять ими в соответствии с бизнес-правилами проекта.

Действия в системе

Изучив код проекта, я выявил следующие действия, доступные в системе. Эти действия соответствуют функциям, определенным в исходном коде:

  1. Инициализация задачи: Подготовка и начальная настройка задачи перед ее обработкой.

  2. Проверка статуса задачи: Определение текущего состояния задачи, в том числе ее активности и возможности для дальнейшей обработки.

  3. Обновление задачи: Изменение статуса или других параметров задачи в соответствии с выполненными действиями или внешними изменениями.

  4. Блокировка/разблокировка задачи: Установка или снятие блокировки задачи для предотвращения или разрешения ее обработки.

  5. Отложенная обработка задачи: Настройка задачи на выполнение в заданное время или при наступлении определенных условий.

  6. Обработка связанных задач: Управление задачами, связанными с текущей задачей, включая их обновление и синхронизацию.

  7. Взаимодействие с внешними системами управления задачами: Обмен информацией с системами типа Redmine через API для синхронизации состояний задач.

  8. Логирование действий: Запись информации о выполненных действиях и их результатах для аудита и отладки системы.

  9. Тестирование функционала: Выполнение тестовых сценариев для проверки корректности работы системы и ее компонентов.

Сценарий использования

Представим ситуацию в компании, занимающейся разработкой программного обеспечения, где используется система управления проектами на базе Redmine.

Сценарий: В проекте задачи распределены между командами разработчиков, тестировщиков и дизайнеров. Одна из ключевых задач, назначенная разработчику, зависит от завершения предварительной работы дизайнера. Система "kickstarter_processing" автоматически отслеживает статус задач дизайнера и, как только задача дизайнера завершается, система обновляет статус задачи разработчика с "заблокировано" на "в работе". Это обеспечивает плавный переход между этапами работы без необходимости ручного вмешательства менеджера проекта.

Таким образом, система позволяет сэкономить время менеджеров проектов, автоматизируя процесс управления зависимостями между задачами, и обеспечивает более эффективное и организованное управление проектами.

Модель данных

В проекте определены следующие сущности и поля:

  1. KickstarterRedvoiceSetting - Настройки для обработки задач.

    • tracker - Ссылка на объект Tracker, представляющий систему учета задач.
    • tracker_ticket - Идентификатор задачи в системе учета.
    • status_blocked, status_closed, status_rejected, status_reopen, status_draft, status_postponed - Целочисленные поля, представляющие различные статусы задач.
    • postponed_until - Целочисленное поле, указывающее дату, до которой задача отложена.
  2. RightsSupport - Сущность для управления правами доступа.

    • id - Уникальный идентификатор.

Эти сущности используются для хранения конфигураций и прав доступа, необходимых для обработки задач в системе.

Диаграмма Состояний

Диаграмма состояний представляет собой следующие основные состояния задач и переходы между ними:

  1. Открыто: начальное состояние; задача может быть переведена в состояние "заблокировано", "отложено" или "закрыто".
  2. Заблокировано: задача ожидает разблокирования, которое происходит автоматически при изменении статуса блокирующих задач.
  3. Отложено: задача находится в ожидании до определённой даты, после которой она может быть автоматически переоткрыта.
  4. Закрыто: конечное состояние задачи; задача не может быть изменена без специального запроса на переоткрытие.

Анализ кода проекта

Оценка проекта: Код получает 7 из 10.

Обзор: Проект представляет собой Django-приложение для обработки задач в системе управления проектами (например, Redmine). Функционал включает управление статусами задач, обработку связанных задач, а также работу с отложенными и блокированными задачами.

Конкретные замечания:

  1. Модели Django:

    • В models.py, для модели KickstarterRedvoiceSetting заданы поля со статусами как IntegerField. Это может привести к ошибкам, так как значения статусов не самодокументируемы. Лучше использовать ChoiceField с явно определенными значениями для большей ясности и избегания магических чисел. Например:
      STATUS_CHOICES = [
      (7, 'Blocked'),
      (8, 'Closed'),
      # и так далее...
      ]
      status_blocked = models.IntegerField(choices=STATUS_CHOICES, default=7)
  2. Обработка исключений:

    • В processing.py используется широкий перехват исключений, например, except Exception. Это плохая практика, так как может скрыть неожиданные ошибки. Рекомендуется перехватывать только те исключения, которые действительно ожидаемы в данном контексте.
  3. Декораторы:

    • В processing_decorators.py, декораторы supress_kickstarter_processing_errors и supress_issue_update используются для подавления и обработки ошибок. Хотя это может быть уместно, лучше было бы логировать такие ошибки и отправлять уведомления, чтобы обеспечить возможность отслеживания и устранения проблем.

Рекомендации по улучшению:

  • Рефакторинг:

    • Провести рефакторинг с целью улучшения читаемости и поддерживаемости кода. Например, выделить повторяющиеся блоки кода в отдельные функции или методы.
  • Тестирование:

    • Расширить тестовое покрытие, чтобы убедиться в корректности работы всех компонентов системы, особенно в обработке исключений и в сценариях использования декораторов.

Оценка времени на разработку: Для опытной команды разработчиков написание такого проекта может занять около 2-3 недель. Это включает в себя время на планирование, разработку, тестирование и рефакторинг. Важно учитывать, что время может варьироваться в зависимости от сложности бизнес-логики и требований к качеству кода.