Skip to content

a4it/status

Repository files navigation

Status Monitoring Platform

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.

Java GraalVM Spring Boot PostgreSQL License

Overview

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.

Key Features

  • 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 Stack

Backend

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

Frontend

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

Getting Started

Prerequisites

  • Java 25 (GraalVM 25 recommended)
  • Maven 3.8+
  • PostgreSQL 17+

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/status-monitoring.git
    cd status-monitoring
  2. Configure the database

    Create a PostgreSQL database:

    CREATE DATABASE uptime;
  3. 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
  4. Build and run

    mvn clean install
    mvn spring-boot:run
  5. Access the application

    URL Description
    http://localhost:8080/ Public Status Page
    http://localhost:8080/admin Admin Dashboard
    http://localhost:8080/login Login Page
    http://localhost:8080/swagger-ui.html API Documentation

Configuration

Application Properties

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

Health Check Configuration

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

Email Notifications

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 Values

Component/Platform Status

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

Incident Status (Lifecycle)

Status Description
INVESTIGATING Issue is being investigated
IDENTIFIED Root cause has been identified
MONITORING Fix applied, monitoring for stability
RESOLVED Issue has been resolved

Incident Severity

Severity Description
CRITICAL Complete service failure
MAJOR Significant functionality impacted
MINOR Limited impact on functionality
MAINTENANCE Planned maintenance activity

Security

Role-Based Access Control

Role Permissions
ADMIN Full system access, user management
MANAGER Manage platforms, incidents, maintenance
USER View and create incidents
VIEWER Read-only access

License FAQ

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.


Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Code Guidelines

  • Follow existing code patterns and conventions
  • Services should work with model classes directly (not request/response classes)
  • Do not use Lombok @Builder pattern
  • 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

License

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.

Acknowledgments


Made in Europe

Developed by Tim De Smedt | A4IT.BE

About

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.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors