Automatically adjusting the pool's capacity
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 );
Copy