浏览代码

Don't buffer before reading JSON. JSON draining looks far better.

Mathieu Lecarme 3 年之前
父节点
当前提交
1c88584d21
共有 1 个文件被更改,包括 7 次插入7 次删除
  1. 7 7
      pkg/acquisition/modules/loki/loki.go

+ 7 - 7
pkg/acquisition/modules/loki/loki.go

@@ -354,18 +354,18 @@ func (l *LokiSource) StreamingAcquisition(out chan types.Event, t *tomb.Tomb) er
 			}
 			}
 			defer c.Close()
 			defer c.Close()
 			var resp Tail
 			var resp Tail
+			_, reader, err := c.NextReader()
+			if err != nil {
+				return errors.Wrap(err, "OneShotAcquisition error while reading JSON websocket")
+			}
+			decoder := json.NewDecoder(reader)
 			for { // draining the websocket
 			for { // draining the websocket
 				if !t.Alive() { // someone want to close this loop
 				if !t.Alive() { // someone want to close this loop
 					return nil
 					return nil
 				}
 				}
-				t, msg, err := c.ReadMessage()
-				if len(msg) == 0 {
-					time.Sleep(100 * time.Millisecond)
-					continue
-				}
-				err = json.Unmarshal(msg, &resp)
+				err = decoder.Decode(&resp)
 				if err != nil {
 				if err != nil {
-					return errors.Wrap(err, "OneShotAcquisition error while reading JSON websocket")
+					return errors.Wrap(err, "OneShotAcquisition error while parsing JSON websocket")
 				}
 				}
 				l.logger.WithField("type", t).WithField("message", resp).Debug("Message receveid")
 				l.logger.WithField("type", t).WithField("message", resp).Debug("Message receveid")
 				l.readOneTail(resp, out)
 				l.readOneTail(resp, out)