summaryrefslogtreecommitdiff
path: root/f3s/tracing-demo/Justfile
blob: 2d5620e37a22cf9b88ab9c04cacd79e7531cceaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# Tracing Demo Application deployment automation
# Three-tier Python application demonstrating distributed tracing

NAMESPACE := "services"
RELEASE_NAME := "tracing-demo"
CHART_PATH := "./helm-chart"

# Build all Docker images (use docker-image-Justfile for build/push to registry)
build:
    just -f docker-image-Justfile build

# Push images to private registry
push:
    just -f docker-image-Justfile push

# Build and push images
build-push: build push

# Trigger ArgoCD sync
sync:
    @echo "Triggering ArgoCD sync..."
    @kubectl annotate application {{RELEASE_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite
    @sleep 2
    @kubectl get application {{RELEASE_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo ""

# Show ArgoCD application details
argocd-status:
    argocd app get {{RELEASE_NAME}} --core

# Check deployment status
status:
    @echo "=== Pods ==="
    @kubectl get pods -n {{NAMESPACE}} | grep tracing-demo
    @echo ""
    @echo "=== Services ==="
    @kubectl get svc -n {{NAMESPACE}} | grep -E '(frontend|middleware|backend)-service'
    @echo ""
    @echo "=== Ingress ==="
    @kubectl get ingress -n {{NAMESPACE}} tracing-demo-ingress
    @echo ""
    @echo "=== ArgoCD Status ==="
    @kubectl get application {{RELEASE_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" || echo "Not found"

# Restart all pods
restart:
    @echo "Restarting frontend..."
    @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-frontend
    @echo "Restarting middleware..."
    @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-middleware
    @echo "Restarting backend..."
    @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-backend

# View logs from all services
logs:
    @echo "=== Frontend logs ==="
    kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-frontend --tail=20
    @echo ""
    @echo "=== Middleware logs ==="
    kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-middleware --tail=20
    @echo ""
    @echo "=== Backend logs ==="
    kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-backend --tail=20

# Follow logs from frontend
logs-frontend:
    kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-frontend -f

# Follow logs from middleware
logs-middleware:
    kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-middleware -f

# Follow logs from backend
logs-backend:
    kubectl logs -n {{NAMESPACE}} -l app=tracing-demo-backend -f

# Test the application
test:
    @echo "Testing frontend health endpoint..."
    curl http://tracing-demo.f3s.buetow.org/
    @echo ""
    @echo "Testing API process endpoint..."
    curl http://tracing-demo.f3s.buetow.org/api/process

# Load test - generate multiple traces
load-test:
    @echo "Generating 50 requests with 0.5s delay..."
    @for i in {1..50}; do \
        curl -s http://tracing-demo.f3s.buetow.org/api/process >/dev/null && echo "Request $$i complete"; \
        sleep 0.5; \
    done
    @echo "Load test complete!"

# Port forward to services for local testing
port-forward-frontend:
    kubectl port-forward -n {{NAMESPACE}} svc/frontend-service 5000:5000

port-forward-middleware:
    kubectl port-forward -n {{NAMESPACE}} svc/middleware-service 5001:5001

port-forward-backend:
    kubectl port-forward -n {{NAMESPACE}} svc/backend-service 5002:5002

# Check if traces are being generated
check-traces:
    @echo "Check Grafana Tempo for traces with:"
    @echo "  { resource.service.namespace = \"tracing-demo\" }"

# === Argo Rollouts Commands ===

# Watch frontend rollout progress
rollout-watch:
    @if ! command -v kubectl-argo-rollouts &> /dev/null; then \
        echo "ERROR: kubectl argo rollouts plugin not installed"; \
        echo "Install with: curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64 && sudo install -m 755 kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts"; \
        exit 1; \
    fi
    kubectl argo rollouts get rollout tracing-demo-frontend -n {{NAMESPACE}} --watch

# Check rollout status
rollout-status:
    kubectl argo rollouts status tracing-demo-frontend -n {{NAMESPACE}}

# Describe rollout
rollout-info:
    kubectl argo rollouts get rollout tracing-demo-frontend -n {{NAMESPACE}}

# Promote canary to 100% (skip waiting)
rollout-promote:
    kubectl argo rollouts promote tracing-demo-frontend -n {{NAMESPACE}}

# Abort current rollout
rollout-abort:
    kubectl argo rollouts abort tracing-demo-frontend -n {{NAMESPACE}}

# View rollout history
rollout-history:
    kubectl argo rollouts history tracing-demo-frontend -n {{NAMESPACE}}

# === Automated Demo Scripts ===

# Run full automated canary rollout demo
demo-canary:
    @./demo-canary-rollout.sh

# Run abort/rollback demo
demo-abort:
    @./demo-abort-rollout.sh

# Reset rollout to clean state
demo-reset:
    @./demo-reset.sh

# Interactive demo menu
demo-menu:
    @./demo-menu.sh

# Start demo (requires manual rollout trigger in another terminal)
rollout-demo:
    @echo "Starting Argo Rollouts demo..."
    @echo ""
    ./rollout-demo.sh