# Argus Master Module

A lightweight Flask + SQLite service that manages Argus agent nodes. It exposes node registration, status updates, configuration management, statistics, and generates `nodes.json` for the metric module.

## Build & Run

```bash
cd src/master
./scripts/build_images.sh          # builds argus-master:dev
```

Local run via Docker compose (test stack):

```bash
cd src/master/tests
./scripts/01_up_master.sh
```

Service listens on port `3000` (`31300` when using the provided test compose). Key environment variables:

- `DB_PATH` (default `/private/argus/master/db.sqlite3`)
- `METRIC_NODES_JSON_PATH` (default `/private/argus/metric/prometheus/nodes.json`)
- `OFFLINE_THRESHOLD_SECONDS`, `ONLINE_THRESHOLD_SECONDS`, `SCHEDULER_INTERVAL_SECONDS`

## REST API Summary

Base path: `/api/v1/master`

- `GET /nodes` — list node summaries
- `GET /nodes/{id}` — node detail
- `POST /nodes` — register/re-register
- `PUT /nodes/{id}/status` — status report (timestamp + health map)
- `PUT /nodes/{id}/config` — update config/labels (partial)
- `GET /nodes/statistics` — totals + grouped counts
- `GET /healthz`, `GET /readyz` — health checks

`nodes.json` only contains nodes whose status is `online`.

## Tests

End-to-end tests are Docker based:

```bash
cd src/master/tests
./scripts/00_e2e_test.sh
```

Scripts create temporary `private/` and `tmp/` directories under `tests/`; they are cleaned automatically by `06_down.sh`.
