blob: 9a76facde58b6841ac2a523bb3d5f982ee3bec61 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
# Kaze
A minimal, performant status page application written in Go.
## Features
- **Monitor Types**: HTTP, HTTPS (with SSL certificate tracking), TCP
- **Full Metrics**: Response time, SSL expiry, status codes, uptime percentage
- **Configurable History**: 7, 30, or 90 days retention
- **Monitor Groups**: Organize monitors into logical categories
- **Incidents**: Manual incident tracking via YAML configuration
- **Dark/Light Mode**: System preference detection with manual toggle
- **Single Binary**: All assets embedded, no external dependencies
- **SQLite Storage**: Lightweight, file-based database
## Quick Start
```bash
# Build
make build
# Copy and edit configuration
cp config.example.yaml config.yaml
# Run
./kaze
```
Open http://localhost:8080 to view the status page.
## Configuration
```yaml
site:
name: "My Status Page"
description: "Service Status"
server:
host: "0.0.0.0"
port: 8080
storage:
path: "./kaze.db"
history_days: 90
groups:
- name: "Web Services"
monitors:
- name: "API"
type: https
target: "https://api.example.com/health"
interval: 30s
timeout: 10s
expected_status: 200
- name: "Infrastructure"
monitors:
- name: "Database"
type: tcp
target: "db.example.com:5432"
interval: 30s
timeout: 5s
incidents:
- title: "Scheduled Maintenance"
status: scheduled
message: "Database upgrade"
scheduled_start: "2026-02-01T02:00:00Z"
scheduled_end: "2026-02-01T04:00:00Z"
```
See `config.example.yaml` for full configuration reference.
## Monitor Types
### HTTP/HTTPS
```yaml
- name: "API"
type: https
target: "https://api.example.com"
interval: 30s
timeout: 10s
expected_status: 200
verify_ssl: true
method: GET
headers:
Authorization: "Bearer token"
```
### TCP
```yaml
- name: "Database"
type: tcp
target: "db.example.com:5432"
interval: 30s
timeout: 5s
```
## API Endpoints
| Endpoint | Description |
|----------|-------------|
| `GET /` | Status page HTML |
| `GET /api/status` | All monitors status (JSON) |
| `GET /api/monitor/{name}` | Single monitor status (JSON) |
| `GET /api/history/{name}` | Monitor uptime history (JSON) |
## Building
```bash
# Development build
make build
# Production build (optimized)
make build-prod
# Cross-platform builds
make build-all
```
## Docker
```bash
# Build image
docker build -t kaze .
# Run with single data volume (recommended)
# Place config.yaml in your data directory before running
mkdir -p data
cp config.example.yaml data/config.yaml
# Edit data/config.yaml and set storage.path to "./data/kaze.db"
docker run -d -p 8080:8080 -v $(pwd)/data:/app/data kaze
# Or run with separate mounts (legacy)
docker run -p 8080:8080 -v ./config.yaml:/app/config.yaml -v ./data:/app/data kaze
```
## Command Line Options
```
Usage: kaze [options]
Options:
-config string
Path to configuration file (default "config.yaml")
-debug
Enable debug logging
-version
Show version information
```
## License
MIT
|