# -*- mode: Python -*- # Tiltfile for sysmonstm - local Kubernetes development # Load extensions load('ext://restart_process', 'docker_build_with_restart') load('ext://namespace', 'namespace_create') # Configuration config.define_bool("no-volumes") cfg = config.parse() no_volumes = cfg.get("no-volumes", False) # Create namespace namespace_create('sysmonstm') k8s_yaml(kustomize('k8s/overlays/local')) # ============================================================================ # Docker builds with live reload # ============================================================================ # Aggregator service docker_build( 'sysmonstm-aggregator', context='.', dockerfile='services/aggregator/Dockerfile', target='development', live_update=[ sync('./services/aggregator', '/app/services/aggregator'), sync('./shared', '/app/shared'), sync('./proto', '/app/proto'), ], ) # Gateway service docker_build( 'sysmonstm-gateway', context='.', dockerfile='services/gateway/Dockerfile', target='development', live_update=[ sync('./services/gateway', '/app/services/gateway'), sync('./shared', '/app/shared'), sync('./proto', '/app/proto'), sync('./web', '/app/web'), ], ) # Alerts service docker_build( 'sysmonstm-alerts', context='.', dockerfile='services/alerts/Dockerfile', target='development', live_update=[ sync('./services/alerts', '/app/services/alerts'), sync('./shared', '/app/shared'), ], ) # ============================================================================ # Resource configuration # ============================================================================ # Infrastructure k8s_resource('redis', labels=['infra']) k8s_resource('timescaledb', labels=['infra']) # Application services k8s_resource( 'aggregator', labels=['app'], resource_deps=['redis', 'timescaledb'], port_forwards=['50051:50051'], ) k8s_resource( 'gateway', labels=['app'], resource_deps=['aggregator', 'redis'], port_forwards=['8000:8000'], ) k8s_resource( 'alerts', labels=['app'], resource_deps=['redis', 'timescaledb'], ) # ============================================================================ # Local resources (optional - for running collector locally) # ============================================================================ local_resource( 'collector-local', serve_cmd='cd services/collector && python main.py', deps=['services/collector', 'shared'], resource_deps=['aggregator'], labels=['collector'], auto_init=False, # Don't start automatically env={ 'AGGREGATOR_URL': 'localhost:50051', 'MACHINE_ID': 'tilt-dev', 'COLLECTION_INTERVAL': '5', 'LOG_LEVEL': 'DEBUG', 'PYTHONPATH': '.', }, ) # ============================================================================ # Convenience buttons # ============================================================================ local_resource( 'proto-gen', cmd='python -m grpc_tools.protoc -I./proto --python_out=./shared --grpc_python_out=./shared ./proto/metrics.proto', deps=['proto/metrics.proto'], labels=['tools'], auto_init=False, )