Skip to content

A web service that permanently saves the history of CPU usage to a database and provides a page with the history in the form of two graphs.

Notifications You must be signed in to change notification settings

IgorGakhov/CPU-Usage-Sensor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CPU-Usage-Sensor

Summary

Описание

CPU-Usage-Sensor - веб сервис, который постоянно сохраняет в базу данных историю величины загрузки процессора с интервалом в 5 секунд и предоставляет страницу, которая изображает срез данных с историей загрузки процессора за последний час в виде двух графиков:

  • Первый - отображает историю изменения моментальной загрузки процессора.
  • Второй - отображает график усредненной загрузки процессора (среднее значение за 1 минуту).

В случае, если сервис на какое-то время окажется выключен, на графиках будут видны пустые промежутки времени, для которых нет данных. Графики рисуются на фронтенде, вычисление значений второго графика производятся на бэкенде.

Установка

  1. Убедитесь, что у вас установлен Python версии 3.6 или выше. Вы можете проверить версию Python, запустив команду в терминале:
python --version
  1. Создайте виртуальное окружение в папке проекта. Для этого перейдите в папку проекта в терминале и выполните команду:
python -m venv venv

Это создаст папку venv внутри вашего проекта.

  1. Активируйте виртуальное окружение, выполнив в терминале команду:
source venv/bin/activate

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

  1. Установите зависимости в пакет, используя менеджер пакетов pip и файл requirements.txt. Для этого выполните команду:
pip install -r requirements.txt

Проверьте, что пакет установлен правильно, запустив приложение. Для этого выполните команду:

python main.py
  1. Если вы хотите выйти из виртуального окружения, выполните команду:
deactivate

После выполнения этой команды приглашение терминала вернется к стандартному виду.

Использование

Как уже было написано в главе "Установка", запуск скрипта производится из корневой директории проекта командой:

python main.py

После этого веб-сервис должен быть запущен на локальном сервере и доступен по адресу http://localhost:5000.

На странице вы увидите два графика. Первый - почти моментально (5 секунд). Второй нужно будет подождать 1 минуту, пока скриптом не будут запрошены первые данные из БД.

Примеры

Как пример, вы через некоторое время можете увидеть что-то подобное:

  • Первый график

  • Второй график

❗ Обратите внимание на пустоты в графиках. В эти промежутки времени скрипт не работал!

Стек проекта и принятые решения

При выполнении задания было принято решение использовать фреймворк Flask в качестве легковесного и гибкого веб-фреймворка для быстрой разработки и запуска прототипа сервиса. Для мониторинга процессора безальтернативно использовалась библиотека psutil. На фронте отрисовка графиков осуществляется за счет библиотеки chart.js и fetch-запросов на эндпоинты для регулярного обновления данных без перезагрузки страницы.

Для сохранения истории загрузки процессора было принято решение использовать две отдельные таблицы в базе данных SQLite. Одна таблица для хранения мгновенной загрузки процессора, а другая для хранения усредненной загрузки за минуту. Для периодического сохранения данных было использовано два отдельных потока (threading), работающих в фоновом режиме.

Для решения задачи можно было использовать асинхронность или очереди задач, а также планировщики задач, например, Cron. В данном случае мы используем потоки для непрерывной записи данных в базу данных и расчета средней загрузки процессора, что позволяет освободить основной поток для обработки пользовательских запросов. Использование асинхронности, очередей задач или планировщиков задач может быть полезно в других ситуациях, например, если мы бы хотели обработать большое количество запросов на обработку данных в фоновом режиме или запланировать выполнение определенных задач на определенное время. Однако, для решения данной задачи, я считаю, что использование потоков является более оптимальным и эффективным решением.


Благодарю компанию «АЛГОНТ» за предоставленное задание.

Спасибо за внимание!

👨‍💻 Автор: @IgorGakhov

About

A web service that permanently saves the history of CPU usage to a database and provides a page with the history in the form of two graphs.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published