Привет, Хабр! Хочу поделиться историей создания 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

github

Вместо заключения

Создать такую утилиту оказалось не так сложно, как я думал. Главное — понимать, что именно нужно пользователю, и не пытаться объять необъятное. Иногда простые решения оказываются самыми эффективными.

А вы какими инструментами пользуетесь для мониторинга системы? Интересно узнать о вашем опыте!

Комментарии (0)