Some checks failed
Security & Dependency Updates / Dependency Security Scan (push) Successful in 29s
Security & Dependency Updates / Docker Security Scan (push) Failing after 53s
Security & Dependency Updates / License Compliance (push) Successful in 13s
Security & Dependency Updates / Check for Dependency Updates (push) Successful in 19s
Security & Dependency Updates / Code Quality Metrics (push) Successful in 11s
Security & Dependency Updates / Security Summary (push) Successful in 7s
Features: - Real-time water level monitoring for Ping River Basin (16 stations) - Coverage from Chiang Dao to Nakhon Sawan in Northern Thailand - FastAPI web interface with interactive dashboard and station management - Multi-database support (SQLite, MySQL, PostgreSQL, InfluxDB, VictoriaMetrics) - Comprehensive monitoring with health checks and metrics collection - Docker deployment with Grafana integration - Production-ready architecture with enterprise-grade observability CI/CD & Automation: - Complete Gitea Actions workflows for CI/CD, security, and releases - Multi-Python version testing (3.9-3.12) - Multi-architecture Docker builds (amd64, arm64) - Daily security scanning and dependency monitoring - Automated documentation generation - Performance testing and validation Production Ready: - Type safety with Pydantic models and comprehensive type hints - Data validation layer with range checking and error handling - Rate limiting and request tracking for API protection - Enhanced logging with rotation, colors, and performance metrics - Station management API for dynamic CRUD operations - Comprehensive documentation and deployment guides Technical Stack: - Python 3.9+ with FastAPI and Pydantic - Multi-database architecture with adapter pattern - Docker containerization with multi-stage builds - Grafana dashboards for visualization - Gitea Actions for CI/CD automation - Enterprise monitoring and alerting Ready for deployment to B4L infrastructure!
107 lines
2.8 KiB
YAML
107 lines
2.8 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
victoriametrics:
|
|
image: victoriametrics/victoria-metrics:latest
|
|
container_name: ping_river_victoriametrics
|
|
ports:
|
|
- "8428:8428"
|
|
volumes:
|
|
- vm_data:/victoria-metrics-data
|
|
- ./vm-config:/etc/victoriametrics
|
|
command:
|
|
- '--storageDataPath=/victoria-metrics-data'
|
|
- '--retentionPeriod=2y'
|
|
- '--httpListenAddr=:8428'
|
|
- '--maxConcurrentInserts=32'
|
|
- '--search.maxQueryDuration=60s'
|
|
- '--search.maxConcurrentRequests=16'
|
|
- '--dedup.minScrapeInterval=30s'
|
|
- '--memory.allowedPercent=80'
|
|
- '--loggerLevel=INFO'
|
|
- '--loggerFormat=json'
|
|
- '--search.maxSeries=1000000'
|
|
- '--search.maxPointsPerTimeseries=100000'
|
|
restart: unless-stopped
|
|
environment:
|
|
- TZ=Asia/Bangkok
|
|
healthcheck:
|
|
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8428/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
start_period: 40s
|
|
labels:
|
|
- "com.victoriametrics.service=ping-river-monitoring"
|
|
|
|
grafana:
|
|
image: grafana/grafana:latest
|
|
container_name: ping_river_grafana
|
|
ports:
|
|
- "3000:3000"
|
|
volumes:
|
|
- grafana_data:/var/lib/grafana
|
|
- ./grafana/provisioning:/etc/grafana/provisioning
|
|
- ./grafana/dashboards:/var/lib/grafana/dashboards
|
|
environment:
|
|
- GF_SECURITY_ADMIN_PASSWORD=admin_password
|
|
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-worldmap-panel
|
|
- GF_USERS_ALLOW_SIGN_UP=false
|
|
- GF_SECURITY_ALLOW_EMBEDDING=true
|
|
- GF_AUTH_ANONYMOUS_ENABLED=false
|
|
- TZ=Asia/Bangkok
|
|
restart: unless-stopped
|
|
depends_on:
|
|
victoriametrics:
|
|
condition: service_healthy
|
|
labels:
|
|
- "com.victoriametrics.service=ping-river-monitoring"
|
|
|
|
ping-river-monitor:
|
|
build: .
|
|
container_name: ping_river_monitor
|
|
environment:
|
|
- DB_TYPE=victoriametrics
|
|
- VM_HOST=victoriametrics
|
|
- VM_PORT=8428
|
|
- TZ=Asia/Bangkok
|
|
restart: unless-stopped
|
|
depends_on:
|
|
victoriametrics:
|
|
condition: service_healthy
|
|
volumes:
|
|
- ./logs:/app/logs
|
|
labels:
|
|
- "com.victoriametrics.service=ping-river-monitoring"
|
|
|
|
ping-river-api:
|
|
build: .
|
|
container_name: ping_river_api
|
|
ports:
|
|
- "8000:8000"
|
|
environment:
|
|
- DB_TYPE=victoriametrics
|
|
- VM_HOST=victoriametrics
|
|
- VM_PORT=8428
|
|
- TZ=Asia/Bangkok
|
|
restart: unless-stopped
|
|
depends_on:
|
|
victoriametrics:
|
|
condition: service_healthy
|
|
volumes:
|
|
- ./logs:/app/logs
|
|
command: ["python", "-m", "src.main", "--web-api"]
|
|
labels:
|
|
- "com.victoriametrics.service=ping-river-monitoring"
|
|
|
|
volumes:
|
|
vm_data:
|
|
driver: local
|
|
grafana_data:
|
|
driver: local
|
|
|
|
networks:
|
|
default:
|
|
name: ping-river-monitoring
|
|
driver: bridge
|