func (s *Service) serve() { defer s.wg.Done() s.batcher.Start() for { buf := make([]byte, UDPBufferSize) select { case <-s.done: // We closed the connection, time to go. return default: // Keep processing. } n, _, err := s.conn.ReadFromUDP(buf) if err != nil { s.Logger.Printf("Failed to read UDP message: %s", err) continue } points, err := tsdb.ParsePoints(buf[:n]) if err != nil { s.Logger.Printf("Failed to parse points: %s", err) continue } for _, point := range points { s.batcher.In() <- point } } }
func (p *Processor) unmarshalWrite(b []byte) (uint64, []tsdb.Point, error) { ownerID := binary.BigEndian.Uint64(b[:8]) points, err := tsdb.ParsePoints(b[8:]) return ownerID, points, err }