A reactive health monitoring platform
Glenn is a reactive health monitoring platform that continuously checks the availability and performance of your applications. Named after the dedicated healer from the light novel "Monster Girl Doctor," Glenn watches over your digital ecosystem with the same care and attention.
- 🔄 Continuous Monitoring: Automatically checks your applications at configurable intervals
- 📊 Real-time Dashboard: Live view of all monitored applications with status indicators
- ⚡ Reactive Architecture: Built with Spring WebFlux and R2DBC for non-blocking operations
- 📈 Response Time Tracking: Monitor performance metrics over time
- 🏷️ Category Management: Organize applications by categories with filtering
- 📱 Responsive Design: Works on desktop and mobile devices
- 🔔 Status History: Complete history of all health checks
- ⚙️ Configurable Status Codes: Define which HTTP codes indicate a healthy application
- 🌐 Live Updates: Server-Sent Events (SSE) for real-time dashboard updates
Glenn is built with a modern reactive stack:
- Backend: Spring Boot 3.3.2 with WebFlux
- Database: PostgreSQL with R2DBC for reactive data access
- Migrations: Liquibase for database schema management
- Frontend: Thymeleaf with Bootstrap 5 and Chart.js
- Real-time: Server-Sent Events (SSE) for live updates
- Build Tool: Maven
- Java 21 or higher
- PostgreSQL 14 or higher
- Maven 3.8+
-
Clone the repository
git clone https://github.com/AZIRARM/Glenn.git cd glenn -
Configure the database
Create a PostgreSQL database:
CREATE DATABASE glenn;
-
Configure environment variables
Create a
.envfile at the project root:POSTGRES_URL=jdbc:postgresql://localhost:5432/glenn POSTGRES_REACTIVE_URL=r2dbc:postgresql://localhost:5432/glenn POSTGRES_USERNAME=postgres POSTGRES_PWD=yourpassword
-
Build the application
mvn clean package
-
Run the application
mvn spring-boot:run
Or with environment variables:
set -a; source .env; set +a; mvn spring-boot:run
-
Access the dashboard
Open your browser and navigate to
http://localhost:1080
- Click the "Add Application" button on the dashboard
- Fill in the application details:
- Name: A descriptive name (e.g., "Production API")
- Category: Optional category for filtering (e.g., "Backend", "Frontend")
- Description: Optional description of the application's purpose
- URL: The endpoint to monitor (must start with http:// or https://)
- Select which HTTP status codes indicate a healthy application
- Use preset buttons for quick selection (2xx Success, 3xx Redirect)
- Default selection includes common success codes
- Click "Add Application" to start monitoring
- Status Cards: Visual cards showing application name, current status, response time, and HTTP code
- Statistics Bar: Overview of total apps, healthy/unhealthy counts, and global uptime
- Category Filtering: Click on category badges to filter applications by category
- Status Filtering: Filter by all, healthy, or unhealthy applications
- Live Updates: Dashboard updates automatically when new health checks are performed
- Quick Actions: Pause/resume monitoring or delete applications directly from the dashboard
Click the "Details" button on any application card to access:
- Complete application information
- Uptime statistics (24h, 7d, 30d)
- Response time chart
- Complete status history
- Edit application configuration
Click the pencil icon (✏️) on an application card or in the details view to:
- Modify application name, category, or description
- Update the monitored URL
- Change accepted status codes
| Property | Description | Default |
|---|---|---|
monitoring.interval |
Interval between health checks (ms) | 30000 |
monitoring.timeout |
HTTP request timeout (ms) | 5000 |
server.port |
Web server port | 1080 |
The monitoring service automatically:
- Checks all active applications at the configured interval
- Records status, response time, and any errors
- Updates the dashboard in real-time via SSE
- Maintains complete history for uptime calculations
| Component | Technology | Purpose |
|---|---|---|
| Core Framework | Spring Boot 3.3.2 | Application foundation |
| Reactive Web | Spring WebFlux | Non-blocking HTTP requests |
| Database | PostgreSQL | Data persistence |
| Reactive DB | R2DBC | Non-blocking database access |
| Migrations | Liquibase | Database version control |
| Template Engine | Thymeleaf | Server-side HTML rendering |
| Frontend | Bootstrap 5 + Chart.js | UI components and charts |
| Real-time | SSE (Server-Sent Events) | Live dashboard updates |
| Build Tool | Maven | Dependency management |
glenn/
├── src/
│ ├── main/
│ │ ├── java/org/azirar/glenn/
│ │ │ ├── endpoints/ # Web controllers
│ │ │ ├── handlers/ # Business logic
│ │ │ ├── models/ # Domain entities
│ │ │ └── repositories/ # Data access
│ │ └── resources/
│ │ ├── db/changelog/ # Liquibase migrations
│ │ ├── static/ # CSS, JS, images
│ │ ├── templates/ # Thymeleaf templates
│ │ └── application.yml # Application config
│ └── test/ # Unit tests
├── pom.xml # Maven configuration
└── README.md # This file
Glenn is named after the compassionate healer from the light novel and anime "Monster Girl Doctor." Just as Glenn treats and cares for monster girls with dedication and expertise, this platform monitors and cares for your applications, ensuring they stay healthy and performant.
- Basic health monitoring
- Real-time dashboard with SSE
- Category filtering
- Response time tracking
- Application editing
- Email/Slack notifications
- Advanced uptime SLAs
- Custom monitoring intervals per application
- API for external integrations
- Prometheus metrics export
- Grafana dashboards
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GNU GENERAL PUBLIC LICENSE - see the LICENSE file for details.
- Inspired by the need for simple, reactive health monitoring
- Named after Glenn Litbeit from "Monster Girl Doctor" (Kensuke Koba)
- Built with Spring Boot and the amazing Java ecosystem
| Feature | Glenn | Uptime Kuma | Gatus | UptimeRobot |
|---|---|---|---|---|
| Modern Tech Stack | ✅ Spring WebFlux/R2DBC (Reactive) | ❌ Node.js (Blocking) | ✅ Go (Efficient) | ❌ Legacy PHP |
| Reactive Architecture | ✅ Non-blocking, High Concurrency | ❌ Synchronous I/O | ✅ Lightweight | ❌ Traditional |
| Database | ✅ PostgreSQL (Enterprise-grade) | ❌ SQLite (File-based) | ❌ No persistence | ✅ Cloud |
| Stream Monitoring | ✅ PostgreSQL, MySQL, MongoDB, SSH, Redis, RabbitMQ | ❌ HTTP/HTTPS only | ❌ HTTP/HTTPS only | ❌ HTTP/HTTPS only |
| Real-time Updates | ✅ SSE (Server-Sent Events) | ✅ WebSockets | ❌ Polling | ❌ Polling |
| History Retention | ✅ Full SQL database (years) | ✅ File-based (limited) | ❌ In-memory only | |
| Self-hosted | ✅ Docker, easy setup | ✅ Docker | ✅ Single binary | ❌ SaaS only |
| Category Filtering | ✅ Yes | ✅ Yes | ❌ No | ✅ Yes |
| Response Time Tracking | ✅ Detailed per check | ✅ Basic | ✅ Basic | ✅ Basic |
| Aspect | Glenn | Others |
|---|---|---|
| Tech Stack Familiarity | ✅ Java 21, Spring Ecosystem | ❌ Node.js, Go, PHP |
| Code Customization | ✅ Full Java control | ❌ Limited by design |
| Integration | ✅ Easy with Java services | |
| Learning Curve | ✅ Natural for Java devs |
| Metric | Glenn | Uptime Kuma | Gatus | UptimeRobot |
|---|---|---|---|---|
| Architecture | Reactive, non-blocking | Event-loop (Node.js) | Concurrent (Go) | Traditional |
| Database | PostgreSQL connection pool | SQLite (single-threaded) | None | Cloud |
| Concurrent checks | ⚡ Excellent | ✅ Good | ✅ Excellent | |
| Memory usage | ~150-250MB | ~50-100MB | ~10-20MB | N/A |
Unlike competitors limited to HTTP/HTTPS, Glenn monitors:
- PostgreSQL databases
- MySQL/MariaDB
- MongoDB
- SSH services
- Redis instances
- RabbitMQ/AMQP
- PostgreSQL persistence means:
- Years of history
- Complex queries
- Data integrity
- Backup/restore capabilities
- Spring WebFlux + R2DBC = truly non-blocking
- Handles thousands of concurrent checks
- Efficient resource usage
- Perfect for microservices environments
- Pure Java - easy to extend
- Familiar Spring ecosystem
- Clean, maintainable codebase
- Perfect for teams already using Java
| Scenario | Glenn | Other Solutions |
|---|---|---|
| Java/Spring ecosystem | ✅ Perfect fit | |
| Mixed protocols (HTTP + DB) | ✅ One tool for everything | ❌ Need multiple tools |
| Long-term historical analysis | ✅ SQL-powered | |
| High-frequency checks | ✅ Reactive architecture | |
| Self-hosted with PostgreSQL | ✅ Native support |
| Aspect | Glenn's Advantage |
|---|---|
| Technology | Most modern stack (Spring WebFlux + R2DBC) |
| Protocol Support | Widest (HTTP + Databases + SSH + Message queues) |
| Data Persistence | Enterprise-grade (PostgreSQL) |
| Developer Experience | Best for Java/Spring developers |
| Architecture | Truly reactive, non-blocking |
| Customization | Full control via Java code |
- ✅ You're a Java/Spring developer
- ✅ You need to monitor databases and services, not just HTTP
- ✅ You want long-term history in PostgreSQL
- ✅ You prefer self-hosted solutions
- ✅ You need a lightweight but powerful monitoring tool
| Coming Soon | Status |
|---|---|
| Notifications (Slack, Discord, Email) | 🚧 Planned |
| Public Status Pages | 🚧 Planned |
| SSL Certificate Monitoring | 🚧 Planned |
| REST API | 🚧 Planned |
| Authentication & Multi-user | 🚧 Planned |
Glenn isn't just another uptime monitor. It's a modern, reactive health monitoring platform built for Java developers who need more than just HTTP checks.
Project Link: Glenn on Github