Save all data available from the ws stream.
This commit is contained in:
+28
-9
@@ -101,22 +101,26 @@ func (ing *Ingestor) connectAndConsume(ctx context.Context) error {
|
||||
|
||||
func (ing *Ingestor) handleMessage(data []byte) {
|
||||
var msg BybitWSMessage
|
||||
|
||||
if err := json.Unmarshal(data, &msg); err != nil {
|
||||
// Could be a subscription confirmation or ping/pong — ignore
|
||||
// subscription confirmations, pings, etc.
|
||||
return
|
||||
}
|
||||
|
||||
// Only process trade data messages
|
||||
if msg.Data == nil || len(msg.Data) == 0 {
|
||||
if len(msg.Data) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
recvTS := time.Now().UnixMilli()
|
||||
|
||||
for _, raw := range msg.Data {
|
||||
|
||||
price, err := strconv.ParseFloat(raw.P, 64)
|
||||
if err != nil {
|
||||
log.Printf("[ingestor] bad price %q: %v", raw.P, err)
|
||||
continue
|
||||
}
|
||||
|
||||
volume, err := strconv.ParseFloat(raw.V, 64)
|
||||
if err != nil {
|
||||
log.Printf("[ingestor] bad volume %q: %v", raw.V, err)
|
||||
@@ -124,16 +128,31 @@ func (ing *Ingestor) handleMessage(data []byte) {
|
||||
}
|
||||
|
||||
tick := Tick{
|
||||
Timestamp: raw.T,
|
||||
Price: price,
|
||||
Volume: volume,
|
||||
Side: raw.SD,
|
||||
// IDs
|
||||
TradeID: raw.I,
|
||||
Seq: raw.Seq,
|
||||
|
||||
// Timing
|
||||
TradeTS: raw.T,
|
||||
MessageTS: msg.TS,
|
||||
RecvTS: recvTS,
|
||||
|
||||
// Trade data
|
||||
Symbol: raw.S,
|
||||
Side: raw.SD,
|
||||
Price: price,
|
||||
Volume: volume,
|
||||
|
||||
// Metadata
|
||||
TickDir: raw.L,
|
||||
BlockTrade: raw.BT,
|
||||
RPI: raw.RPI,
|
||||
}
|
||||
|
||||
// Feed to aggregator (5s feature bucketing) inline
|
||||
// Feed feature generator
|
||||
ing.aggregator.ProcessTick(tick)
|
||||
|
||||
// Send to writer channel (non-blocking drop if channel full)
|
||||
// Feed writer
|
||||
select {
|
||||
case ing.tickCh <- tick:
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user