mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 03:38:42 -07:00
Emit latency traces when sampling is set to headers
Latency reports will include the header(s) responsible for the trace Updated ADR to have it reflect implementation Signed-off-by: Matthias Hanel <mh@synadia.com>
This commit is contained in:
@@ -14,7 +14,11 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/textproto"
|
||||
)
|
||||
|
||||
type parserState int
|
||||
@@ -26,6 +30,7 @@ type parseState struct {
|
||||
pa pubArg
|
||||
argBuf []byte
|
||||
msgBuf []byte
|
||||
header http.Header // access via getHeader
|
||||
scratch [MAX_CONTROL_LINE_SIZE]byte
|
||||
}
|
||||
|
||||
@@ -442,7 +447,7 @@ func (c *client) parse(buf []byte) error {
|
||||
c.traceMsg(c.msgBuf)
|
||||
}
|
||||
c.processInboundMsg(c.msgBuf)
|
||||
c.argBuf, c.msgBuf = nil, nil
|
||||
c.argBuf, c.msgBuf, c.header = nil, nil, nil
|
||||
c.drop, c.as, c.state = 0, i+1, OP_START
|
||||
// Drop all pub args
|
||||
c.pa.arg, c.pa.pacache, c.pa.origin, c.pa.account, c.pa.subject = nil, nil, nil, nil, nil
|
||||
@@ -1175,3 +1180,17 @@ func (c *client) clonePubArg() error {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (ps *parseState) getHeader() http.Header {
|
||||
if ps.header == nil {
|
||||
if hdr := ps.pa.hdr; hdr > 0 {
|
||||
reader := bufio.NewReader(bytes.NewReader(ps.msgBuf[0:hdr]))
|
||||
tp := textproto.NewReader(reader)
|
||||
tp.ReadLine() // skip over first line, contains version
|
||||
if mimeHeader, err := tp.ReadMIMEHeader(); err == nil {
|
||||
ps.header = http.Header(mimeHeader)
|
||||
}
|
||||
}
|
||||
}
|
||||
return ps.header
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user