License: This project is licensed under the Polyform Noncommercial License 1.0.0. Free for non-commercial use. For commercial licensing, contact Tim De Smedt or visit A4IT.BE.
A comprehensive, multi-tenant status monitoring solution built with Spring Boot. Monitor platform uptime, manage incidents, schedule maintenance windows, and provide public status pages for your services.
Status Monitoring Platform is a production-ready application designed to track service availability across multiple platforms, log incidents with cause analysis, schedule maintenance windows, and display real-time status information on public status pages.
- Multi-Platform Monitoring - Hierarchical structure (Platform → App → Component) for comprehensive service tracking
- Automated Health Checks - Support for PING, HTTP GET, Spring Boot Actuator, and TCP port checks
- Incident Management - Full incident lifecycle tracking with updates, severity levels, and automatic notifications
- Maintenance Windows - Schedule and communicate planned maintenance to users
- Public Status Pages - Beautiful, no-auth-required status pages for end users
- Multi-Tenant Architecture - Tenant → Organization → User hierarchy with role-based access control
- Real-Time Notifications - Email notifications for incidents and status changes
- Event Logging - API key authenticated event logging from monitored platforms
- Comprehensive Admin Dashboard - Full management interface for all platform operations
| Technology | Version | Purpose |
|---|---|---|
| Java | 25 | Runtime |
| GraalVM | 25 | Native compilation |
| Spring Boot | 4 | Application framework |
| Spring Security | 7 | Authentication & authorization |
| Spring Data JPA | - | Data persistence |
| PostgreSQL | 17 | Database |
| Flyway | - | Database migrations |
| JWT (io.jsonwebtoken) | 0.12.3 | Token-based authentication |
| OpenAPI 3 | - | API documentation |
| Maven | 3.8+ | Build tool |
| Technology | Purpose |
|---|---|
| Thymeleaf | Server-side templating |
| Bootstrap 5 | CSS framework |
| Tabler.io | Admin UI template |
| Vanilla JavaScript (ES6+) | Client-side logic |
Note: All frontend assets are served locally - no CDN dependencies
- Java 25 (GraalVM 25 recommended)
- Maven 3.8+
- PostgreSQL 17+
-
Clone the repository
git clone https://github.com/yourusername/status-monitoring.git cd status-monitoring -
Configure the database
Create a PostgreSQL database:
CREATE DATABASE uptime;
-
Update application properties
Edit
src/main/resources/application.properties:spring.datasource.url=jdbc:postgresql://localhost:5432/uptime spring.datasource.username=your_username spring.datasource.password=your_password # JWT Configuration (use your own secret) jwt.secret=your-base64-encoded-secret-key jwt.expiration=86400000 jwt.refresh-expiration=604800000
-
Build and run
mvn clean install mvn spring-boot:run
-
Access the application
URL Description http://localhost:8080/Public Status Page http://localhost:8080/adminAdmin Dashboard http://localhost:8080/loginLogin Page http://localhost:8080/swagger-ui.htmlAPI Documentation
| Property | Description | Default |
|---|---|---|
jwt.secret |
JWT signing secret (Base64 encoded) | Required |
jwt.expiration |
Access token expiration (ms) | 86400000 (24h) |
jwt.refresh-expiration |
Refresh token expiration (ms) | 604800000 (7d) |
app.registration.enabled |
Enable user registration | true |
health.check.scheduler.enabled |
Enable automated health checks | true |
health.check.scheduler.interval |
Health check interval (ms) | 60000 |
Each platform, app, or component can be configured with its own health check:
| Field | Description | Default |
|---|---|---|
healthCheckEnabled |
Enable health checking | false |
healthCheckType |
PING, HTTP_GET, SPRING_BOOT_HEALTH, TCP_PORT | HTTP_GET |
healthCheckUrl |
URL/endpoint to check | - |
healthCheckInterval |
Check interval (seconds) | 60 |
healthCheckTimeout |
Request timeout (seconds) | 10 |
consecutiveFailuresThreshold |
Failures before marking down | 3 |
expectedStatusCode |
Expected HTTP status code | 200 |
spring.mail.host=smtp.example.com
spring.mail.port=587
spring.mail.username=your-email
spring.mail.password=your-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true| Status | Description |
|---|---|
OPERATIONAL |
Service is running normally |
DEGRADED |
Service is experiencing performance issues |
PARTIAL_OUTAGE |
Some functionality is unavailable |
MAJOR_OUTAGE |
Service is completely unavailable |
| Status | Description |
|---|---|
INVESTIGATING |
Issue is being investigated |
IDENTIFIED |
Root cause has been identified |
MONITORING |
Fix applied, monitoring for stability |
RESOLVED |
Issue has been resolved |
| Severity | Description |
|---|---|
CRITICAL |
Complete service failure |
MAJOR |
Significant functionality impacted |
MINOR |
Limited impact on functionality |
MAINTENANCE |
Planned maintenance activity |
| Role | Permissions |
|---|---|
ADMIN |
Full system access, user management |
MANAGER |
Manage platforms, incidents, maintenance |
USER |
View and create incidents |
VIEWER |
Read-only access |
Can I use this to monitor my company's internal services? Yes. Running the platform internally for your own organization is permitted under the Noncommercial License.
Can I use this at a non-profit or educational institution? Yes. Non-profit and educational use is allowed.
Can I offer this as a hosted/SaaS product to paying customers? No. Hosting the platform and charging customers for access (or bundling it into a paid service) is commercial use and requires a separate commercial license.
Can I embed this in a product I sell? No. Redistributing or incorporating this software into a commercial product requires a commercial license.
Can I modify the code and use it internally? Yes, as long as the use remains non-commercial. You can adapt it to fit your internal needs.
Can I contribute improvements back to the project? Yes, and it's encouraged. See the Contributing section below.
What counts as "commercial use"? Any use where the software generates direct or indirect revenue — including SaaS products, paid support contracts built around this software, or selling products that include it.
How do I get a commercial license? Contact Tim De Smedt or visit A4IT.BE.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code patterns and conventions
- Services should work with model classes directly (not request/response classes)
- Do not use Lombok
@Builderpattern - Use existing packages, do not create new ones
- MVC controllers serve templates only, no business logic
- All business logic in service layer
- REST controllers use request/response classes from
api/package
This project is licensed under the Polyform Noncommercial License 1.0.0 — free for non-commercial use.
For commercial licensing (SaaS, hosted products, commercial integrations), please contact:
See the LICENSE file for full terms.
- Spring Boot
- Tabler.io - Admin dashboard template
- Bootstrap 5
Made in Europe
Developed by Tim De Smedt | A4IT.BE