Passa al contenuto principale

loadSettings.js

Utilizzo nei microservizi

alertingService, cacheManager, decision-engine, ibkr-bridge, ibkr-keepalive, redisWsBridge, scheduler, tickerScanner.

Funzioni e utilizzo

FunzioneParametri principaliMicroservizi che la usano
initializeSettings(dbManagerUrl, options)dbManagerUrl: base URL [datahub](./ms-datahub)/[DBManager (legacy)](./ms-datahub); options: timeout/cachealertingService, cacheManager, decision-engine, ibkr-bridge, ibkr-keepalive, redisWsBridge, scheduler, tickerScanner
getSetting(key)key: nome settingalertingService, cacheManager, decision-engine, ibkr-bridge, ibkr-keepalive, redisWsBridge, scheduler, tickerScanner
getAllSettings()-alertingService, cacheManager, decision-engine, ibkr-bridge, ibkr-keepalive, redisWsBridge, scheduler, tickerScanner
reloadSettings(dbManagerUrl, options)dbManagerUrl + opzioni fetchalertingService, cacheManager, decision-engine, ibkr-bridge, ibkr-keepalive, redisWsBridge, scheduler, tickerScanner
setSetting(key, value)key/valuealertingService, cacheManager, decision-engine, ibkr-bridge, ibkr-keepalive, redisWsBridge, scheduler, tickerScanner

Dettaglio funzioni

initializeSettings(dbManagerUrl, options)

  • Cosa fa: Carica impostazioni iniziali dal backend dati e le mette in cache locale.
  • Parametri: dbManagerUrl: base URL datahub/[DBManager (legacy)](./ms-datahub); options: timeout/cache
  • Nota: ritorna null se il caricamento fallisce dopo i retry.

getSetting(key)

  • Cosa fa: Legge un singolo valore di configurazione dalla cache in memoria.
  • Parametri: key: nome setting
  • Nota: lancia errore se la cache non e ancora inizializzata o e vuota.

getAllSettings()

  • Cosa fa: Ritorna tutto il blocco settings corrente.
  • Parametri: -
  • Nota: lancia errore se la cache non e ancora inizializzata o e vuota.

reloadSettings(dbManagerUrl, options)

  • Cosa fa: Forza refresh completo impostazioni da storage centralizzato.
  • Parametri: dbManagerUrl + opzioni fetch

setSetting(key, value)

  • Cosa fa: Aggiorna un setting in memoria (runtime, non necessariamente persistente).
  • Parametri: key/value

Esempi di utilizzo

1) Bootstrap servizio in avvio

const {
initializeSettings,
getSetting,
} = require('../shared/loadSettings');

const datahubUrl = process.env.DATAHUB_URL || process.env.DBMANAGER_URL || 'http://datahub:3000';

async function init() {
const ok = await initializeSettings(datahubUrl, {
retries: 5,
baseDelayMs: 1000,
timeoutMs: 5000,
});

if (!ok) {
throw new Error('Impossibile inizializzare settings');
}

const delayBetweenMessages = Number(getSetting('PROCESS_DELAY_BETWEEN_MESSAGES') || 500);
return { delayBetweenMessages };
}

2) Lettura di un singolo setting in funzione

const { getSetting } = require('../shared/loadSettings');

function getBodyLimit() {
return getSetting('BODY_LIMIT') || '20mb';
}

3) Override runtime (solo cache locale)

const { setSetting, getAllSettings } = require('../shared/loadSettings');

function updateRuntimeSetting(key, value) {
const next = setSetting(key, value); // non persiste su DB
return { ok: true, data: next };
}

function readRuntimeSettings() {
return getAllSettings();
}

4) Endpoint reload settings senza restart

const { reloadSettings } = require('../shared/loadSettings');

app.post('/settings/reload', async (_req, res) => {
const datahubUrl = process.env.DATAHUB_URL || process.env.DBMANAGER_URL || 'http://datahub:3000';
const data = await reloadSettings(datahubUrl, { timeoutMs: 5000 });

if (!data) {
return res.status(500).json({ ok: false, error: 'reloadSettings failed' });
}

return res.json({ ok: true, data });
});

5) Gestione sicura se cache non pronta

const { getSetting } = require('../shared/loadSettings');

function safeGetSetting(key, fallback = null) {
try {
const val = getSetting(key);
return val ?? fallback;
} catch {
return fallback;
}
}

Percorso

  • trading-system/shared/loadSettings.js