func Example() { h := func(w http.ResponseWriter, r *http.Request) { lp := lpx.NewReader(bufio.NewReader(r.Body)) for lp.Next() { if string(lp.Header().Name) == "router" { decodeMsg(lp.Bytes()) } } } http.HandleFunc("/drain", h) _ = http.ListenAndServe(":8080", nil) }
// Fix function to convert post data to length prefixed syslog frames func fix(r io.Reader, remoteAddr string, logplexDrainToken string) ([]byte, error) { var messageWriter bytes.Buffer var messageLenWriter bytes.Buffer lp := lpx.NewReader(bufio.NewReader(r)) for lp.Next() { header := lp.Header() // LEN SP PRI VERSION SP TIMESTAMP SP HOSTNAME SP APP-NAME SP PROCID SP MSGID SP STRUCTURED-DATA MSG messageWriter.Write(header.PrivalVersion) messageWriter.WriteString(" ") messageWriter.Write(header.Time) messageWriter.WriteString(" ") if string(header.Hostname) == logplexDefaultHost && logplexDrainToken != "" { messageWriter.WriteString(logplexDrainToken) } else { messageWriter.Write(header.Hostname) } messageWriter.WriteString(" ") messageWriter.Write(header.Name) messageWriter.WriteString(" ") messageWriter.Write(header.Procid) messageWriter.WriteString(" ") messageWriter.Write(header.Msgid) messageWriter.WriteString(" [origin ip=\"") messageWriter.WriteString(remoteAddr) messageWriter.WriteString("\"]") b := lp.Bytes() if len(b) >= 2 && bytes.Equal(b[0:2], nilVal) { messageWriter.Write(b[1:]) } else if len(b) > 0 { if b[0] != '[' { messageWriter.WriteString(" ") } messageWriter.Write(b) } messageLenWriter.WriteString(strconv.Itoa(messageWriter.Len())) messageLenWriter.WriteString(" ") messageWriter.WriteTo(&messageLenWriter) } return messageLenWriter.Bytes(), lp.Err() }