Operating PATH in Production

Helm Deployment

PATH provides Helm charts for production Kubernetes deployment. The stack includes three components:

ChartPurpose
PATHThe gateway itself — request routing, QoS, relay forwarding
GUARDRate limiting and authentication layer
WATCHMonitoring and alerting sidecar

Quick Deploy

bash
helm repo add path https://charts.path.grove.city
helm install path path/path -f values.yaml

See the Helm values reference for all configurable options.

Health Checks

Endpoint Reference

EndpointPurposeExpected Response
GET /healthOverall gateway health200 OK
GET /ready/<service>Service-specific readiness{"ready":true,"endpoint_count":49,"has_session":true}
GET /ready/<service>?detailed=trueDetailed endpoint infoIncludes reputation scores, latency, archival status
GET /readyAll services readinessAggregated status

Active Health Checks

PATH supports external health check rules from pocket-network-resources:

yaml
gateway_config:
  active_health_checks:
    enabled: true
    external:
      url: "https://raw.githubusercontent.com/pokt-network/pocket-network-resources/main/pocket-health-checks.yaml"
      refresh_interval: 5m

This loads per-chain sync allowances and health check parameters managed by the Pocket community.

Monitoring

Prometheus Metrics

PATH exposes metrics on port 9090 (configurable). Key metric families:

MetricTypeDescription
path_requests_totalCounterTotal requests by service, status
path_request_duration_secondsHistogramRequest latency distribution
path_relays_totalCounterRelays forwarded to suppliers
path_relay_duration_secondsHistogramRelay latency
path_reputation_scoreGaugeCurrent endpoint reputation scores
path_endpoints_availableGaugeAvailable endpoints per service

Grafana

The development stack includes pre-configured Grafana dashboards in local/observability/. For production, import these as a starting point and customize for your deployment.

Scaling

Horizontal Scaling with Redis

For multi-instance deployments, use Redis as the reputation storage backend:

yaml
redis_config:
  address: "redis:6379"

gateway_config:
  reputation_config:
    storage_type: "redis"

This ensures all PATH instances share endpoint reputation data and circuit breaker state.

Concurrency Tuning

yaml
concurrency_config:
  max_parallel_endpoints: 1      # Increase for redundant queries
  max_concurrent_relays: 5500    # Tune based on available memory/CPU
  max_batch_payloads: 5500       # Match or lower than max_concurrent_relays

Ports Reference

PortServiceProtocol
3069Gateway HTTPHTTP/WebSocket
9090Prometheus metricsHTTP

Admin Operations

Clear Circuit Breaker

When a domain is stuck in circuit breaker state after a transient issue resolves:

bash
# Port-forward to each pod
kubectl port-forward <pod> 13069:3069 &
curl -X POST http://localhost:13069/admin/circuit-breaker/clear/{serviceId}
Warning

Must be called on each pod individually. Rolling restarts don’t clear circuit breaker state because refreshFromRedis repopulates from Redis.