conndump

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 7, 2023 License: MIT Imports: 18 Imported by: 4

Documentation

Overview

Package conndump 提供通用的流量 dump 的功能

Index

Constants

This section is empty.

Variables

View Source
var (
	MessageAction_name = map[int32]string{
		0: "Unknown",
		1: "Read",
		2: "Write",
		3: "Close",
	}
	MessageAction_value = map[string]int32{
		"Unknown": 0,
		"Read":    1,
		"Write":   2,
		"Close":   3,
	}
)

Enum value maps for MessageAction.

View Source
var File_message_proto protoreflect.FileDescriptor

Functions

func Scan

func Scan(rd io.Reader, fn func(msg *Message) bool) error

Scan 读取 dump 文件

Types

type ChanScanner

type ChanScanner struct {
	// Filter 可选,消息过滤器,若返回 false,则这条消息忽略掉
	Filter func(msg *Message) bool

	// Receiver 必填,接收消息 channel 的回调,此 channel 内的消息是同一个网络连接内
	Receiver func(<-chan *Message) bool

	// Timeout 可选,Message 消息超时时间
	// 	若有较多不完整的消息,可以配置该参数
	// 	若一条消息有 Read 或者 Write,但是超过 Timeout 没有 Close,则将此消息的 channel 关闭
	// 	默认为 0-不检查超时情况
	Timeout time.Duration
	// contains filtered or unexported fields
}

ChanScanner 将有多个连接(ConnID)的数据流按照同一个连接分组筛选输出

比如数据流里的数据是:
conn1.ReadData、conn1.ReadData、conn2.ReadData、conn1.ReadData、conn1.CLose、conn2.CLose
最终输出为:
数据流 1:conn1.ReadData、conn1.ReadData、conn1.ReadData、conn1.CLose
数据流 2:conn2.ReadData、conn2.CLose

func (*ChanScanner) Close

func (cs *ChanScanner) Close()

Close 关闭

若有不完整的未关闭的流,此时也会同意关闭掉

func (*ChanScanner) Scan

func (cs *ChanScanner) Scan(rd io.Reader) error

Scan 读取数据流

type Dumper

type Dumper struct {

	// RotatorConfig 可选,用于配置 dump 的 Rotator
	RotatorConfig func(client bool, r *fsfs.Rotator)

	// DataDir 数据存放目录,可选
	DataDir string
	// contains filtered or unexported fields
}

Dumper 流量 dump

func (*Dumper) ClientConnInterceptor

func (d *Dumper) ClientConnInterceptor() *fsconn.Interceptor

ClientConnInterceptor 返回 client 的 conn Interceptor

func (*Dumper) DumpAll

func (d *Dumper) DumpAll(enable bool)

DumpAll 设置所有 server 和 client 是否都允许 dump

func (*Dumper) DumpAllClientRead

func (d *Dumper) DumpAllClientRead(enable bool)

DumpAllClientRead 设置所有的 client 是否允许 dump Read 的数据

func (*Dumper) DumpAllClientWrite

func (d *Dumper) DumpAllClientWrite(enable bool)

DumpAllClientWrite 设置所有的 client 是否允许 dump Write 的数据

func (*Dumper) DumpAllServerRead

func (d *Dumper) DumpAllServerRead(enable bool)

DumpAllServerRead 设置所有 server 是否都允许 dump Read 的数据

func (*Dumper) DumpAllServerWrite

func (d *Dumper) DumpAllServerWrite(enable bool)

DumpAllServerWrite 设置所有 server 是否都允许 dump Write 的数据

func (*Dumper) DumpClientRead

func (d *Dumper) DumpClientRead(name string, enable bool)

DumpClientRead 设置是否允许 dump Read 的数据

func (*Dumper) DumpClientWrite

func (d *Dumper) DumpClientWrite(name string, enable bool)

DumpClientWrite 设置是否允许 dump Write 的数据

func (*Dumper) DumpServerRead

