async function checkEndpoint(url) const start = Date.now(); try const res = await fetch(url, timeout: 2000 ); const latency = Date.now() - start; if (res.status !== 200) throw new Error("HTTP Error"); return healthy: true, latency ; catch (err) return healthy: false, error: err.message ;
for (const target of targets) const result = await checkEndpoint(target); if (!result.healthy) console.error(`[FAIL] $target - $result.error`); state.consecutive_failures++; if (state.consecutive_failures >= 3) console.log("Initiating recovery procedure..."); await executeRecovery(target); state.consecutive_failures = 0; else console.log(`[PASS] $target - $result.latencyms`); state.consecutive_failures = Math.max(0, state.consecutive_failures - 1);
// Example Fly V3 Init const config = endpoint: "https://api.flyv3.example", retries: 3, timeout: 5000 ; let session = null; The heart of the script. Fly V3 is reactive; it waits for triggers (time-based, HTTP, or socket events). The handler processes these triggers.
Fly V3 scripts support pre- and post-execution hooks. These are used for logging, rate limiting, or modifying payloads before they reach the main handler. 4. The Termination Routine Graceful shutdown is critical. This block ensures that all open file handles are closed and pending tasks are flushed before the script exits. Writing Your First Fly V3 Script: A Step-by-Step Guide Let’s assume you want to build a monitoring script that checks the health of three servers and restarts a service if latency exceeds a threshold. Step 1: Environment Setup Ensure the Fly V3 CLI is installed on your machine:
// Good: Parallel with concurrency limit await Fly.parallelMap(list, async (item) => return await process(item); , concurrency: 10 ); The Fly V3 engine retains a shared cache across script invocations. Use this to store API tokens or rate-limit counters.
async function resilientCall(fn, retries = 5) for (let i = 0; i < retries; i++) try return await fn(); catch (err) if (i === retries - 1) throw err; const delay = Math.pow(2, i) * 1000; await Fly.sleep(delay);
async function checkEndpoint(url) const start = Date.now(); try const res = await fetch(url, timeout: 2000 ); const latency = Date.now() - start; if (res.status !== 200) throw new Error("HTTP Error"); return healthy: true, latency ; catch (err) return healthy: false, error: err.message ;
for (const target of targets) const result = await checkEndpoint(target); if (!result.healthy) console.error(`[FAIL] $target - $result.error`); state.consecutive_failures++; if (state.consecutive_failures >= 3) console.log("Initiating recovery procedure..."); await executeRecovery(target); state.consecutive_failures = 0; else console.log(`[PASS] $target - $result.latencyms`); state.consecutive_failures = Math.max(0, state.consecutive_failures - 1); fly v3 script
// Example Fly V3 Init const config = endpoint: "https://api.flyv3.example", retries: 3, timeout: 5000 ; let session = null; The heart of the script. Fly V3 is reactive; it waits for triggers (time-based, HTTP, or socket events). The handler processes these triggers. async function checkEndpoint(url) const start = Date
Fly V3 scripts support pre- and post-execution hooks. These are used for logging, rate limiting, or modifying payloads before they reach the main handler. 4. The Termination Routine Graceful shutdown is critical. This block ensures that all open file handles are closed and pending tasks are flushed before the script exits. Writing Your First Fly V3 Script: A Step-by-Step Guide Let’s assume you want to build a monitoring script that checks the health of three servers and restarts a service if latency exceeds a threshold. Step 1: Environment Setup Ensure the Fly V3 CLI is installed on your machine: Fly V3 scripts support pre- and post-execution hooks
// Good: Parallel with concurrency limit await Fly.parallelMap(list, async (item) => return await process(item); , concurrency: 10 ); The Fly V3 engine retains a shared cache across script invocations. Use this to store API tokens or rate-limit counters.
async function resilientCall(fn, retries = 5) for (let i = 0; i < retries; i++) try return await fn(); catch (err) if (i === retries - 1) throw err; const delay = Math.pow(2, i) * 1000; await Fly.sleep(delay);