# pancasolva/asentinel architecture

> Architecture diagram of the GitHub repository pancasolva/asentinel, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pancasolva/asentinel
- Repository: https://github.com/pancasolva/asentinel

## Overview

Asentinel monitors application and service endpoints, records status and anomalies, alerts on failures, and presents monitoring data through an admin and guest-facing dashboard. The principal runtime flow is a queued check against a monitored URL, followed by persisted results, broadcasts, and optional email alerts. Users also manage applications, services, access, and notifications. The README documents automated health checks and Reverb updates; sampled sources confirm job behavior and health reporting, but do not show scheduler dispatch or all route-to-controller wiring.

Main entry points: [`routes/api.php`](https://github.com/pancasolva/asentinel/blob/main/routes/api.php) (API routes), [`app/Jobs/CheckServiceJob.php`](https://github.com/pancasolva/asentinel/blob/main/app/Jobs/CheckServiceJob.php) (Endpoint check job), [`app/Http/Controllers/GuestController.php`](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/GuestController.php) (Guest access), [`app/Models/Aplikasi.php`](https://github.com/pancasolva/asentinel/blob/main/app/Models/Aplikasi.php) (Applications)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Dashboard"]
  node_react["React app<br/>[main.jsx]"]
  node_pages["Dashboard pages"]
  node_client["API client<br/>[api.js]"]
end

subgraph group_api["Application API"]
  node_api_routes["API routes<br/>[api.php]"]
  node_auth["Authentication"]
  node_app_api["Applications API"]
  node_service_api["Services API"]
  node_access["Guest access"]
  node_monitor_api["Monitoring API"]
  node_logs_api["Monitoring logs"]
  node_anomaly_api["Anomaly API"]
  node_notification_api["Notifications API"]
  node_notification_service["Report integration"]
  node_health_endpoint["Health endpoint"]
end

subgraph group_monitor["Monitoring"]
  node_health_service["Health checks"]
  node_check_job["Endpoint check job"]
  node_alert_service["Email alerting<br/>[AlertService.php]"]
  node_broadcast["Live update event"]
end

subgraph group_state["Monitoring data"]
  node_apps[("Applications<br/>[Aplikasi.php]")]
  node_services[("Services<br/>[Service.php]")]
  node_monitor_logs[("Monitoring logs<br/>[LogMonitor.php]")]
  node_anomalies[("Anomalies<br/>[LogAnomali.php]")]
  node_users[("Users and access<br/>[User.php]")]
  node_read_notifications[("Read states")]
end

node_user(("Admin or guest"))
node_monitored_endpoint(("Monitored endpoints"))
node_external_api(("External report API"))
node_mail(("Mail service"))
node_reverb(("Reverb clients"))

node_user -->|"uses"| node_react
node_react -->|"renders"| node_pages
node_pages -->|"requests"| node_client
node_client -->|"sends requests"| node_api_routes
node_api_routes -->|"routes"| node_auth
node_api_routes -->|"routes"| node_app_api
node_api_routes -->|"routes"| node_service_api
node_api_routes -->|"routes"| node_access
node_api_routes -->|"routes"| node_monitor_api
node_api_routes -->|"routes"| node_logs_api
node_api_routes -->|"routes"| node_anomaly_api
node_api_routes -->|"routes"| node_notification_api
node_app_api -->|"reads and writes"| node_apps
node_service_api -->|"reads and writes"| node_services
node_service_api -->|"checks access"| node_apps
node_access -->|"validates user"| node_users
node_access -->|"validates app"| node_apps
node_access -->|"updates access"| node_read_notifications
node_monitor_api -->|"reads"| node_monitor_logs
node_logs_api -->|"reads"| node_monitor_logs
node_anomaly_api -->|"reads"| node_anomalies
node_notification_api -->|"fetches reports"| node_notification_service
node_notification_service -.->|"requests reports"| node_external_api
node_notification_api -->|"reads and writes"| node_read_notifications
node_health_endpoint -->|"requests report"| node_health_service
node_check_job -->|"loads and updates"| node_apps
node_check_job -->|"loads and updates"| node_services
node_check_job -->|"checks URL"| node_monitored_endpoint
node_check_job -->|"writes result"| node_monitor_logs
node_check_job -->|"writes failures"| node_anomalies
node_check_job -->|"broadcasts log"| node_broadcast
node_broadcast -->|"publishes update"| node_reverb
node_check_job -->|"requests alert"| node_alert_service
node_alert_service -->|"reads failure history"| node_monitor_logs
node_alert_service -.->|"sends email"| node_mail

click node_react "https://github.com/pancasolva/asentinel/blob/main/resources/js/main.jsx"
click node_pages "https://github.com/pancasolva/asentinel/tree/main/resources/js/pages"
click node_client "https://github.com/pancasolva/asentinel/blob/main/resources/js/api.js"
click node_api_routes "https://github.com/pancasolva/asentinel/blob/main/routes/api.php"
click node_auth "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/AdminController.php"
click node_app_api "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/AplikasiController.php"
click node_service_api "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/ServiceController.php"
click node_access "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/GuestController.php"
click node_monitor_api "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/MonitoringController.php"
click node_logs_api "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/LogMonitorController.php"
click node_anomaly_api "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/LogAnomaliController.php"
click node_notification_api "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/NotificationController.php"
click node_notification_service "https://github.com/pancasolva/asentinel/blob/main/app/Services/NotificationApiService.php"
click node_health_endpoint "https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/HealthController.php"
click node_health_service "https://github.com/pancasolva/asentinel/blob/main/app/Health/HealthCheckService.php"
click node_check_job "https://github.com/pancasolva/asentinel/blob/main/app/Jobs/CheckServiceJob.php"
click node_alert_service "https://github.com/pancasolva/asentinel/blob/main/app/Services/AlertService.php"
click node_broadcast "https://github.com/pancasolva/asentinel/blob/main/app/Events/MonitoringUpdated.php"
click node_apps "https://github.com/pancasolva/asentinel/blob/main/app/Models/Aplikasi.php"
click node_services "https://github.com/pancasolva/asentinel/blob/main/app/Models/Service.php"
click node_monitor_logs "https://github.com/pancasolva/asentinel/blob/main/app/Models/LogMonitor.php"
click node_anomalies "https://github.com/pancasolva/asentinel/blob/main/app/Models/LogAnomali.php"
click node_users "https://github.com/pancasolva/asentinel/blob/main/app/Models/User.php"
click node_read_notifications "https://github.com/pancasolva/asentinel/blob/main/app/Models/ReadNotification.php"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_react,node_pages,node_client,node_reverb toneBlue
class node_api_routes,node_auth,node_app_api,node_service_api,node_access,node_monitor_api,node_logs_api,node_anomaly_api,node_notification_api,node_notification_service,node_health_endpoint toneAmber
class node_health_service,node_check_job,node_alert_service,node_broadcast,node_external_api toneMint
class node_apps,node_services,node_monitor_logs,node_anomalies,node_users,node_read_notifications toneRose
class node_user,node_monitored_endpoint,node_mail toneIndigo
```

## Components

### Dashboard

- [React app](https://github.com/pancasolva/asentinel/blob/main/resources/js/main.jsx): `resources/js/main.jsx`
- [Dashboard pages](https://github.com/pancasolva/asentinel/tree/main/resources/js/pages): `resources/js/pages`
- [API client](https://github.com/pancasolva/asentinel/blob/main/resources/js/api.js): `resources/js/api.js`

### Application API

- [API routes](https://github.com/pancasolva/asentinel/blob/main/routes/api.php): `routes/api.php`
- [Authentication](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/AdminController.php): `app/Http/Controllers/Admin/AdminController.php`
- [Applications API](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/AplikasiController.php): `app/Http/Controllers/Admin/Api/AplikasiController.php`
- [Services API](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/ServiceController.php): `app/Http/Controllers/Admin/Api/ServiceController.php`
- [Guest access](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/GuestController.php): `app/Http/Controllers/GuestController.php`
- [Monitoring API](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/MonitoringController.php): `app/Http/Controllers/Admin/Api/MonitoringController.php`
- [Monitoring logs](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/LogMonitorController.php): `app/Http/Controllers/Admin/Api/LogMonitorController.php`
- [Anomaly API](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/LogAnomaliController.php): `app/Http/Controllers/Admin/Api/LogAnomaliController.php`
- [Notifications API](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/Admin/Api/NotificationController.php): `app/Http/Controllers/Admin/Api/NotificationController.php`
- [Report integration](https://github.com/pancasolva/asentinel/blob/main/app/Services/NotificationApiService.php): `app/Services/NotificationApiService.php`
- [Health endpoint](https://github.com/pancasolva/asentinel/blob/main/app/Http/Controllers/HealthController.php): `app/Http/Controllers/HealthController.php`

### Monitoring

- [Health checks](https://github.com/pancasolva/asentinel/blob/main/app/Health/HealthCheckService.php): `app/Health/HealthCheckService.php`
- [Endpoint check job](https://github.com/pancasolva/asentinel/blob/main/app/Jobs/CheckServiceJob.php): `app/Jobs/CheckServiceJob.php`
- [Email alerting](https://github.com/pancasolva/asentinel/blob/main/app/Services/AlertService.php): `app/Services/AlertService.php`
- [Live update event](https://github.com/pancasolva/asentinel/blob/main/app/Events/MonitoringUpdated.php): `app/Events/MonitoringUpdated.php`

### Monitoring data

- [Applications](https://github.com/pancasolva/asentinel/blob/main/app/Models/Aplikasi.php): `app/Models/Aplikasi.php`
- [Services](https://github.com/pancasolva/asentinel/blob/main/app/Models/Service.php): `app/Models/Service.php`
- [Monitoring logs](https://github.com/pancasolva/asentinel/blob/main/app/Models/LogMonitor.php): `app/Models/LogMonitor.php`
- [Anomalies](https://github.com/pancasolva/asentinel/blob/main/app/Models/LogAnomali.php): `app/Models/LogAnomali.php`
- [Users and access](https://github.com/pancasolva/asentinel/blob/main/app/Models/User.php): `app/Models/User.php`
- [Read states](https://github.com/pancasolva/asentinel/blob/main/app/Models/ReadNotification.php): `app/Models/ReadNotification.php`

### Other components

- **Admin or guest**
- **Monitored endpoints**
- **External report API**
- **Mail service**
- **Reverb clients**

## Connections

- Admin or guest → React app: uses
- React app → Dashboard pages: renders
- Dashboard pages → API client: requests
- API client → API routes: sends requests
- API routes → Authentication: routes
- API routes → Applications API: routes
- API routes → Services API: routes
- API routes → Guest access: routes
- API routes → Monitoring API: routes
- API routes → Monitoring logs: routes
- API routes → Anomaly API: routes
- API routes → Notifications API: routes
- Applications API → Applications: reads and writes
- Services API → Services: reads and writes
- Services API → Applications: checks access
- Guest access → Users and access: validates user
- Guest access → Applications: validates app
- Guest access → Read states: updates access
- Monitoring API → Monitoring logs: reads
- Monitoring logs → Monitoring logs: reads
- Anomaly API → Anomalies: reads
- Notifications API → Report integration: fetches reports
- Report integration → External report API: requests reports
- Notifications API → Read states: reads and writes
- Health endpoint → Health checks: requests report
- Endpoint check job → Applications: loads and updates
- Endpoint check job → Services: loads and updates
- Endpoint check job → Monitored endpoints: checks URL
- Endpoint check job → Monitoring logs: writes result
- Endpoint check job → Anomalies: writes failures
- Endpoint check job → Live update event: broadcasts log
- Live update event → Reverb clients: publishes update
- Endpoint check job → Email alerting: requests alert
- Email alerting → Monitoring logs: reads failure history
- Email alerting → Mail service: sends email
