diff --git a/client.go b/client.go index d64ce22..d8ad291 100644 --- a/client.go +++ b/client.go @@ -29,13 +29,19 @@ type Client struct { mongoClient *dorm.MongoClient // 数据库 zapLog *golog.ZapLog // 日志服务 config struct { - systemHostName string // 主机名 - systemInsideIp string // 内网ip - systemOs string // 系统类型 - systemArch string // 系统架构 - goVersion string // go版本 - sdkVersion string // sdk版本 - systemOutsideIp string // 外网ip + systemHostname string // 主机名 + systemOs string // 系统类型 + systemVersion string // 系统版本 + systemKernel string // 系统内核 + systemKernelVersion string // 系统内核版本 + systemBootTime uint64 // 系统开机时间 + cpuCores int // CPU核数 + cpuModelName string // CPU型号名称 + cpuMhz float64 // CPU兆赫 + systemInsideIp string // 内网ip + systemOutsideIp string // 外网ip + goVersion string // go版本 + sdkVersion string // sdk版本 } cache struct { redisClient *dorm.RedisClient // 数据库 diff --git a/cofing.go b/cofing.go index 6368a37..459f905 100644 --- a/cofing.go +++ b/cofing.go @@ -2,17 +2,78 @@ package gojobs import ( "context" + "github.com/shirou/gopsutil/cpu" + "github.com/shirou/gopsutil/host" "go.dtapp.net/goip" - "os" + "log" "runtime" ) +type systemResult struct { + SystemHostname string // 主机名 + SystemOs string // 系统类型 + SystemVersion string // 系统版本 + SystemKernel string // 系统内核 + SystemKernelVersion string // 系统内核版本 + SystemUpTime uint64 // 系统运行时间 + SystemBootTime uint64 // 系统开机时间 + CpuCores int // CPU核数 + CpuModelName string // CPU型号名称 + CpuMhz float64 // CPU兆赫 +} + +func getSystem() (result systemResult) { + + hInfo, err := host.Info() + if err != nil { + log.Printf("getSystem.host.Info:%s\n", err) + } + + result.SystemHostname = hInfo.Hostname + result.SystemOs = hInfo.OS + result.SystemVersion = hInfo.PlatformVersion + result.SystemKernel = hInfo.KernelArch + result.SystemKernelVersion = hInfo.KernelVersion + result.SystemUpTime = hInfo.Uptime + if hInfo.BootTime != 0 { + result.SystemBootTime = hInfo.BootTime + } + + hCpu, err := cpu.Times(true) + if err != nil { + log.Printf("getSystem.cpu.Times:%s\n", err) + } + + result.CpuCores = len(hCpu) + + cInfo, err := cpu.Info() + if err != nil { + log.Printf("getSystem.cpu.Info:%s\n", err) + } + if len(cInfo) > 0 { + result.CpuModelName = cInfo[0].ModelName + result.CpuMhz = cInfo[0].Mhz + } + + return result +} + func (c *Client) setConfig(ctx context.Context) { + + info := getSystem() + + c.config.systemHostname = info.SystemHostname + c.config.systemOs = info.SystemOs + c.config.systemVersion = info.SystemVersion + c.config.systemKernel = info.SystemKernel + c.config.systemKernelVersion = info.SystemKernelVersion + c.config.systemBootTime = info.SystemBootTime + c.config.cpuCores = info.CpuCores + c.config.cpuModelName = info.CpuModelName + c.config.cpuMhz = info.CpuMhz + + c.config.systemInsideIp = goip.GetInsideIp(ctx) + c.config.sdkVersion = Version - c.config.systemOs = runtime.GOOS - c.config.systemArch = runtime.GOARCH c.config.goVersion = runtime.Version() - c.config.systemInsideIp = goip.GetInsideIp(ctx) - hostname, _ := os.Hostname() - c.config.systemHostName = hostname } diff --git a/const.go b/const.go index 6bea270..1a79d4a 100644 --- a/const.go +++ b/const.go @@ -1,6 +1,6 @@ package gojobs const ( - Version = "1.0.106" + Version = "1.0.107" SpecifyIpNull = "0.0.0.0" ) diff --git a/go.mod b/go.mod index 6be0a6b..9d8cd96 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,10 @@ require ( github.com/go-redis/redis/v9 v9.0.0-beta.2 github.com/jasonlvhit/gocron v0.0.1 github.com/robfig/cron/v3 v3.0.1 + github.com/shirou/gopsutil v3.21.11+incompatible go.dtapp.net/dorm v1.0.42 go.dtapp.net/goip v1.0.38 - go.dtapp.net/golog v1.0.94 + go.dtapp.net/golog v1.0.96 go.dtapp.net/gostring v1.0.10 go.dtapp.net/gotime v1.0.5 go.dtapp.net/gotrace_id v1.0.6 @@ -24,6 +25,7 @@ require ( github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/gin-gonic/gin v1.8.1 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect github.com/go-playground/validator/v10 v10.11.1 // indirect @@ -60,6 +62,8 @@ require ( github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/syndtr/goleveldb v1.0.0 // indirect + github.com/tklauser/go-sysconf v0.3.10 // indirect + github.com/tklauser/numcpus v0.5.0 // indirect github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect github.com/ugorji/go/codec v1.2.7 // indirect github.com/ulikunitz/xz v0.5.10 // indirect @@ -74,6 +78,7 @@ require ( github.com/xdg-go/scram v1.1.1 // indirect github.com/xdg-go/stringprep v1.0.3 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect go.dtapp.net/gorandom v1.0.1 // indirect go.dtapp.net/gorequest v1.0.31 // indirect go.dtapp.net/gourl v1.0.0 // indirect diff --git a/go.sum b/go.sum index 4c34181..6467618 100644 --- a/go.sum +++ b/go.sum @@ -90,6 +90,8 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -429,6 +431,8 @@ github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtr github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik= github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= @@ -466,6 +470,11 @@ github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFd github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= +github.com/tklauser/numcpus v0.5.0 h1:ooe7gN0fg6myJ0EKoTAf5hebTZrH52px3New/D9iJ+A= +github.com/tklauser/numcpus v0.5.0/go.mod h1:OGzpTxpcIMNGYQdit2BYL1pvk/dSOaJWjKoflh+RQjo= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= @@ -501,14 +510,16 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7Jul github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= go.dtapp.net/dorm v1.0.42 h1:bugzTYBr5goLDf9s8vft6xG/fAiinLm1jo+9uFD7JRM= go.dtapp.net/dorm v1.0.42/go.mod h1:LCy6tqg7uClOhMb8zgF9x9mTFoVd9Ud40g9a2Z6bbwM= go.dtapp.net/goip v1.0.38 h1:WHIqXV0qWUM9XDtRaMIMyCKWyd9dWfSvSRdDr7vF7xU= go.dtapp.net/goip v1.0.38/go.mod h1:N2YFFr2OO+5VQwMqyKtg7c4MVrDJOoog/QmIvYUfi1c= -go.dtapp.net/golog v1.0.94 h1:pRvnGpAcM+J976PAxmNiHxJ6AGCvRCo7kkHyzjmKSlE= -go.dtapp.net/golog v1.0.94/go.mod h1:fQLLDTe2jOdps4p+42pd7a/nL1FzWpQgI71zz8jGtvA= +go.dtapp.net/golog v1.0.96 h1:F/csvmojSL6Mp1TbFRyeEBxQJUT240uNEOlyTfOpCnU= +go.dtapp.net/golog v1.0.96/go.mod h1:nY6Y6p4qKAFgQ+kB8rXa/vvgfTFwH0go9ttwBQUQBYg= go.dtapp.net/gorandom v1.0.1 h1:IWfMClh1ECPvyUjlqD7MwLq4mZdUusD1qAwAdsvEJBs= go.dtapp.net/gorandom v1.0.1/go.mod h1:ZPdgalKpvFV/ATQqR0k4ns/F/IpITAZpx6WkWirr5Y8= go.dtapp.net/gorequest v1.0.31 h1:r/OoU5Y00TbJjkQtpvwjsb/pllqO0UQQjFRY1veZYZc= @@ -633,6 +644,7 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -647,7 +659,9 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= diff --git a/model.go b/model.go index a1ef658..ee9a871 100644 --- a/model.go +++ b/model.go @@ -49,10 +49,10 @@ func (c *Client) GormTaskLogRecord(ctx context.Context, task jobs_gorm_model.Tas TaskRunId: runId, TaskResultCode: taskResultCode, TaskResultDesc: taskResultDesc, - SystemHostName: c.config.systemHostName, + SystemHostName: c.config.systemHostname, SystemInsideIp: c.config.systemInsideIp, SystemOs: c.config.systemOs, - SystemArch: c.config.systemArch, + SystemArch: c.config.systemKernel, GoVersion: c.config.goVersion, SdkVersion: c.config.sdkVersion, SystemOutsideIp: c.config.systemOutsideIp, diff --git a/model_task_log.go b/model_task_log.go index 58d0898..2087121 100644 --- a/model_task_log.go +++ b/model_task_log.go @@ -17,23 +17,27 @@ type TaskLog struct { LogId primitive.ObjectID `json:"log_id,omitempty" bson:"_id,omitempty"` //【记录】编号 LogTime primitive.DateTime `json:"log_time,omitempty" bson:"log_time"` //【记录】时间 Task struct { - Id uint `json:"id,omitempty" bson:"id,omitempty"` //【任务】编号 - RunId string `json:"run_id,omitempty" bson:"run_id,omitempty"` //【任务】执行编号 - ResultCode int `json:"result_code,omitempty" bson:"result_code,omitempty"` //【任务】执行状态码 - ResultDesc string `json:"result_desc,omitempty" bson:"result_desc,omitempty"` //【任务】执行结果 - ResultTime dorm.BsonTime `json:"result_time,omitempty" bson:"result_time,omitempty"` //【任务】执行时间 - } `json:"task,omitempty" bson:"task,omitempty"` //【任务】信息 + Id uint `json:"id" bson:"id"` //【任务】编号 + RunId string `json:"run_id" bson:"run_id"` //【任务】执行编号 + ResultCode int `json:"result_code" bson:"result_code"` //【任务】执行状态码 + ResultDesc string `json:"result_desc" bson:"result_desc"` //【任务】执行结果 + ResultTime dorm.BsonTime `json:"result_time" bson:"result_time"` //【任务】执行时间 + } `json:"task" bson:"task"` //【任务】信息 System struct { - HostName string `json:"host_name,omitempty" bson:"host_name,omitempty"` //【系统】主机名 - InsideIp string `json:"inside_ip,omitempty" bson:"inside_ip,omitempty"` //【系统】内网ip - OutsideIp string `json:"outside_ip,omitempty" bson:"outside_ip,omitempty"` //【系统】外网ip - Os string `json:"os,omitempty" bson:"os,omitempty"` //【系统】系统类型 - Arch string `json:"arch,omitempty" bson:"arch,omitempty"` //【系统】系统架构 - } `json:"system,omitempty" bson:"system,omitempty"` //【系统】信息 - Version struct { - Go string `json:"go,omitempty" bson:"go,omitempty"` //【程序】Go版本 - Sdk string `json:"sdk,omitempty" bson:"sdk,omitempty"` //【程序】Sdk版本 - } `json:"version,omitempty" bson:"version,omitempty"` //【程序】版本信息 + Hostname string `json:"hostname" bson:"hostname"` //【系统】主机名 + Os string `json:"os" bson:"os"` //【系统】系统类型 + Version string `json:"version" bson:"version"` //【系统】系统版本 + Kernel string `json:"kernel" bson:"kernel"` //【系统】系统内核 + KernelVersion string `json:"kernel_version" bson:"kernel_version"` //【系统】系统内核版本 + BootTime dorm.BsonTime `json:"boot_time" bson:"boot_time"` //【系统】系统开机时间 + CpuCores int `json:"cpu_cores,omitempty" bson:"cpu_cores,omitempty"` //【系统】CPU核数 + CpuModelName string `json:"cpu_model_name,omitempty" bson:"cpu_model_name,omitempty"` //【系统】CPU型号名称 + CpuMhz float64 `json:"cpu_mhz,omitempty" bson:"cpu_mhz,omitempty"` //【系统】CPU兆赫 + InsideIp string `json:"inside_ip" bson:"inside_ip"` //【系统】内网ip + OutsideIp string `json:"outside_ip" bson:"outside_ip"` //【系统】外网ip + GoVersion string `json:"go_version" bson:"go_version"` //【系统】go版本 + SdkVersion string `json:"sdk_version" bson:"sdk_version"` //【系统】sdk版本 + } `json:"system" bson:"system"` //【系统】信息 } func (TaskLog) CollectionName() string { @@ -75,14 +79,19 @@ func (c *Client) MongoTaskLogRecord(ctx context.Context, task jobs_gorm_model.Ta taskLog.Task.ResultDesc = taskResultDesc taskLog.Task.ResultTime = dorm.NewBsonTimeCurrent() - taskLog.System.HostName = c.config.systemHostName - taskLog.System.InsideIp = c.config.systemInsideIp - taskLog.System.OutsideIp = c.config.systemOutsideIp - taskLog.System.Os = c.config.systemOs - taskLog.System.Arch = c.config.systemArch - - taskLog.Version.Go = c.config.goVersion - taskLog.Version.Sdk = c.config.sdkVersion + taskLog.System.Hostname = c.config.systemHostname //【系统】主机名 + taskLog.System.Os = c.config.systemOs //【系统】系统类型 + taskLog.System.Version = c.config.systemVersion //【系统】系统版本 + taskLog.System.Kernel = c.config.systemKernel //【系统】系统内核 + taskLog.System.KernelVersion = c.config.systemKernelVersion //【系统】系统内核版本 + taskLog.System.BootTime = dorm.NewBsonTimeFromTime(gotime.SetCurrentUnix(int64(c.config.systemBootTime)).Time) //【系统】系统开机时间 + taskLog.System.CpuCores = c.config.cpuCores //【系统】CPU核数 + taskLog.System.CpuModelName = c.config.cpuModelName //【程序】CPU型号名称 + taskLog.System.CpuMhz = c.config.cpuMhz //【系统】CPU兆赫 + taskLog.System.InsideIp = c.config.systemInsideIp //【系统】内网ip + taskLog.System.OutsideIp = c.config.systemOutsideIp //【系统】外网ip + taskLog.System.GoVersion = c.config.goVersion //【系统】Go版本 + taskLog.System.SdkVersion = c.config.sdkVersion //【系统】Sdk版本 _, err := c.mongoClient.Database(c.mongoConfig.databaseName).Collection(TaskLog{}.CollectionName()).InsertOne(ctx, taskLog) if err != nil {