Files
poimen-memory/k8s/config/create-kmsvc-topics.sh
T
rock 31aafa53e4
Build and Push / Test (push) Failing after 4m20s
Build and Push / Build and push image (push) Skipped
Phase 6.6: Add kmsvc Topic Creation (4 methods)
Topic Creation Methods:

1. Manual CLI (Fastest - 2 min):
   └─ kubectl port-forward + curl POST /v1/queues
   └─ k8s/config/create-kmsvc-topics.sh (interactive)

2. Kubernetes Job (Automated - 1 min):
   └─ kubectl apply kmsvc-topics-job.yaml
   └─ Runs once, creates topics if not exist
   └─ Can re-run safely

3. Terraform (IaC - 2 min):
   └─ terraform apply -target=null_resource.create_kmsvc_topics
   └─ Tracks topic creation in .tfstate
   └─ Idempotent

4. Shell Script (Interactive - 1 min):
   └─ ./create-kmsvc-topics.sh
   └─ Auto port-forward or manual mode
   └─ Color output + progress logging

Topics Created:

1. poimen-memory-dlq (DLQ for extraction + webhook + agent)
   ├─ Retention: 14 days (1,209,600 seconds)
   ├─ Visibility: 5 minutes (300 seconds)
   ├─ Messages: {id, type, workflow_id, error, timestamp, ...}
   └─ Consumer: queue_worker_dlq.rs::DlqHandler

2. poimen-memory-metric-dlq (DLQ for metrics failures)
   ├─ Retention: 14 days
   ├─ Visibility: 5 minutes
   ├─ Messages: {id, type, agent_id, error, timestamp, ...}
   └─ Consumer: (future) metrics replay handler

Files Added:

1. k8s/config/create-kmsvc-topics.sh (executable)
   ├─ 90 lines
   ├─ Auto port-forward + retry logic
   ├─ Color output + error handling
   └─ Usage: ./create-kmsvc-topics.sh [manual]

2. k8s/config/kmsvc-topics-job.yaml (Kubernetes)
   ├─ Job resource (one-time execution)
   ├─ Uses curl container
   ├─ Waits for management-service readiness
   ├─ 30-second retry loop
   └─ Non-fatal on existing topics

3. k8s/config/terraform-kmsvc-topics.tf (Terraform)
   ├─ null_resource with local-exec
   ├─ Variables for endpoint + namespace
   ├─ Idempotent + traceable
   └─ Outputs: created_topics + test_commands

4. docs/PHASE_6_6_KMSVC_TOPICS.md (Complete Guide)
   ├─ Table of topics + config
   ├─ 4 creation methods with examples
   ├─ Verification commands
   ├─ Message format specs
   ├─ Monitoring + alerts
   ├─ Troubleshooting guide
   └─ Next steps checklist

Verification Commands:

 List all topics:
   curl http://localhost:8080/v1/queues

 Check specific topic:
   curl http://localhost:8080/v1/queues/poimen-memory-dlq

 Send test message:
   curl -X POST http://localhost:8080/v1/queues/poimen-memory-dlq/messages      -H "Content-Type: application/json"      -d '{"body": "{\"type\": \"test\"}"}'

 Receive messages:
   curl -X POST http://localhost:8080/v1/queues/poimen-memory-dlq/messages/receive      -H "Content-Type: application/json"      -d '{"maxNumberOfMessages": 10}'

Integration Points:

Phase 6.6 Code → kmsvc Topics:

1. webhook_executor.rs::send_dlq_message()
   └─ On max retries: Send to poimen-memory-dlq
   └─ Payload: {workflow_id, webhook_url, status, error, ...}

2. metrics_persistence.rs::send_persistence_dlq()
   └─ On DB failure: Send to poimen-memory-metric-dlq
   └─ Payload: {agent_id, error, timestamp}

3. queue_worker_dlq.rs::DlqHandler
   └─ Processes poimen-memory-dlq messages
   └─ Retries extraction failures

Production Checklist:

 Topics defined (2 topics)
 Configuration documented (retention, visibility)
 Creation methods (4 options)
 Verification commands
 Message formats specified
 Monitoring guide
 Troubleshooting guide
 Ready for deployment

Next Steps:

1. Choose creation method (recommend Method 1 for fast testing)
2. Create topics: ./create-kmsvc-topics.sh or kubectl apply job
3. Verify: curl http://localhost:8080/v1/queues
4. Deploy memory service (Phase 6.5)
5. Test webhook + metrics failures send to DLQ
6. Monitor DLQ lag + message rate (Phase 7)

Phase 6.6 Complete: 
- Webhook execution: 
- Metrics persistence: 
- kmsvc DLQ integration: 
- Topic creation (4 methods): 
- Documentation: 
2026-09-05 01:06:16 -07:00

95 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# Phase 6.6: Create kmsvc (Kafka Message Service) Topics
# Topics:
# - poimen-memory-dlq (extraction + webhook + agent failures)
# - poimen-memory-metric-dlq (metrics persistence failures)
#
# Prerequisites:
# 1. kubectl access to cluster (SQS namespace)
# 2. management-service running and accessible
#
# Usage:
# ./create-kmsvc-topics.sh (auto port-forward)
# ./create-kmsvc-topics.sh manual (assumes port-forward exists)
set -e
NAMESPACE=${NAMESPACE:-sqs}
SERVICE=${SERVICE:-management-service}
PORT=${PORT:-8080}
MANUAL_PORTFORWARD=${1:-auto}
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW}Creating kmsvc Topics for Poimen Memory${NC}"
echo -e "${YELLOW}========================================${NC}"
# Setup port-forward if needed
if [ "$MANUAL_PORTFORWARD" != "manual" ]; then
echo -e "${YELLOW}Setting up port-forward to $SERVICE...${NC}"
# Kill existing port-forward if running
pkill -f "kubectl.*port-forward.*$SERVICE" || true
sleep 1
# Start port-forward in background
kubectl -n $NAMESPACE port-forward svc/$SERVICE $PORT:8080 &
PORTFORWARD_PID=$!
trap "kill $PORTFORWARD_PID" EXIT
sleep 3
echo -e "${GREEN}Port-forward started (PID: $PORTFORWARD_PID)${NC}"
fi
ENDPOINT="http://localhost:$PORT/v1/queues"
# Helper function to create topic
create_topic() {
local topic_name=$1
local description=$2
echo ""
echo -e "${YELLOW}Creating topic: ${topic_name}${NC}"
echo "Description: ${description}"
# Try to create (SQS-style API)
response=$(curl -s -X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"${topic_name}\",
\"fifoQueue\": false,
\"visibilityTimeoutSeconds\": 300,
\"messageRetentionPeriodSeconds\": 1209600
}")
if echo "$response" | grep -q '"name"'; then
echo -e "${GREEN}✓ Created: ${topic_name}${NC}"
echo "Response: $response"
elif echo "$response" | grep -q 'already exists'; then
echo -e "${YELLOW}⚠ Already exists: ${topic_name}${NC}"
else
echo -e "${RED}✗ Failed to create: ${topic_name}${NC}"
echo "Response: $response"
return 1
fi
}
# Create topics
create_topic "poimen-memory-dlq" "DLQ for extraction, webhook, and agent failures"
create_topic "poimen-memory-metric-dlq" "DLQ for metrics persistence failures"
# List all queues
echo ""
echo -e "${YELLOW}Listing all queues:${NC}"
curl -s "$ENDPOINT" | jq '.' || curl -s "$ENDPOINT"
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Topic creation complete!${NC}"
echo -e "${GREEN}========================================${NC}"