JavaScript HSM API Dinamo
    Preparing search index...
    import { hsm } from "@dinamonetworks/hsm-dinamo";

    const { PoolAutoscaler } = hsm;

    const options = {
    host: "127.0.0.1",
    authUsernamePassword: {
    username: "master",
    password: "12345678",
    },
    };

    async function main() {
    // Abre um handle pooled (o pool é criado automaticamente na primeira chamada)
    const handle = await hsm.connectPooled(options);

    // Obtém o pool subjacente para criar o autoscaler
    // O autoscaler é criado via createAutoscaler() no pool interno
    // Neste exemplo, demonstramos o PoolAutoscaler standalone:

    let currentTarget = 3;
    const autoscaler = new PoolAutoscaler({
    initialTarget: 3,
    max: 20,
    enabled: true,
    increaseFactor: 1.5,
    minGain: 0.10,
    setTarget: (target) => {
    currentTarget = target;
    console.log(`Target alterado para ${target}`);
    },
    safety: {
    maxCpuRatio: 0.85,
    maxP95Ms: 500,
    maxErrorRate: 0.001,
    },
    });

    console.log(`Target inicial: ${autoscaler.getTarget()}`);

    // Simula uma janela de observação
    const before = {
    throughput: 100,
    errorRate: 0.0001,
    p95Ms: 50,
    p99Ms: 100,
    queueFull: 0,
    queueTimeout: 0,
    cpuRatio: 0.5,
    rssRatio: 0.4,
    hsmHealthy: true,
    workersHealthy: true,
    observabilityHealthy: true,
    };

    // Propõe aumento de capacidade
    const proposal = autoscaler.proposeIncrease();
    if (proposal) {
    console.log(`Proposta: ${proposal.previousTarget}${proposal.proposedTarget}`);
    }

    // Após a janela, avalia o resultado
    const after = {
    ...before,
    throughput: 130, // 30% de ganho
    };

    const decision = autoscaler.evaluate(before, after);
    console.log(`Decisão: ${decision.decision} (gain: ${(decision.gain * 100).toFixed(1)}%)`);
    console.log(`Motivo: ${decision.reason}`);
    console.log(`Target final: ${autoscaler.getTarget()}`);

    // Limpeza
    await handle.disconnect();
    await hsm.shutdownAllSessionPools();
    }

    main().catch(console.error);