- Implement custom Python alerting system (src/alerting.py) with water level monitoring, data freshness checks, and Matrix notifications - Add complete Grafana Matrix alerting setup guide (docs/GRAFANA_MATRIX_SETUP.md) with webhook configuration, alert rules, and notification policies - Create Matrix quick start guide (docs/MATRIX_QUICK_START.md) for rapid deployment - Integrate alerting commands into main application (--alert-check, --alert-test) - Add Matrix configuration to environment variables (.env.example) - Update Makefile with alerting targets (alert-check, alert-test) - Enhance status command to show Matrix notification status - Support station-specific water level thresholds and escalation rules - Provide dual alerting approach: native Grafana alerts and custom Python system 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
199 lines
5.1 KiB
Makefile
199 lines
5.1 KiB
Makefile
# Northern Thailand Ping River Monitor - Makefile
|
|
|
|
.PHONY: help install install-dev test test-coverage lint format clean run run-api docker-build docker-run docs
|
|
|
|
# Default target
|
|
help:
|
|
@echo "Northern Thailand Ping River Monitor - Available Commands:"
|
|
@echo ""
|
|
@echo "Setup:"
|
|
@echo " install Install production dependencies"
|
|
@echo " install-dev Install development dependencies"
|
|
@echo ""
|
|
@echo "Development:"
|
|
@echo " test Run all tests"
|
|
@echo " test-cov Run tests with coverage report"
|
|
@echo " lint Run code linting"
|
|
@echo " format Format code with black and isort"
|
|
@echo " clean Clean up temporary files"
|
|
@echo ""
|
|
@echo "Running:"
|
|
@echo " run Run the monitor in continuous mode"
|
|
@echo " run-api Run the web API server"
|
|
@echo " run-test Run a single test cycle"
|
|
@echo " run-status Show system status"
|
|
@echo ""
|
|
@echo "Alerting:"
|
|
@echo " alert-check Check water levels and send alerts"
|
|
@echo " alert-test Send test Matrix message"
|
|
@echo ""
|
|
@echo "Distribution:"
|
|
@echo " build-exe Build standalone executable"
|
|
@echo " package Build and create distribution package"
|
|
@echo ""
|
|
@echo "Docker:"
|
|
@echo " docker-build Build Docker image"
|
|
@echo " docker-run Run with Docker Compose"
|
|
@echo " docker-stop Stop Docker services"
|
|
@echo ""
|
|
@echo "Database:"
|
|
@echo " setup-postgres Setup PostgreSQL database"
|
|
@echo " test-postgres Test PostgreSQL connection"
|
|
@echo " encode-password URL encode password for connection string"
|
|
@echo " migrate-sqlite Migrate SQLite data to PostgreSQL"
|
|
@echo " migrate-fast Fast migration with 10K batch size"
|
|
@echo " analyze-sqlite Analyze SQLite database structure (dry run)"
|
|
@echo ""
|
|
@echo "Documentation:"
|
|
@echo " docs Generate documentation"
|
|
|
|
# Installation
|
|
install:
|
|
uv sync --no-dev
|
|
|
|
install-dev:
|
|
uv sync
|
|
uv run pre-commit install
|
|
|
|
# Testing
|
|
test:
|
|
uv run python test_integration.py
|
|
uv run python test_station_management.py
|
|
|
|
test-cov:
|
|
uv run pytest --cov=src --cov-report=html --cov-report=term
|
|
|
|
# Code quality
|
|
lint:
|
|
uv run flake8 src/ --max-line-length=100
|
|
uv run mypy src/
|
|
|
|
format:
|
|
uv run black src/ *.py
|
|
uv run isort src/ *.py
|
|
|
|
# Cleanup
|
|
clean:
|
|
find . -type f -name "*.pyc" -delete
|
|
find . -type d -name "__pycache__" -delete
|
|
find . -type f -name "*.log" -delete
|
|
rm -rf .pytest_cache/
|
|
rm -rf .mypy_cache/
|
|
rm -rf htmlcov/
|
|
rm -rf dist/
|
|
rm -rf build/
|
|
rm -rf *.egg-info/
|
|
|
|
# Running
|
|
run:
|
|
uv run python run.py
|
|
|
|
run-api:
|
|
uv run python run.py --web-api
|
|
|
|
run-test:
|
|
uv run python run.py --test
|
|
|
|
run-status:
|
|
uv run python run.py --status
|
|
|
|
# Alerting
|
|
alert-check:
|
|
uv run python run.py --alert-check
|
|
|
|
alert-test:
|
|
uv run python run.py --alert-test
|
|
|
|
# Docker
|
|
docker-build:
|
|
docker build -t ping-river-monitor .
|
|
|
|
docker-run:
|
|
docker-compose -f docker-compose.victoriametrics.yml up -d
|
|
|
|
docker-stop:
|
|
docker-compose -f docker-compose.victoriametrics.yml down
|
|
|
|
docker-logs:
|
|
docker-compose -f docker-compose.victoriametrics.yml logs -f
|
|
|
|
# Documentation
|
|
docs:
|
|
cd docs && make html
|
|
|
|
# Database management
|
|
db-migrate:
|
|
uv run python scripts/migrate_geolocation.py
|
|
|
|
# Monitoring
|
|
health-check:
|
|
curl -f http://localhost:8000/health || exit 1
|
|
|
|
metrics:
|
|
curl -s http://localhost:8000/metrics | jq .
|
|
|
|
# Development helpers
|
|
dev-setup: install-dev
|
|
cp .env.example .env
|
|
@echo "Development environment set up!"
|
|
@echo "Edit .env file with your configuration"
|
|
|
|
# Production deployment
|
|
deploy-check:
|
|
uv run python run.py --test
|
|
@echo "Deployment check passed!"
|
|
|
|
# Database management
|
|
setup-postgres:
|
|
uv run python scripts/setup_postgres.py
|
|
|
|
test-postgres:
|
|
uv run python -c "from scripts.setup_postgres import test_postgres_connection; from src.config import Config; config = Config.get_database_config(); test_postgres_connection(config['connection_string'])"
|
|
|
|
encode-password:
|
|
uv run python scripts/encode_password.py
|
|
|
|
migrate-sqlite:
|
|
uv run python scripts/migrate_sqlite_to_postgres.py
|
|
|
|
migrate-fast:
|
|
uv run python scripts/migrate_sqlite_to_postgres.py --fast
|
|
|
|
analyze-sqlite:
|
|
uv run python scripts/migrate_sqlite_to_postgres.py --dry-run
|
|
|
|
# Distribution
|
|
build-exe:
|
|
uv run python build_simple.py
|
|
|
|
package: build-exe
|
|
@echo "Creating distribution package..."
|
|
@if exist dist\ping-river-monitor-distribution.zip del dist\ping-river-monitor-distribution.zip
|
|
@cd dist && powershell -Command "Compress-Archive -Path * -DestinationPath ping-river-monitor-distribution.zip -Force"
|
|
@echo "✅ Distribution package created: dist/ping-river-monitor-distribution.zip"
|
|
|
|
# Git helpers
|
|
git-setup:
|
|
git remote add origin https://git.b4l.co.th/B4L/Northern-Thailand-Ping-River-Monitor.git
|
|
@echo "Git remote configured!"
|
|
|
|
# Quick start
|
|
quick-start: install dev-setup run-test
|
|
@echo "Quick start completed!"
|
|
@echo "Run 'make run-api' to start the web interface"
|
|
|
|
# Gitea Actions
|
|
validate-workflows:
|
|
@echo "Validating Gitea Actions workflows..."
|
|
@for file in .gitea/workflows/*.yml; do \
|
|
echo "Checking $$file..."; \
|
|
uv run python -c "import yaml; yaml.safe_load(open('$$file', encoding='utf-8'))" || exit 1; \
|
|
done
|
|
@echo "✅ All workflows are valid"
|
|
|
|
workflow-test:
|
|
@echo "Testing workflow components locally..."
|
|
make test
|
|
make lint
|
|
make format
|
|
@echo "✅ Workflow test completed"
|