diff --git a/capture/network.go b/capture/network.go index d253605..f7d715e 100644 --- a/capture/network.go +++ b/capture/network.go @@ -116,16 +116,16 @@ func (nc *networkCard) listenNormal() { continue } - // throw packets according to a certain probability - throwPacketRate := communicator.GetTCPThrowPacketRate() - if throwPacketRate >= 1.0 { + // capture packets according to a certain probability + capturePacketRate := communicator.GetTCPCapturePacketRate() + if capturePacketRate <= 0 { time.Sleep(time.Second*3) continue - } else if 0 < throwPacketRate && throwPacketRate < 1.0 { + } else if 0 < capturePacketRate && capturePacketRate < 1.0 { // fall into throw range rn := rand.Float64() - if rn <= throwPacketRate { + if rn > capturePacketRate { continue } } diff --git a/communicator/config.go b/communicator/config.go index 26b289f..aebf222 100644 --- a/communicator/config.go +++ b/communicator/config.go @@ -8,23 +8,28 @@ import ( ) const ( - THROW_PACKET_RATE = "throw_packet_rate" + CAPTURE_PACKET_RATE = "capture_packet_rate" ) var ( communicatePort int + // capturePacketRate float64 router = mux.NewRouter() ) var ( - configMapLock sync.RWMutex - configMap map[string]configItem - throwPacketRate *throwPacketRateConfig + configMapLock sync.RWMutex + configMap map[string]configItem + catpurePacketRate *capturePacketRateConfig ) func init() { + catpurePacketRate = newCapturePacketRateConfig() + flag.IntVar(&communicatePort, "communicate_port", 8088, "http server port. Default is 8088") + var cpr float64 + flag.Float64Var(&cpr, CAPTURE_PACKET_RATE, 1, "capture packet rate. Default is 1.0") + _ = catpurePacketRate.setVal(cpr) configMap = make(map[string]configItem) - throwPacketRate = newThrowPacketRateConfig() } diff --git a/communicator/controller.go b/communicator/controller.go index f85744f..5b97185 100644 --- a/communicator/controller.go +++ b/communicator/controller.go @@ -82,10 +82,10 @@ func outletSetConfig(resp http.ResponseWriter, req *http.Request) { mp.Err = SetConfig(ep.ConfigName, ep.Value) } -func GetTCPThrowPacketRate() float64 { - return throwPacketRate.tcpTPR +func GetTCPCapturePacketRate() float64 { + return catpurePacketRate.tcpTPR } -func GetMysqlThrowPacketRate() float64 { - return throwPacketRate.mysqlTPR +func GetMysqlCapturePacketRate() float64 { + return catpurePacketRate.mysqlTPR } \ No newline at end of file diff --git a/communicator/major_function.go b/communicator/major_function.go index 2445075..1ecf2b6 100644 --- a/communicator/major_function.go +++ b/communicator/major_function.go @@ -4,8 +4,8 @@ import "fmt" // SetConfig set config by config key(name) and value func SetConfig(key string, val interface{}) (err error) { - if key == throwPacketRate.name { - err = throwPacketRate.setVal(val) + if key == catpurePacketRate.name { + err = catpurePacketRate.setVal(val) return } diff --git a/communicator/model.go b/communicator/model.go index 330ac68..44ad29e 100644 --- a/communicator/model.go +++ b/communicator/model.go @@ -10,33 +10,33 @@ type configItem interface { getVal () interface{} } -type throwPacketRateConfig struct { +type capturePacketRateConfig struct { name string tcpTPR float64 mysqlTPR float64 } -func newThrowPacketRateConfig() (tpr *throwPacketRateConfig) { - tpr = &throwPacketRateConfig{ - name: THROW_PACKET_RATE, - tcpTPR: 0.0, - mysqlTPR: 0.0, +func newCapturePacketRateConfig() (cprc *capturePacketRateConfig) { + cprc = &capturePacketRateConfig{ + name: CAPTURE_PACKET_RATE, + tcpTPR: 1.0, + mysqlTPR: 1.0, } return } -func (tc *throwPacketRateConfig) setVal (val interface{}) (err error){ +func (cprc *capturePacketRateConfig) setVal (val interface{}) (err error){ realVal, ok := val.(float64) if !ok { err = fmt.Errorf("cannot reansform val: %v to float64", val) return } - tc.mysqlTPR = realVal - tc.tcpTPR = math.Sqrt(realVal) + cprc.mysqlTPR = realVal + cprc.tcpTPR = math.Sqrt(realVal) return } -func (tc *throwPacketRateConfig) getVal () (val interface{}){ - return tc.mysqlTPR +func (cprc *capturePacketRateConfig) getVal () (val interface{}){ + return cprc.mysqlTPR } \ No newline at end of file diff --git a/session-dealer/mysql/session.go b/session-dealer/mysql/session.go index 537fe7f..4da966d 100644 --- a/session-dealer/mysql/session.go +++ b/session-dealer/mysql/session.go @@ -313,5 +313,5 @@ func filterQueryPieceBySQL(mqp *model.PooledMysqlQueryPiece, querySQL []byte) (m func (ms *MysqlSession) composeQueryPiece() (mqp *model.PooledMysqlQueryPiece) { return model.NewPooledMysqlQueryPiece( ms.connectionID, ms.clientHost, ms.visitUser, ms.visitDB, ms.clientHost, ms.serverIP, - ms.clientPort, ms.serverPort, communicator.GetMysqlThrowPacketRate(), ms.stmtBeginTime) + ms.clientPort, ms.serverPort, communicator.GetMysqlCapturePacketRate(), ms.stmtBeginTime) }