https://github.com/topotun77/operator_statistics
Статистика звонков операторов (python, Django, PosgreSQL, Docker, sql)
https://github.com/topotun77/operator_statistics
django docker postgresql python sql
Last synced: 2 months ago
JSON representation
Статистика звонков операторов (python, Django, PosgreSQL, Docker, sql)
- Host: GitHub
- URL: https://github.com/topotun77/operator_statistics
- Owner: Topotun77
- Created: 2025-01-15T14:33:31.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-01-16T14:02:32.000Z (over 1 year ago)
- Last Synced: 2025-06-01T13:31:33.058Z (about 1 year ago)
- Topics: django, docker, postgresql, python, sql
- Language: Python
- Homepage:
- Size: 403 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Статистика звонков операторов
Django приложение для формирования статистики по звонкам операторов.
## Описание проекта:
- Проект реализован с использованием фреймворка Django.
- В проекте реализован вывод статистики по выбранному оператору через GET-запрос по адресу:
`/report/<оператор>`. Результат предоставляется в формате `json`.
- Если не указывать в предыдущем запросе имя оператора, то расчет статистики будет произведен по всем операторам.
- По адресу `/report/form/` можно получить статистику по оператору с учетом дат начала и окончания периода расчета статистики.
Т.к. для ввода данных используется HTML-форма, то для такого запроса выделен отдельный url.
Форма позволяет ввести имя оператора и даты начала/конца периода расчета. По умолчанию (и в качестве начального
значения для поля формы): дата начала - первое число текущего месяца, дата окончания - текущая дата.
- SQL-запросы из задания №1 приведены в файле [sql_statistic.py](https://github.com/Topotun77/operator_statistics/blob/master/statistics_project/oper_stat/sql_query/sql_statistic.py).
- SQL-запросы с учетом даты начала и окончания периода статистики приведены в файле [sql_statistic_with_date.py](https://github.com/Topotun77/operator_statistics/blob/master/statistics_project/oper_stat/sql_query/sql_statistic_with_date.py).
- Запросы реализованы на чистом SQL, т.к. в ТЗ это было рекомендовано.
- В проекте подробно документированы все используемые функции и классы.
- Используется аннонирование переменных, аргументов и функций.
- Ведется логирование ошибок.
### Скриншот страницы с формой запроса:

### Страница приветствия:

### Вывод данных в формате json:

### Административная панель:

## Для запуска:
1. Установите все необходимые зависимости, выполнив команду:
```
pip install -r requirements.txt
```
2. Задать настройки базы PostgreSQL в файле настроек `\statistics_project\settings.py`
3. Для локального запуска:
- перейдите в каталог `statistics_project`, команда:
```
cd .\statistics_project\
```
- запустите код с помощью команды:
```
python manage.py runserver
```
4. Для запуска на сервере используйте команду:
```
cd statistics_project && gunicorn statistics_project.wsgi:application --bind 0.0.0.0:80
```
## Техническое задание:
```
В СУБД postgresql имеется база с двумя таблицами
Звонок
Column | Type | Nullable |
----------------------------+-----------------------------+----------+
id | integer | not |
кампания | character varying(100) | not |
номер | character varying(15) | not |
время_начала | timestamp without time zone | not |
время_завершения | timestamp without time zone | |
оператор | character varying(100) | |
обработан | boolean | not |
статус | character varying(250) | |
база | character varying(300) | |
длительность | integer | |
успех | boolean | not |
База
Column | Type | Nullable |
----------------+------------------------+----------+
кампания | character varying(100) | not |
идентификатор | character varying(300) | not |
дата_получения | date | not |
параметры | jsonb | not |
задание | character varying(100) | |
Задание №1.
Написать запрос, который для каждого оператора
1. Общее количество успешных звонков по каждой из баз
2. Общее количество успешных звонков по каждой из баз
3. Среднее количество успешных звонков в день. Дни, в которые оператор не совершил ни
одного звонка или количество звонков сильно отклоняется от дневной нормы, учитываться не
должны. Например, если в среднем оператор делает 100 звонков, но в определенный день
сделал только 15, звонки в этот день не должны учитываться в рассчитанном значении.
4. Средняя дневная конверсия (отношение успешных звонков к общему количеству
совершенных звонко). Выбросы должны отсеиваться так же, как для предыдущего пункта.
5. Средняя длительность успешного разговора (считаются все разговоры)
6. Средняя длительность неуспешного разговора.
Допускается реализация на чистом SQL (рекомендуется), либо в виде скрипта на python.
Задание №2.
Реализовать приложение (веб-сервер) с использованием django или aiohttp, которое будет
принимать
1. GET-запрос на адрес /report/<оператор> и возвращать статистику из предыдущего задания
по указанному оператору в формате json. Например, на запрос к адресу
http://localhost/report/a.yanshina программа должна возвращать статистику по оператору
a.yanshina. Если оператор не указан, то приложение должно возвращать запрос по всем
операторам, совершавшим звонки за текущий месяц.
2. POST-запрос на адрес на тот же адрес, содержащий данные формы. Поля формы
'from_date' и 'to_date', если они присутствуют, содержат даты в формате 'день.месяц.год'. Если
'from_date' отсутствует, значение предполагается равным 1му числу текущего месяца. Если
'to_date' отсутствует, его значение предполагается равным текущей дате. В ответ на запрос
приложение должно возвращать статистику по оператору из задания #1, посчитанную за
указанный период.
```