Performance Baseline · April 14, 2026

Before Marketplace-Aware

Production APM snapshot — last 24h via Datadog + parser docker logs

CSGO Inventory Query (24h)

Avg 349ms · Peak 656ms · Off-peak 158ms

Endpoint Overview

GET /api/v2/inventory/data · 28,350 requests · 0% error rate

250ms
Avg Latency
17s
Max Latency
28.4k
Requests/24h

Latency by Game

CSGO dominates — largest index, HaloSkins merged

CSGO (730)
349ms
TF2 (440)
135ms
RUST (252490)
95ms
Steam (753)
72ms
DOTA2 (570)
4ms

CSGO 730 — Peak vs Off-Peak

Peak: 15:00–21:00 UTC (5–11 PM CET) · Off-peak: 02:00–08:00 UTC

Peak Hours

656ms

3,926 requests · 15:00–21:00 UTC

Off-Peak Hours

158ms

3,641 requests · 02:00–08:00 UTC

4.2x latency increase during peak — EU evening traffic

Hourly Heatmap

Worst: 17:00 UTC (851ms) and 19:00 UTC (826ms)

13:00
443ms
14:00
408ms
15:00
362ms
16:00
396ms
17:00
851ms
18:00
524ms
19:00
826ms
20:00
342ms
21:00
354ms
22:00
301ms
05:00
57ms
06:00
49ms

CSGO 730 — By Query Type

Group Browse

290ms

Default listing · 3,754 req

Unstacking

371ms

Single group · 10,544 req

With Filters

463ms

type/rarity/etc · 515 req

Peak vs Off-Peak by Type

Query TypeOff-PeakPeakMultiplier
Group Browse137ms642ms4.7x
Unstacking168ms660ms3.9x

Key Observation

Both query types degrade equally under load. The bottleneck is the monolithic inventory_internal_730 index — all queries compete for the same shard resources during peak. Marketplace-aware split targets this directly.


OpenSearch Span Breakdown

CSGO _internal_ indices are 2–4x slower than non-CSGO

Index PatternAvg LatencyCalls/24hPurpose
inventory_internal_*129ms39,504CSGO item replacement + count
group_internal_*76ms8,149CSGO group search
inventory_* (non-CSGO)40ms16,827TF2/RUST/Steam items
stickers_internal33ms3,374Sticker search
group_* (non-CSGO)19ms2,728TF2/RUST/Steam groups

Post-deploy: inventory_internal_730 splits into inventory_730 + inventory_730_haloskins


Parser Indexing Cycles

Source: docker logs · 2 PM2 workers (4 PIDs), every 10 min for 730

GameItemsGroupsFetchParseBulk WriteTotal
CSGO A~328k~15k14s14s~95s~135s
CSGO B~353k~18k15s14s~103s~145s
RUST83k2.2k0.9s1.4s~13s~17s
TF2107k5k1.3s2.0s~21s~25s
Steam399k0.9k1.3s6.8s~72s~81s

CSGO 730 Bulk Write Variance

Range across 20+ cycles · ~328k items per write (Worker A)

Best
69s
Avg
95s
Worst
135s

Throughput: ~328k docs in ~95s = ~3,450 docs/s

Worst times at :27/:37 when RUST/TF2 overlap with 730 bulk write — shard contention


Known Issue in Current Prod

mustNot camelCase silently ignored by OpenSearch

queryCountItemsOnGroup sends "mustNot" instead of "must_not". Reserved-asset filtering is not applied to item counts.

Fixed in marketplace-aware branch (commit 1ca70ac8)


What to Compare Post-Deploy

MetricCurrent BaselineTarget
CSGO 730 avg latency349msSame or lower
CSGO peak latency656msLower (split indices)
OS inventory_internal avg129msReplaced by 2 smaller indices
OS group_internal avg76msReplaced by 2 smaller indices
Non-CSGO latency40–95msUnchanged
Parser 730 cycle time~135–145sOwn lane only; HaloSkins separate
Error rate0%Stay at 0%

Generated April 14, 2026 · Datadog APM + docker logs · tradeit.gg