mirror of
https://github.com/zr-hebo/sniffer-agent.git
synced 2025-08-09 09:14:40 +08:00
add vendor packages避免用户网络太慢无法下载编译
This commit is contained in:
93
vendor/github.com/zr-hebo/util-db/conn_info.go
generated
vendored
Normal file
93
vendor/github.com/zr-hebo/util-db/conn_info.go
generated
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// GetMySQLConnInfoIgnoreErr 获取MySQL连接的字符串显示,忽略错误信息
|
||||
func GetMySQLConnInfoIgnoreErr(conn *sql.DB) (connInfo string) {
|
||||
connInfo, _ = GetMySQLConnInfo(conn)
|
||||
return
|
||||
}
|
||||
|
||||
// GetMySQLConnInfo 获取MySQL连接的字符串显示
|
||||
func GetMySQLConnInfo(conn *sql.DB) (connInfo string, err error) {
|
||||
defer func() {
|
||||
if panicRecover := recover(); panicRecover != nil {
|
||||
err = fmt.Errorf(
|
||||
"get mysql connection info failed for %v", panicRecover)
|
||||
debug.PrintStack()
|
||||
}
|
||||
}()
|
||||
|
||||
cv := reflect.ValueOf(conn).Elem()
|
||||
// fmt.Printf("%#v\n", cv)
|
||||
|
||||
dsnv := cv.FieldByName("dsn")
|
||||
dsnStr := fmt.Sprint(dsnv)
|
||||
dsnInfo, err := resolveDsn(dsnStr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
fcsv := cv.FieldByName("dep")
|
||||
// fmt.Printf("%#v\n", fcsv)
|
||||
|
||||
lports := make([]string, 0)
|
||||
for _, key := range fcsv.MapKeys() {
|
||||
// fcv := fcsv.Index(0).Elem()
|
||||
depSet := fcsv.MapIndex(key).MapKeys()
|
||||
if len(depSet) < 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
fcv := depSet[0].Elem().Elem()
|
||||
// fmt.Printf("%#v\n", fcv)
|
||||
// fmt.Printf("%#v\n", fcv.Elem())
|
||||
|
||||
mc := fcv.FieldByName("ci").Elem().Elem()
|
||||
// fmt.Printf("%#v", mc)
|
||||
|
||||
nc := mc.FieldByName("netConn").Elem().Elem()
|
||||
// fmt.Printf("%#v", nc)
|
||||
|
||||
ic := nc.FieldByName("conn")
|
||||
// fmt.Printf("%#v", conn)
|
||||
|
||||
fd := ic.FieldByName("fd").Elem()
|
||||
// fmt.Printf("%#v", fd)
|
||||
|
||||
la := fd.FieldByName("laddr").Elem().Elem()
|
||||
// fmt.Printf("%#v", la)
|
||||
|
||||
lport := la.FieldByName("Port")
|
||||
|
||||
lports = append(lports, fmt.Sprint(lport))
|
||||
// fmt.Printf("%#v", lport)
|
||||
}
|
||||
|
||||
connInfo = fmt.Sprintf(
|
||||
"127.0.0.1:%s <==> %s:%s", strings.Join(lports, ", "),
|
||||
dsnInfo["host"], dsnInfo["port"])
|
||||
return
|
||||
}
|
||||
|
||||
func resolveDsn(dsn string) (info map[string]string, err error) {
|
||||
info = make(map[string]string)
|
||||
|
||||
pattern := regexp.MustCompile(`.*:.*@tcp\((?P<host>[\w.]+):(?P<port>\d+)\)/`)
|
||||
|
||||
match := pattern.FindStringSubmatch(dsn)
|
||||
for idx, name := range pattern.SubexpNames() {
|
||||
if idx > 0 && idx <= len(match) {
|
||||
info[name] = match[idx]
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user