Skip to content

Instantly share code, notes, and snippets.

@Aceeri
Created November 17, 2018 01:49
Show Gist options
  • Select an option

  • Save Aceeri/b99d54151549284b12711736fb3f5dba to your computer and use it in GitHub Desktop.

Select an option

Save Aceeri/b99d54151549284b12711736fb3f5dba to your computer and use it in GitHub Desktop.
func (statsd *StatsdProvider) ParsePacket(packet []byte) (*Depth, error) {
var depth Depth
parser := PacketParser{
buffer: packet,
index: 0,
}
word, err := parser.TakeUntilDelimiter(".")
if err != nil {
return nil, err
}
if word != "queue_depth" {
return nil, fmt.Errorf("Not a queue depth packet")
}
depth.Name, err = parser.TakeUntilDelimiter(".")
if err != nil {
return nil, fmt.Errorf("Error while taking name: %s", err)
}
depth.Sector, err = parser.TakeUntilDelimiter(".")
if err != nil {
return nil, fmt.Errorf("Error while taking sector: %s", err)
}
depth.Ident, err = parser.TakeUntilDelimiter(".")
if err != nil {
return nil, fmt.Errorf("Error while taking ident: %s", err)
}
depth.Address, err = parser.TakeUntilDelimiter(":")
if err != nil {
return nil, fmt.Errorf("Error while taking address: %s", err)
}
queueDepth, err := parser.TakeUntilDelimiter("|")
if err != nil {
return nil, fmt.Errorf("Error while taking queue depth: %s", err)
}
depth.Depth, err = strconv.Atoi(queueDepth)
if err != nil {
return nil, fmt.Errorf("Failed to convert depth (%s) to integer: %s", queueDepth, err)
}
err = parser.Verify("g")
if err != nil {
return nil, fmt.Errorf("Could not fully verify packet: %s", err)
}
return &depth, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment