func CreateProbeEventMsg(event *schema.ProbeEvent, id int64, version Format) ([]byte, error) { if event.Id == "" { // per http://blog.mikemccandless.com/2014/05/choosing-fast-unique-identifier-uuid.html, // using V1 UUIDs is much faster than v4 like we were using u := uuid.NewUUID() event.Id = u.String() } buf := new(bytes.Buffer) err := binary.Write(buf, binary.LittleEndian, uint8(version)) if err != nil { return nil, fmt.Errorf(errFmtBinWriteFailed, err) } err = binary.Write(buf, binary.BigEndian, id) if err != nil { return nil, fmt.Errorf(errFmtBinWriteFailed, err) } var msg []byte switch version { case FormatProbeEventJson: msg, err = json.Marshal(event) case FormatProbeEventMsgp: msg, err = event.MarshalMsg(nil) default: return nil, fmt.Errorf(errFmtUnknownFormat, version) } if err != nil { return nil, fmt.Errorf("Failed to marshal metrics payload: %s", err) } _, err = buf.Write(msg) if err != nil { return nil, fmt.Errorf(errFmtBinWriteFailed, err) } return buf.Bytes(), nil }