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

trackers

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

Проект представляет собой систему для управления временем и ресурсами в IT-компании, использующую Django. Основной целью является интеграция с внешними системами трекинга задач (например, Jira и Redmine), сбор и обработка данных о затраченном времени и ресурсах на различные проекты и задачи.

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

  1. Административный модуль: Включает управление настройками трекеров, пользователями и их доступом к трекерам.
  2. API-модуль: Предоставляет функциональность для взаимодействия с внешними трекинговыми системами, такими как Jira и Redmine.
  3. Модуль настроек трекера: Отвечает за хранение и управление настройками различных трекеров.
  4. Модуль декораторов: Содержит функции для управления доступом и проверки прав пользователя.
  5. Модель данных: Определяет структуру данных, используемую для работы с трекерами, пользователями и настройками.

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

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

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

Система интегрируется с:

  1. Jira: Сбор данных о затраченном времени и задачах через API Jira.
  2. Redmine: Аналогичная интеграция для сбора данных из системы Redmine.

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

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

  1. spent_time_jira: Расчет затраченного времени в Jira.
  2. spent_jira: Получение информации о затраченном времени в Jira.
  3. post_jira: Добавление записи о затраченном времени в Jira.
  4. put_jira: Обновление информации о затраченном времени в Jira.
  5. delete_jira: Удаление записи о затраченном времени в Jira.
  6. issues_estimates_jira: Получение оценок по задачам в Jira.
  7. issues_jira: Получение списка задач из Jira.
  8. spent_time_redmine: Расчет затраченного времени в Redmine.
  9. spent_redmine: Получение информации о затраченном времени в Redmine.
  10. post_redmine: Добавление записи о затраченном времени в Redmine.
  11. put_redmine: Обновление информации о затраченном времени в Redmine.
  12. delete_redmine: Удаление записи о затраченном времени в Redmine.
  13. issues_estimates_redmine: Получение оценок по задачам в Redmine.
  14. issues_redmine: Получение списка задач из Redmine.

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

Рассмотрим реальный сценарий использования системы. Предположим, что в IT-компании существует необходимость ведения учета времени, затраченного сотрудниками на различные задачи. Система интегрируется с Jira и Redmine, позволяя автоматически собирать данные о затраченном времени и задачах.

Сотрудник, работающий над проектом, заносит информацию о затраченном времени в Jira или Redmine. Администратор системы использует функцию spent_time_jira или spent_time_redmine для расчета общего времени, затраченного на проект. При необходимости обновления или корректировки данных используются функции put_jira или put_redmine. Для получения обзора по задачам применяются issues_jira и issues_redmine.

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

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

  1. Tracker

    • host: Строка, представляющая хост трекера.
    • api_version: Строка, указывающая версию API трекера. Может быть пустой.
    • type: Тип трекера (например, Jira или Redmine).
    • identifier: Уникальный идентификатор трекера.
    • default_activity: Целое число, указывающее на дефолтную активность.
    • status_completed: Строка, обозначающая статус завершения задачи в трекере.
  2. TrackerUser

    • user: Внешний ключ, связывающий с пользователем.
    • api_key: Строка, ключ API для доступа к трекеру.
    • tracker: Внешний ключ, связывающий с трекером.
    • monoissue: Строка, специфичная для трекера задача.
  3. TrackerSetting

    • tracker: Внешний ключ, связывающий с трекером. Один к одному.
    • tracker_cost: Целое число, стоимость использования трекера.
    • contractor_id: Целое число, идентификатор подрядчика.
    • sum_to_pay: Целое число, сумма к оплате.
    • sum_in_rub: Целое число, сумма в рублях.
    • invoicing_date: Целое число, дата выставления счета.
    • estimated_invoice_closing_status_ids: Строка, содержащая идентификаторы статусов закрытия счетов.
  4. RightsSupport

    • Эта модель используется для управления правами доступа, не создаёт таблицу в базе данных. Управляет доступом к задачам.

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

Эта диаграмма представляет различные состояния и переходы внутри моделей данных проекта.

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

  1. Функции работы с Jira и Redmine:

    • Код функций spent_time_jira и spent_time_redmine демонстрирует хорошую структуру и читаемость. Однако можно выделить общие части кода в отдельные функции для уменьшения дублирования.
  2. Обработка ошибок и исключений:

    • В функциях, таких как post_jira и put_jira, имеются обработки исключений, которые корректно перехватывают и обрабатывают возникающие ошибки.
  3. Организация кода:

    • Код хорошо структурирован, и каждый модуль выполняет свою роль. Однако можно рассмотреть возможность более глубокой декомпозиции больших функций для повышения читаемости и упрощения поддержки.
  4. Использование Django моделей:

    • Модели Django, такие как Tracker и TrackerUser, хорошо структурированы и четко определены, что облегчает понимание и взаимодействие с базой данных.

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

  1. Рефакторинг общего кода:

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

    • Декомпозировать большие функции на более мелкие, чтобы улучшить читаемость и упрощение тестирования.

Оценка времени на разработку и оценка кода:

  • Время на разработку: Для опытной команды разработки такой проект мог бы занять приблизительно от 2 до 3 месяцев, учитывая разработку, тестирование и деплой.
  • Оценка кода: На шкале от 1 до 10, данный код можно оценить как 7/10. Код хорошо структурирован и разделен на модули, но есть потенциал для дальнейшего улучшения и оптимизации.