Built to order

System Health Monitor Desktop App using Python

This project is a desktop system-health monitoring application written in Python — a task-manager-grade tool that shows live CPU (per-core), memory, disk and network usage as updating graphs, a sortable process table with per-process resource stats and kill control, user-defined threshold alert rules (e.g. warn when CPU stays above 85% for 2 minutes) with desktop notifications, persistent history logging to SQLite, and a system-information panel. It is built with PyQt6 for the native desktop UI, psutil for cross-platform metric collection, and matplotlib canvases for the live charts. A

System Health Monitor Desktop App using Python — project thumbnail preview
More project photos (4)

The problem

Operating systems ship a task manager, but it forgets everything: no history, no alerts, no export, and no way to say "tell me when this server's disk fills up." This project builds the missing tool — a native desktop application in Python that continuously samples CPU, memory, disk and network counters, draws them as live updating graphs, and watches them against alert rules the user defines. The architecture is a clean producer/consumer split: a sampler thread polls psutil at the configured interval and pushes samples into a ring buffer; the Qt event loop renders the charts and evaluates thresholds without blocking. History persists in SQLite so graphs can be reviewed across restarts and exported to CSV. Because every reading comes from real OS counters on the machine it runs on, the demo is live and un-fakeable — the CPU graph spikes the moment you open another program — which makes reviews and vivas easy to carry.

How it works

  1. A background QThread samples psutil.cpu_percent (percpu), virtual_memory, disk_usage, disk_io_counters and net_io_counters every N seconds (default 1 s).
  2. Samples land in a fixed-size ring buffer in memory and are flushed to SQLite in batches, keeping the UI thread free for rendering.
  3. Matplotlib canvases embedded in PyQt6 widgets redraw from the buffer on a Qt timer, giving smooth live graphs with a trailing time window.
  4. The alert engine evaluates each rule against the buffered window each cycle; on trigger it posts a Qt system-tray/desktop notification and writes an alert row to the database.
  5. The process view refreshes from psutil.process_iter with oneshot CPU/memory reads, sorted by the clicked column; kill requests go through psutil's terminate with confirmation.
  6. The history view queries SQLite by metric and time range, renders the replay chart, and exports the selection to CSV.

Tech stack:

  • Python 3.11, PyQt6 (desktop UI, system tray, notifications)
  • psutil (cross-platform CPU, memory, disk, network and process counters)
  • matplotlib (live and history charts embedded in Qt)
  • SQLite (metric history, alert rules, alert log)
  • PyInstaller build spec for a one-click Windows executable
Parameter Value
Language / UI Python 3.11, PyQt6 desktop application
Metric source psutil OS counters (CPU, memory, disk, network, processes)
Sampling 1 s default, configurable 0.5–60 s; ring buffer + batched SQLite writes
Charts Live line/area charts; history replay with zoom; CSV export
Alerts Threshold + duration rules on any metric; desktop notification + log
Storage Local SQLite (history, rules, alert log); retention configurable
Platforms Windows 10/11, Linux, macOS (psutil is cross-platform)
Packaging PyInstaller one-file build spec included

Project features

  • [Live metric dashboards] CPU (overall + per-core), memory, swap, disk usage and network up/down rendered as continuously updating line and area charts with a configurable sampling interval.
  • [Process manager] Sortable process table with PID, name, user, CPU%, memory and status; refresh, kill and priority views with a search filter.
  • [Threshold alert rules] User-defined rules such as "CPU > 85% for 120 s" or "disk C: > 90%" that trigger desktop notifications and log to the alert history.
  • [History logging] Every sample persisted to SQLite; the history view replays any metric over the last hour/day with zoomable charts and CSV export.
  • [System information panel] OS, hostname, CPU model and core count, total RAM, disk partitions, network interfaces and boot time in one reference view.
  • [Dark and light themes] Two polished themes; the layout adapts to window resizing and remembers its geometry between runs.
  • [Configurable and honest] All thresholds, intervals and retention periods are user settings — nothing is hard-coded; readings are always labeled with their source counter.

