Files
sysmonstm/Tiltfile
2025-12-29 14:40:06 -03:00

120 lines
3.2 KiB
Plaintext

# -*- 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,
)