Zum Hauptinhalt springen

Marktpreis-Refresh

Der Marktpreis-Refresh ist ein separater Job und wird per Secret-geschütztem Endpoint gestartet.

Der Sync fragt alle vom Provider verfügbaren Märkte ab und speichert pro Item sowohl den Durchschnittswert als auch die einzelnen Markt-Snapshots.

Der zentrale Preisjob arbeitet pro bekanntem SkinItem beziehungsweise pro eindeutigem CS2-Item-Namen, nicht pro UserInventory-Zeile eines Nutzers. Er nimmt die unterschiedlichen Namen aus dem Inventarbestand, queued sie dedupliziert und aktualisiert danach alle passenden Inventory-Zeilen mit dem neuen estimatedValue.

Normale Steam-Inventar-Syncs aktualisieren Preise nicht für bereits bekannte Items mit bestehendem currentPrice. Sie übernehmen nur vorhandene Preise auf die Inventory-Zeilen und queued asynchron Preis-Refreshes für Namen, für die die Plattform noch keinen Preis kennt (currentPrice <= 0). Dadurch können neue Items nach einem Login oder späteren Inventar-Sync zeitnah einen Preis bekommen, während die reguläre Aktualisierung bekannter Items dem separaten Bulk-Preisjob überlassen bleibt.

Beim Listing-Erstellen läuft ebenfalls ein frischer Inventar-Sync, aber auch dieser queued nur fehlende Preise und startet kein Inspect-Enrichment. Der eigentliche Listing-Preis-Refresh für das angebotene Item bleibt asynchron und nicht blockierend.

Retention

Abgeschlossene oder fehlgeschlagene Market-Price-Refresh-Jobs werden automatisch bereinigt, damit die Historie in MarketPriceRefreshJob und MarketPriceRefreshItem nicht unbegrenzt wächst.

Standardmäßig bleiben die letzten 7 Tage erhalten, und zusätzlich werden immer mindestens die letzten 3 Jobs behalten. Das lässt sich über MARKET_PRICE_JOB_RETENTION_DAYS und MARKET_PRICE_JOB_RETENTION_MIN_JOBS anpassen.

Runbook

Preisjob triggern:

curl -X POST http://localhost:3001/api/market-prices/refresh \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"

Preisjob forciert triggern, ignoriert TTL / No-Sales-Skip:

curl -X POST "http://localhost:3001/api/market-prices/refresh?force=1" \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"

Laufstatus:

curl -X GET http://localhost:3001/api/market-prices/status \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"

Provider-Debug:

curl -X GET http://localhost:3001/api/market-prices/provider-debug \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"

Queue-/Job-Debug:

curl -X GET http://localhost:3001/api/market-prices/job-debug \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"

Worauf achten

  • status.running = true bedeutet: Job läuft.
  • pendingItems sollte sinken.
  • updatedItems sollte steigen.
  • lastError sollte möglichst null sein.
  • usage.requestCount zeigt den API-Verbrauch.