mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-20 06:11:27 -07:00
105 lines
3.0 KiB
Markdown
105 lines
3.0 KiB
Markdown
# Integration Patterns
|
|
|
|
## Enable Argo + Tiered Cache
|
|
|
|
```typescript
|
|
async function enableOptimalPerformance(client: Cloudflare, zoneId: string) {
|
|
await Promise.all([
|
|
client.argo.smartRouting.edit({ zone_id: zoneId, value: 'on' }),
|
|
client.argo.tieredCaching.edit({ zone_id: zoneId, value: 'on' }),
|
|
]);
|
|
}
|
|
```
|
|
|
|
**Flow:** Visitor → Edge (Lower-Tier) → [Cache Miss] → Upper-Tier → [Cache Miss + Argo] → Origin
|
|
|
|
**Impact:** Argo ~30% latency reduction + Tiered Cache 50-80% origin offload
|
|
|
|
## Usage Analytics (GraphQL)
|
|
|
|
```graphql
|
|
query ArgoAnalytics($zoneTag: string!) {
|
|
viewer {
|
|
zones(filter: { zoneTag: $zoneTag }) {
|
|
httpRequestsAdaptiveGroups(limit: 1000) {
|
|
sum { argoBytes, bytes }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Billing:** ~$0.10/GB. DDoS-mitigated and WAF-blocked traffic NOT charged.
|
|
|
|
## Spectrum TCP Integration
|
|
|
|
Enable Argo for non-HTTP traffic (databases, game servers, IoT):
|
|
|
|
```typescript
|
|
// Update existing app
|
|
await client.spectrum.apps.update(appId, { zone_id: zoneId, argo_smart_routing: true });
|
|
|
|
// Create new app with Argo
|
|
await client.spectrum.apps.create({
|
|
zone_id: zoneId,
|
|
dns: { type: 'CNAME', name: 'tcp.example.com' },
|
|
origin_direct: ['tcp://origin.example.com:3306'],
|
|
protocol: 'tcp/3306',
|
|
argo_smart_routing: true,
|
|
});
|
|
```
|
|
|
|
**Use cases:** MySQL/PostgreSQL (3306/5432), game servers, MQTT (1883), SSH (22)
|
|
|
|
## Pre-Flight Validation
|
|
|
|
```typescript
|
|
async function validateArgoEligibility(client: Cloudflare, zoneId: string) {
|
|
const status = await client.argo.smartRouting.get({ zone_id: zoneId });
|
|
const zone = await client.zones.get({ zone_id: zoneId });
|
|
|
|
const issues: string[] = [];
|
|
if (!status.editable) issues.push('Zone not editable');
|
|
if (['free', 'pro'].includes(zone.plan.legacy_id)) issues.push('Requires Business+ plan');
|
|
if (zone.status !== 'active') issues.push('Zone not active');
|
|
|
|
return { canEnable: issues.length === 0, issues };
|
|
}
|
|
```
|
|
|
|
## Post-Enable Verification
|
|
|
|
```typescript
|
|
async function verifyArgoEnabled(client: Cloudflare, zoneId: string): Promise<boolean> {
|
|
await new Promise(r => setTimeout(r, 2000)); // Wait for propagation
|
|
const status = await client.argo.smartRouting.get({ zone_id: zoneId });
|
|
return status.value === 'on';
|
|
}
|
|
```
|
|
|
|
## Full Setup Pattern
|
|
|
|
```typescript
|
|
async function setupArgo(client: Cloudflare, zoneId: string) {
|
|
// 1. Validate
|
|
const { canEnable, issues } = await validateArgoEligibility(client, zoneId);
|
|
if (!canEnable) throw new Error(issues.join(', '));
|
|
|
|
// 2. Enable both features
|
|
await Promise.all([
|
|
client.argo.smartRouting.edit({ zone_id: zoneId, value: 'on' }),
|
|
client.argo.tieredCaching.edit({ zone_id: zoneId, value: 'on' }),
|
|
]);
|
|
|
|
// 3. Verify
|
|
const [argo, cache] = await Promise.all([
|
|
client.argo.smartRouting.get({ zone_id: zoneId }),
|
|
client.argo.tieredCaching.get({ zone_id: zoneId }),
|
|
]);
|
|
|
|
return { argo: argo.value === 'on', tieredCache: cache.value === 'on' };
|
|
}
|
|
```
|
|
|
|
**When to combine:** High-traffic sites (>1TB/mo), global users, cacheable content.
|