Passa al contenuto principale

decision-engine

Cosa fa

decision-engine calcola segnali operativi (spot-finder), gestisce job asincroni e funzioni live su ticker filtrati.

Ruoli e responsabilita

  • calcolo segnali per singolo ticker e per pipeline (pipeId);
  • gestione snapshot risultati e stato job;
  • integrazione con cachemanager (candles), tickerScanner (ticker utente), market-data-service (live subscriptions);
  • integrazione con datahub per settings e log persistenti.

Porta esposta

  • Porta interna servizio: 3018
  • Esposizione via Traefik: https://api.trading.expovin.it/decision-engine/*

Architettura grafica

Scheduler

Trigger job interni /internal/spot-finder/*

Client/Microservizi

Richieste API /decision-engine/spot-finder/*

HTTP + x-internal-token
decision-engine

Analisi spot-finder, job async, live mode

  • calcolo segnali multi-timeframe
  • snapshot job/live su Redis
  • orchestrazione ticker per pipe utente
datahub

Settings + log persistenti

cachemanager

Candles storiche L3/L2/L1

tickerScanner

Ticker filtrati per user/pipe

read settings da datahubwrite log su datahub (/logs)invocabile da scheduler

Il diagramma evidenzia che:

  • decision-engine legge configurazioni da datahub (via DATAHUB_URL/DBMANAGER_URL);
  • i log applicativi vengono scritti su datahub (/logs) tramite logger shared;
  • lo scheduler puo invocare endpoint interni /internal/spot-finder/* con token interno;
  • i risultati runtime vengono salvati in Redis (snapshot/job state).

Configurazione (docker-compose.paper.yml)

decision-engine:
image: expovin/decision-engine:${DECISIONENGINE_VERSION}
restart: unless-stopped
profiles: ["decision-engine"]
environment:
- DBMANAGER_URL=${DBMANAGER_URL}
- CACHEMANAGER_URL=${CACHEMANAGER_URL}
- MARKETDATASERVICE_URL=${MARKETDATASERVICE_URL}
- REDIS_URL=${REDIS_URL}
- INTERNAL_JWT_PUBLIC_KEY=${INTERNAL_JWT_PUBLIC_KEY}
- ENV=${ENV}
- TZ=${TIMEZONE}
depends_on:
dbmanager:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3018/status/health"]
labels:
- "traefik.enable=true"
- "traefik.http.routers.decision-engine.rule=Host(`api.trading.expovin.it`) && PathPrefix(`/decision-engine`)"
- "traefik.http.services.decision-engine.loadbalancer.server.port=3018"
- "traefik.http.routers.decision-engine.middlewares=decision-engine-stripprefix,cors-default@docker,auth-forward@docker"

Variabili d'ambiente

Infrastruttura

Variabili obbligatorie gestite dalla classe principale del modulo (comuni a tutti i microservizi).

VariabileDefaultDescrizione
DATAHUB_URLhttp://datahub:3000URL del servizio datahub (preferito). Ancora accettato DBMANAGER_URL come alias per compatibilita retroattiva.
DBMANAGER_URLhttp://datahub:3000Alias legacy di DATAHUB_URL, letto come fallback.
REDIS_URLURI Redis (es. redis://redis:6379). Obbligatorio per il bus eventi, i canali di stato e la persistenza degli snapshot job.
LOG_LEVELinfoLivello di log: trace, debug, info, warning, error.
ENVDEVAmbiente di esecuzione (local, paper, prod). Usato come prefisso nei canali Redis e nel nome degli eventi.
TZTimezone di sistema del container (es. America/New_York).
PORT3018Porta su cui il server HTTP si mette in ascolto.
CORS_ORIGINhttp://localhost:5173Origin o lista di origin (CSV) consentite dal middleware CORS.
INTERNAL_JWT_PUBLIC_KEYChiave pubblica RSA/EC per validare i token service-to-service (x-internal-token). Obbligatoria per gli endpoint interni /internal/spot-finder/*.

URL microservizi dipendenti

Variabili per configurare i URL dei servizi chiamati dal decision-engine. Non e necessario impostarle se si usano i default interni Docker Compose.

VariabileDefaultDescrizione
CACHEMANAGER_URLhttp://cachemanager:3006URL del cachemanager, usato per il fetch dei candles storici usati dal calcolo segnali.
AUTHSERVICE_URLhttp://authService:3015URL dell'authservice, usato per risolvere l'utente da token/API key nelle route protette.
TICKERSCANNER_URLhttp://tickerscanner:3013URL del tickerscanner, usato per recuperare la lista di ticker dell'utente nelle pipeline.
MARKETDATASERVICE_URLhttp://market-data-service:3020URL del market-data-service, usato per le sottoscrizioni live ai dati di mercato.
DECISIONENGINE_URLhttp://decision-engine:3018URL self-referenziale del decision-engine, usato per alcune chiamate interne.
ALERTINGSERVICE_URLhttp://alertingservice:3008URL dell'alertingservice, usato per l'invio di alert operativi.

Timeout chiamate esterne

Le seguenti variabili controllano i timeout verso i servizi esterni. Non e necessario aggiungerle al docker-compose se si accettano i valori di default.

VariabileDefaultDescrizione
CACHEMANAGER_TIMEOUT_MS60000Timeout in ms per le chiamate al cachemanager (fetch candles). Valore alto perche il payload puo essere voluminoso.
TICKERSCANNER_TIMEOUT_MS20000Timeout in ms per le chiamate al tickerscanner (fetch ticker utente).

Modalita live

VariabileDefaultDescrizione
LIVE_RECALC_INTERVAL_MS60000Intervallo minimo in ms tra due ricalcoli successivi dello stesso ticker in modalita live. Evita ricalcoli troppo frequenti a parita di tick ricevuti.

Pagine dedicate