Привет, Хабр! Хочу поделиться историей создания Aether Monitor+ — простого и легкого монитора системы, который стал моим верным спутником в работе.
Как всё начиналось
Работая за компьютером по 10-12 часов в день, я постоянно ловил себя на том, что проверяю диспетчер задач. То процессор грузится, то память подыхает, то диск трещит по швам. Стандартные инструменты Windows работают, но постоянно переключаться между окнами — то еще удовольствие.
Попробовал разные программы — одни слишком навороченные, другие жрут память как не в себя, третьи выглядят так, будто их делали в 2005 году. В какой-то момент мне это надоело, и я подумал: "А почему бы не сделать свой монитор? Простой, удобный и легкий".
Что получилось в итоге
Aether Monitor+ — это как раз та утилита, которой мне не хватало. Она висит поверх всех окон маленьким виджетом и показывает самое важное: загрузку процессора, использование памяти, свободное место на диске и температуру. Всё это в реальном времени, без лишних деталей.
Самое крутое — программа практически не нагружает систему. Мы с другом поспорили, что уложимся в 30 мегабайт оперативки, и у нас получилось! Обычно она и того меньше занимает — около 20-25 МБ.
Как это работает изнутри
Под капотом всё довольно просто. Я использовал Python — он хоть и не самый быстрый язык, но для таких задач подходит идеально. Главное — правильно всё оптимизировать.
Вот как собираются данные о системе:
def собрать_данные(self):
return {
'процессор': psutil.cpu_percent(interval=1),
'память': psutil.virtual_memory().percent,
'диск': psutil.disk_usage('C:').percent,
'здоровье': self.оценить_состояние_системы()
}
Интервалы обновления я подобрал экспериментально: процессор обновляется каждые 3 секунды, память — раз в 5 секунд, диск — раз в 10 секунд. Так и система не перегружается, и информация всегда актуальная.
Виджет, который всегда под рукой
Маленькое окошко, которое висит поверх всех окон — это то, ради чего всё затевалось. Оно занимает совсем мало места, но показывает всё необходимое:

Можно его перетащить в любое место экрана, кликнуть для открытия главного окна или правой кнопкой вызвать меню. Удобно, что не нужно постоянно сворачивать рабочие окна, чтобы проверить, не перегружена ли система.
Оцениваем здоровье системы
Я добавил простую, но полезную функцию — оценку общего состояния компьютера. Алгоритм такой:
здоровье = 100 - ((процессор * 0.3) + (память * 0.4) + (диск * 0.3))
То есть, если у вас процессор загружен на 50%, память на 80%, а диск на 90%, то общее здоровье системы будет:
100 - ((50×0.3) + (80×0.4) + (90×0.3)) = 100 - (15 + 32 + 27) = 26%
Цветовая индикация сразу показывает, всё ли в порядке:
Зеленый (80-100%) — отлично
Желтый (60-79%) — нормально
Оранжевый (40-59%) — стоит обратить внимание
Красный (0-39%) — критично
Борьба за каждый мегабайт
Самым интересным вызовом была оптимизация потребления памяти. Вот какие трюки помогли уложиться в 30 МБ:
Ленивая загрузка — компоненты создаются только когда они действительно нужны. Виджет, например, появляется только после нажатия кнопки, а не при старте программы.
Умные интервалы — чем реже опрашиваем систему, тем меньше нагрузка. Но и слишком редкие обновления бессмысленны. Нашел золотую середину.
Агрессивная уборка — программа сама следит за тем, сколько памяти она использует, и если приближается к лимиту, запускает сборку мусора и чистит кэши.
Вот как это выглядит в коде:
def оптимизировать_память(self):
if self.текущая_память() > 25: # МБ
import gc
gc.collect() # Принудительная уборка мусора
self.увеличить_интервалы_опроса() # Реже дергаем систему
Для кого этот монитор
Разработчикам — чтобы следить, не сожрала ли всю память IDE или Docker
Геймерам — контролировать температуру и нагрузку во время игровых сессий
Всем остальным — быстро проверять, почему тормозит компьютер
Лично я использую его постоянно. Например, когда собираю большой проект и вижу, что процессор уперся в 100%, понимаю — пора сделать перерыв. Или когда память подходит к 90% — время закрыть лишние вкладки в браузере.
Что дальше
Проект живой и развивается. В планах:
Добавить поддержку Linux и Mac
Сделать возможность настройки внешнего вида
Добавить графики изменения нагрузки over time
Научить программу показывать уведомления при критических значениях
Код полностью открыт, так что если есть идеи для улучшения — welcome! Особенно нужна помощь с тестированием на разных железах и системах.
Попробовать в деле
Если хотите потестировать:
bash
git clone https://github.com/sshcharacter-stack/aethermonitorplus-.git
cd aethermonitorplus-
pip install -r requirements.txt
python main.py
Или качайте готовый exe-файл из релизов на GitHub.
А если просто интересно посмотреть на код или предложить улучшения — заходите в наш Telegram-канал: @shiosoftware
Вместо заключения
Создать такую утилиту оказалось не так сложно, как я думал. Главное — понимать, что именно нужно пользователю, и не пытаться объять необъятное. Иногда простые решения оказываются самыми эффективными.
А вы какими инструментами пользуетесь для мониторинга системы? Интересно узнать о вашем опыте!