func (d *Dumper) DumpServerRead(name string, enable bool)

DumpServerRead 设置所有 server 是否都允许 dump Read 的数据

func (*Dumper) DumpServerWrite

func (d *Dumper) DumpServerWrite(name string, enable bool)

DumpServerWrite 设置所有 server 是否都允许 dump Write 的数据

func (*Dumper) ServerConnInterceptor

func (d *Dumper) ServerConnInterceptor() *fsconn.Interceptor

ServerConnInterceptor 返回 server 的 conn Interceptor

对于 server,建议使用 WrapListener 方法,而不是直接使用这个方法

func (*Dumper) Stop

func (d *Dumper) Stop()

Stop 停止

func (*Dumper) WrapListener

func (d *Dumper) WrapListener(name string, l net.Listener) net.Listener

WrapListener 封装一个 Listener,使得使用这个 Listener 的所有流量都支持 dump

type Message

type Message struct {

	// 消息 ID,累计递增
	ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
	// 消息行为类型
	Action MessageAction `protobuf:"varint,2,opt,name=Action,proto3,enum=conndump.MessageAction" json:"Action,omitempty"`
	// 所属服务的名称
	Service string `protobuf:"bytes,3,opt,name=Service,proto3" json:"Service,omitempty"`
	// 连接(net.Conn) ID,用于区分是否同一个数据流
	ConnID int64 `protobuf:"varint,4,opt,name=ConnID,proto3" json:"ConnID,omitempty"`
	// 消息 iD,同一个 ConnID 内,依次递增
	SubID int64 `protobuf:"varint,5,opt,name=SubID,proto3" json:"SubID,omitempty"`
	// 消息的目的地址
	Addr string `protobuf:"bytes,6,opt,name=Addr,proto3" json:"Addr,omitempty"`
	// 消息的时间,UnixNano
	Time *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=Time,proto3" json:"Time,omitempty"`
	// 消息内容
	Payload []byte `protobuf:"bytes,8,opt,name=Payload,proto3" json:"Payload,omitempty"`
	// contains filtered or unexported fields
}

Message net.Conn 一次读写(调用一次 Read 或者 Write 方法)的内容

func (*Message) Descriptor deprecated

func (*Message) Descriptor() ([]byte, []int)

Deprecated: Use Message.ProtoReflect.Descriptor instead.

func (*Message) GetAction

func (x *Message) GetAction() MessageAction

func (*Message) GetAddr

func (x *Message) GetAddr() string

func (*Message) GetConnID

func (x *Message) GetConnID() int64

func (*Message) GetID

func (x *Message) GetID() int64

func (*Message) GetPayload

func (x *Message) GetPayload() []byte

func (*Message) GetService

func (x *Message) GetService() string

func (*Message) GetSubID

func (x *Message) GetSubID() int64

func (*Message) GetTime

func (x *Message) GetTime() *timestamppb.Timestamp

func (*Message) ProtoMessage

func (*Message) ProtoMessage()

func (*Message) ProtoReflect

func (x *Message) ProtoReflect() protoreflect.Message

func (*Message) Reset

func (x *Message) Reset()

func (*Message) String

func (x *Message) String() string

type MessageAction

type MessageAction int32

MessageAction 消息类型

const (
	MessageAction_Unknown MessageAction = 0
	// 调用 Read 方法的行为
	MessageAction_Read MessageAction = 1
	// 调用 Write 方法的行为
	MessageAction_Write MessageAction = 2
	// 调用 Close 方法的行为
	MessageAction_Close MessageAction = 3
)

func (MessageAction) Descriptor

func (MessageAction) Enum

func (x MessageAction) Enum() *MessageAction

func (MessageAction) EnumDescriptor deprecated

func (MessageAction) EnumDescriptor() ([]byte, []int)

Deprecated: Use MessageAction.Descriptor instead.

func (MessageAction) Number

func (MessageAction) String

func (x MessageAction) String() string

func (MessageAction) Type

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL