aboutsummaryrefslogtreecommitdiff
path: root/README.md
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