What is included

  • Complete Python source (sampler thread, alert engine, Qt views, SQLite layer)
  • PyInstaller build spec for packaging a standalone executable
  • Project report PDF (architecture, threading model, psutil counter reference, testing)
  • PPT presentation for final review
  • Viva Q&A preparation document (threads vs processes, Qt signals/slots, psutil, SQLite, OS counters)
  • Setup guide (virtualenv, pip install, running from source, building the exe)

Limitations & prerequisites

  • It monitors the machine it runs on — there is no remote-agent or fleet dashboard; one instance watches one host.
  • Killing processes requires the OS privileges of the logged-in user; system processes may refuse and the app reports that honestly.
  • Readings are OS counters, not calibrated instruments — brief sampling jitter on busy systems is normal and documented.
  • Alert delivery is a local desktop notification; there is no SMS/email/push channel in this build.
  • Historical depth is bounded by the retention setting (default 7 days) to keep the SQLite file small.

Frequently Asked Questions

Is the data real or simulated?

Real. Every value comes from psutil reading the host OS counters live — open another application and watch the CPU graph react. Nothing in the app is hard-coded or simulated.

Can it monitor another computer over the network?

No — this build is a single-host desktop app. Remote monitoring would need an agent + server architecture, which is documented as future scope.

Which OS does it run on?

Windows 10/11, Linux and macOS — psutil and PyQt6 are cross-platform. A PyInstaller spec is included for building a one-click Windows executable.

How do the alerts work?

You define rules (metric, threshold, sustained duration); the alert engine checks them each sampling cycle and raises a desktop notification plus a log entry when a rule stays breached for the configured duration.

What gets stored, and where?

Metric samples, alert rules and the alert log go into a local SQLite database with a configurable retention period (default 7 days); nothing leaves the machine.

Is this project suitable for a final-year project?

Yes — for Computer Science and IT programs. It demonstrates threading, event-driven GUI design, OS-level metrics, database persistence and a genuinely useful tool, all strong viva material. Suitable for B.E./B.Tech final-year projects in Computer Science and IT.

Components & software requirements
  • Python 3.11, PyQt6 (desktop UI, system tray, notifications)
  • psutil (cross-platform CPU, memory, disk, network and process counters)
  • matplotlib (live and history charts embedded in Qt)
  • SQLite (metric history, alert rules, alert log)
  • PyInstaller build spec for a one-click Windows executable
Delivery information

Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.

Support terms

Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.

Download abstract (PDF)

Related guides

All guides
Illustration of JWT authentication: a brass key handing a glowing sealed token to a server rack and a laptop login screen, linked by a chain motif.B.E./B.Tech Computer Science and IT students adding login and protected APIs to their final-year web projects

JWT Authentication for Students: Tokens, Signatures, Refresh Flows and a Node.js Implementation

How does JWT login actually work? When a user logs in, the server issues a signed token in three parts — header, payload, signature. The client sends it back as an Authorization: Bearer header, and the server verifies the signature instead of looking up a session. This guide decodes a real token by hand, walks through the full login and refresh flow, and builds a working Node.js implementation with bcrypt password hashing, token rotation, and storage rules that survive a viva.

Read guide
Illustration of SQL versus NoSQL: neat filing-cabinet table rows on one side against flexible nested document cards on the other, joined by dotted lines.B.E./B.Tech Computer Science and IT students choosing and designing the database for their final-year project

SQL vs NoSQL for Final-Year Projects: Which Database Should You Pick?

MySQL or MongoDB for your final-year project? SQL databases store data in related tables with enforced schemas, joins and transactions — the right default when your data is structured and money or records must stay consistent. NoSQL document stores trade the rigid schema for flexible, nested documents that ship faster when your data shape keeps changing. This guide compares them with a worked hospital-appointment example in both, a decision table, and rules matched to common project archetypes.

Read guide
Editorial illustration of shipping containers transforming into glowing software windows beside a laptop showing container layers, in blue and teal tones.B.E./B.Tech Computer Science and IT final-year students shipping web/backend projects

Docker for Student Projects: Images, Containers and Compose from Zero

End ‘it works on my machine’ failures: learn what Docker images and containers actually are, write lean Dockerfiles that exploit layer caching, persist data with volumes, orchestrate app-plus-database with Compose, and package an evaluator-proof submission — with the debugging table for every error you will definitely meet.

Read guide
Get a quotation