Documentation ¶
Index ¶
- Constants
- Variables
- func ContainerIDForPID(pid int32) (string, error)
- func GetUcredsForPid(pid int32) []byte
- func Read(r io.Reader) ([]byte, error)
- func SetPidMap(m map[int32]string)
- func WriteHeader(w *bufio.Writer) error
- type CaptureBuffer
- type TrafficCapture
- type TrafficCaptureReader
- func (tc *TrafficCaptureReader) Close() error
- func (tc *TrafficCaptureReader) Read(ready chan struct{})
- func (tc *TrafficCaptureReader) ReadNext() (*pb.UnixDogstatsdMsg, error)
- func (tc *TrafficCaptureReader) ReadState() (map[int32]string, map[string]*pb.Entity, error)
- func (tc *TrafficCaptureReader) Seek(offset uint32)
- func (tc *TrafficCaptureReader) Shutdown() error
- type TrafficCaptureWriter
- func (tc *TrafficCaptureWriter) Capture(l string, d time.Duration, compressed bool)
- func (tc *TrafficCaptureWriter) Enqueue(msg *CaptureBuffer) bool
- func (tc *TrafficCaptureWriter) IsOngoing() bool
- func (tc *TrafficCaptureWriter) Path() (string, error)
- func (tc *TrafficCaptureWriter) ProcessMessage(msg *CaptureBuffer) error
- func (tc *TrafficCaptureWriter) RegisterOOBPoolManager(p *packets.PoolManager) error
- func (tc *TrafficCaptureWriter) RegisterSharedPoolManager(p *packets.PoolManager) error
- func (tc *TrafficCaptureWriter) StopCapture()
- func (tc *TrafficCaptureWriter) ValidateLocation(l string) (string, error)
- func (tc *TrafficCaptureWriter) Write(p []byte) (int, error)
- func (tc *TrafficCaptureWriter) WriteHeader() error
- func (tc *TrafficCaptureWriter) WriteNext(msg *CaptureBuffer) error
- func (tc *TrafficCaptureWriter) WriteState() (int, error)
Constants ¶
const ( // GUID will be used as the GUID during capture replays // This is a magic number chosen for no particular reason other than the fact its // quite large an improbable to match an actual Group ID on any given box. We // need this number to identify replayed Unix socket ancillary credentials. GUID = 999888777 )
Variables ¶
var CapPool = sync.Pool{ New: func() interface{} { return new(CaptureBuffer) }, }
CapPool is a pool of CaptureBuffer
Functions ¶
func ContainerIDForPID ¶
ContainerIDForPID returns the matching container id for a pid, or an error if not found.
func GetUcredsForPid ¶
GetUcredsForPid returns the replay ucreds for the specified pid
func Read ¶
Read reads the next protobuf packet available in the file and returns it in a byte slice, and an error if any.
func WriteHeader ¶
WriteHeader writes the datadog header to the Writer argument to conform to the .dog file format.
Types ¶
type CaptureBuffer ¶
type CaptureBuffer struct { Pb pb.UnixDogstatsdMsg Oob *[]byte Pid int32 ContainerID string Buff *packets.Packet }
CaptureBuffer holds pointers to captured packet's buffers (and oob buffer if required) and the protobuf message used for serialization.
type TrafficCapture ¶
type TrafficCapture struct { Writer *TrafficCaptureWriter sync.RWMutex }
TrafficCapture allows capturing traffic from our listeners and writing it to file
func NewTrafficCapture ¶
func NewTrafficCapture() (*TrafficCapture, error)
NewTrafficCapture creates a TrafficCapture instance.
func (*TrafficCapture) IsOngoing ¶
func (tc *TrafficCapture) IsOngoing() bool
IsOngoing returns whether a capture is ongoing for this TrafficCapture instance.
func (*TrafficCapture) Path ¶
func (tc *TrafficCapture) Path() (string, error)
Path returns the path to the underlying TrafficCapture file, and an error if any.
func (*TrafficCapture) Start ¶
Start starts a TrafficCapture and returns an error in the event of an issue.
func (*TrafficCapture) Stop ¶
func (tc *TrafficCapture) Stop()
Stop stops an ongoing TrafficCapture.
type TrafficCaptureReader ¶
type TrafficCaptureReader struct { Contents []byte Version int Traffic chan *pb.UnixDogstatsdMsg Done chan struct{} sync.Mutex // contains filtered or unexported fields }
TrafficCaptureReader allows reading back a traffic capture and its contents
func NewTrafficCaptureReader ¶
func NewTrafficCaptureReader(path string, depth int, mmap bool) (*TrafficCaptureReader, error)
NewTrafficCaptureReader creates a TrafficCaptureReader instance
func (*TrafficCaptureReader) Close ¶
func (tc *TrafficCaptureReader) Close() error
Close cleans up any resources used by the TrafficCaptureReader, should not normally be called directly.
func (*TrafficCaptureReader) Read ¶
func (tc *TrafficCaptureReader) Read(ready chan struct{})
Read reads the contents of the traffic capture and writes each packet to a channel
func (*TrafficCaptureReader) ReadNext ¶
func (tc *TrafficCaptureReader) ReadNext() (*pb.UnixDogstatsdMsg, error)
ReadNext reads the next packet found in the file and returns the protobuf representation and an error if any.
func (*TrafficCaptureReader) ReadState ¶
ReadState reads the tagger state from the end of the capture file. The internal offset of the reader is not modified by this operation.
func (*TrafficCaptureReader) Seek ¶
func (tc *TrafficCaptureReader) Seek(offset uint32)
Seek sets the reader to the specified offset. Please note, the specified offset is relative to the first datagram, not the absolute position in the file, that would include the header. Thus, an offset of 0 would be the first datagram. Use with caution, a bad offset will completely mess up a replay.
func (*TrafficCaptureReader) Shutdown ¶
func (tc *TrafficCaptureReader) Shutdown() error
Shutdown triggers the fuse if there's an ongoing read routine, and closes the reader.
type TrafficCaptureWriter ¶
type TrafficCaptureWriter struct { File afero.File Traffic chan *CaptureBuffer Location string sync.RWMutex // contains filtered or unexported fields }
TrafficCaptureWriter allows writing dogstatsd traffic to a file.
func NewTrafficCaptureWriter ¶
func NewTrafficCaptureWriter(depth int) *TrafficCaptureWriter
NewTrafficCaptureWriter creates a TrafficCaptureWriter instance.
func (*TrafficCaptureWriter) Capture ¶
func (tc *TrafficCaptureWriter) Capture(l string, d time.Duration, compressed bool)
Capture start the traffic capture and writes the packets to file at the specified location and for the specified duration.
func (*TrafficCaptureWriter) Enqueue ¶
func (tc *TrafficCaptureWriter) Enqueue(msg *CaptureBuffer) bool
Enqueue enqueues a capture buffer so it's written to file.
func (*TrafficCaptureWriter) IsOngoing ¶
func (tc *TrafficCaptureWriter) IsOngoing() bool
IsOngoing returns whether a capture is ongoing for this TrafficCaptureWriter instance.
func (*TrafficCaptureWriter) Path ¶
func (tc *TrafficCaptureWriter) Path() (string, error)
Path returns the path to file where the traffic capture will be written.
func (*TrafficCaptureWriter) ProcessMessage ¶
func (tc *TrafficCaptureWriter) ProcessMessage(msg *CaptureBuffer) error
ProcessMessage receives a capture buffer and writes it to disk while also tracking the PID map to be persisted to the taggerState. Should not normally be called directly.
func (*TrafficCaptureWriter) RegisterOOBPoolManager ¶
func (tc *TrafficCaptureWriter) RegisterOOBPoolManager(p *packets.PoolManager) error
RegisterOOBPoolManager registers the OOB shared pool manager with the TrafficCaptureWriter.
func (*TrafficCaptureWriter) RegisterSharedPoolManager ¶
func (tc *TrafficCaptureWriter) RegisterSharedPoolManager(p *packets.PoolManager) error
RegisterSharedPoolManager registers the shared pool manager with the TrafficCaptureWriter.
func (*TrafficCaptureWriter) StopCapture ¶
func (tc *TrafficCaptureWriter) StopCapture()
StopCapture stops the ongoing capture if in process.
func (*TrafficCaptureWriter) ValidateLocation ¶
func (tc *TrafficCaptureWriter) ValidateLocation(l string) (string, error)
ValidateLocation validates the location passed as an argument is writable. The location and/or and error if any are returned.
func (*TrafficCaptureWriter) Write ¶
func (tc *TrafficCaptureWriter) Write(p []byte) (int, error)
Write writes the byte slice argument to file.
func (*TrafficCaptureWriter) WriteHeader ¶
func (tc *TrafficCaptureWriter) WriteHeader() error
WriteHeader writes the .dog file format header to the capture file.
func (*TrafficCaptureWriter) WriteNext ¶
func (tc *TrafficCaptureWriter) WriteNext(msg *CaptureBuffer) error
WriteNext writes the next CaptureBuffer after serializing it to a protobuf format. Continuing writes after an error calling this function would result in a corrupted file
func (*TrafficCaptureWriter) WriteState ¶
func (tc *TrafficCaptureWriter) WriteState() (int, error)
WriteState writes the tagger state to the capture file.