Claude-code-plugins flexport-observability
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/flexport-pack/skills/flexport-observability" ~/.claude/skills/jeremylongshore-claude-code-plugins-flexport-observability && rm -rf "$T"
manifest:
plugins/saas-packs/flexport-pack/skills/flexport-observability/SKILL.mdsource content
Flexport Observability
Overview
Full observability stack for Flexport integrations: Prometheus metrics for API health, pino structured logging for debugging, OpenTelemetry tracing for latency analysis, and Grafana dashboards for monitoring.
Instructions
Step 1: Prometheus Metrics
import { Counter, Histogram, Gauge, register } from 'prom-client'; const flexportRequests = new Counter({ name: 'flexport_api_requests_total', help: 'Total Flexport API requests', labelNames: ['method', 'endpoint', 'status'], }); const flexportLatency = new Histogram({ name: 'flexport_api_latency_seconds', help: 'Flexport API response time', labelNames: ['endpoint'], buckets: [0.1, 0.25, 0.5, 1, 2.5, 5, 10], }); const flexportRateLimit = new Gauge({ name: 'flexport_rate_limit_remaining', help: 'Remaining API calls in current window', }); // Instrumented fetch wrapper async function instrumentedFlexport(path: string, options: RequestInit = {}) { const endpoint = path.split('?')[0]; const timer = flexportLatency.startTimer({ endpoint }); try { const res = await fetch(`https://api.flexport.com${path}`, { ...options, headers: { ...headers, ...options.headers } }); flexportRequests.inc({ method: options.method || 'GET', endpoint, status: res.status.toString() }); const remaining = res.headers.get('X-RateLimit-Remaining'); if (remaining) flexportRateLimit.set(parseInt(remaining)); timer(); return res; } catch (err) { flexportRequests.inc({ method: options.method || 'GET', endpoint, status: 'error' }); timer(); throw err; } }
Step 2: Structured Logging
import pino from 'pino'; const logger = pino({ name: 'flexport-integration', level: process.env.LOG_LEVEL || 'info', redact: ['headers.Authorization', 'apiKey'], }); // Log every API call with context async function loggedFlexport(path: string, options: RequestInit = {}) { const start = Date.now(); const res = await instrumentedFlexport(path, options); logger.info({ service: 'flexport', path, method: options.method || 'GET', status: res.status, latencyMs: Date.now() - start, rateRemaining: res.headers.get('X-RateLimit-Remaining'), }, 'Flexport API call'); return res; }
Step 3: Alert Rules
# prometheus-alerts.yml groups: - name: flexport rules: - alert: FlexportAPIErrors expr: rate(flexport_api_requests_total{status=~"5.."}[5m]) > 0.1 for: 5m labels: { severity: critical } annotations: summary: "Flexport API error rate elevated" - alert: FlexportRateLimitLow expr: flexport_rate_limit_remaining < 10 for: 1m labels: { severity: warning } annotations: summary: "Flexport rate limit nearly exhausted" - alert: FlexportHighLatency expr: histogram_quantile(0.99, flexport_api_latency_seconds_bucket) > 5 for: 5m labels: { severity: warning }
Grafana Dashboard Panels
| Panel | Query | Purpose |
|---|---|---|
| Request rate | | Throughput |
| Error rate | `rate(flexport_api_requests_total{status=~"4.. | 5.."}[5m])` |
| p99 latency | | Performance |
| Rate limit headroom | | Quota |
Resources
Next Steps
For incident response, see
flexport-incident-runbook.