From 4ba55298b47a3e76184160302f94aaa8e16b1d43 Mon Sep 17 00:00:00 2001 From: ssongliu Date: Mon, 5 Sep 2022 18:46:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=9B=91=E6=8E=A7=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=87=87=E9=9B=86=E8=90=BD=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/v1/monitor.go | 24 +++++ backend/app/api/v1/monitor_test.go | 47 +++++++++ backend/app/dto/monitor.go | 10 ++ backend/app/model/monitor.go | 31 ++++++ backend/cron/corn.go | 21 ++++ backend/cron/job/monitor.go | 61 +++++++++++ backend/global/global.go | 3 + backend/go.mod | 6 ++ backend/go.sum | 14 +++ backend/init/cache/badger_db/badger_db.go | 5 +- backend/init/migration/migrate.go | 1 + backend/init/migration/migrations/init.go | 7 ++ backend/server/server.go | 2 + frontend/src/lang/modules/en.ts | 1 + frontend/src/lang/modules/zh.ts | 1 + frontend/src/routers/modules/monitor.ts | 28 +++++ frontend/src/views/monitor/index.vue | 119 ++++++++++++++++++++++ frontend/src/views/terminal/index.vue | 13 +-- 18 files changed, 380 insertions(+), 14 deletions(-) create mode 100644 backend/app/api/v1/monitor.go create mode 100644 backend/app/api/v1/monitor_test.go create mode 100644 backend/app/dto/monitor.go create mode 100644 backend/app/model/monitor.go create mode 100644 backend/cron/corn.go create mode 100644 backend/cron/job/monitor.go create mode 100644 frontend/src/routers/modules/monitor.ts create mode 100644 frontend/src/views/monitor/index.vue diff --git a/backend/app/api/v1/monitor.go b/backend/app/api/v1/monitor.go new file mode 100644 index 000000000..15e93d950 --- /dev/null +++ b/backend/app/api/v1/monitor.go @@ -0,0 +1,24 @@ +package v1 + +import ( + "github.com/1Panel-dev/1Panel/app/api/v1/helper" + "github.com/1Panel-dev/1Panel/app/dto" + "github.com/1Panel-dev/1Panel/constant" + "github.com/1Panel-dev/1Panel/global" + "github.com/gin-gonic/gin" +) + +func (b *BaseApi) LoadMonitor(c *gin.Context) { + var req dto.MonitorSearch + if err := c.ShouldBindJSON(&req); err != nil { + helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err) + return + } + if err := global.VALID.Struct(req); err != nil { + helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err) + return + } + + // stampStart := req.StartTime.Unix() + // stampEnd := req.EndTime.Unix() +} diff --git a/backend/app/api/v1/monitor_test.go b/backend/app/api/v1/monitor_test.go new file mode 100644 index 000000000..61c08b952 --- /dev/null +++ b/backend/app/api/v1/monitor_test.go @@ -0,0 +1,47 @@ +package v1 + +import ( + "fmt" + "testing" + "time" + + "github.com/shirou/gopsutil/cpu" + "github.com/shirou/gopsutil/disk" + "github.com/shirou/gopsutil/load" + "github.com/shirou/gopsutil/mem" + "github.com/shirou/gopsutil/net" +) + +func TestMonito(t *testing.T) { + totalPercent, _ := cpu.Percent(3*time.Second, false) // 总 cpu 使用 + perPercents, _ := cpu.Percent(3*time.Second, true) // 各 cpu 使用 + fmt.Println("================totalPercent============", totalPercent) + fmt.Println("================perPercents=============", perPercents) + + info, _ := load.Avg() + info2, _ := load.Misc() + fmt.Printf("load: \n loadxx: %v load1: %v, load5: %v, load15: %v \n\n", info2, info.Load1, info.Load5, info.Load15) + + memory, _ := mem.VirtualMemory() + fmt.Printf("memory: \n memory used: %v, use persent: %v \n\n", memory.Used, memory.UsedPercent) + + diskPart, _ := disk.Partitions(true) + // fmt.Println("================disk=============", diskPart) + for _, part := range diskPart { + diskInfo, _ := disk.Usage(part.Mountpoint) + fmt.Printf("inode,disk(%v): \n inode persent: %v, disk used: %v, persent: %v \n", part.Mountpoint, diskInfo.InodesUsedPercent, diskInfo.Used, diskInfo.UsedPercent) + } + fmt.Println() + + ioStat, _ := disk.IOCounters() + for _, v := range ioStat { + fmt.Printf("io: \n name: %v, readCount: %v, writeCount: %v \n\n", v.Name, v.ReadCount, v.WriteCount) + } + fmt.Println() + + net, _ := net.IOCounters(false) + for _, v := range net { + fmt.Printf("netio: \n %v: send:%v recv:%v \n\n", v.Name, v.BytesSent, v.BytesRecv) + } + fmt.Println() +} diff --git a/backend/app/dto/monitor.go b/backend/app/dto/monitor.go new file mode 100644 index 000000000..5bd593f97 --- /dev/null +++ b/backend/app/dto/monitor.go @@ -0,0 +1,10 @@ +package dto + +import "time" + +type MonitorSearch struct { + Param string `json:"param" validate:"required,oneof=all cpu memory load disk inode io iops network"` + StartTime time.Time `json:"startTime"` + EndTime time.Time `json:"endTime"` + Unit string `josn:"unit"` +} diff --git a/backend/app/model/monitor.go b/backend/app/model/monitor.go new file mode 100644 index 000000000..b6b6bbaa3 --- /dev/null +++ b/backend/app/model/monitor.go @@ -0,0 +1,31 @@ +package model + +type MonitorBase struct { + BaseModel + Cpu float64 `gorm:"type:float" json:"cpu"` + + LoadUsage float64 `gorm:"type:float" json:"loadUsage"` + CpuLoad1 float64 `gorm:"type:float" json:"cpuLoad1"` + CpuLoad5 float64 `gorm:"type:float" json:"cpuLoad5"` + CpuLoad15 float64 `gorm:"type:float" json:"cpuLoad15"` + + Memory float64 `gorm:"type:float" json:"memory"` +} + +type MonitorIO struct { + BaseModel + Name string `json:"name"` + ReadCount uint64 `gorm:"type:decimal" json:"readCount"` + WriteCount uint64 `gorm:"type:decimal" json:"writeCount"` + ReadTime uint64 `gorm:"type:decimal" json:"readTime"` + WriteTime uint64 `gorm:"type:decimal" json:"writeTime"` + ReadByte uint64 `gorm:"type:decimal(32)" json:"readByte"` + WriteByte uint64 `gorm:"type:decimal(32)" json:"writeByte"` +} + +type MonitorNetwork struct { + BaseModel + Name string `json:"name"` + BytesSent uint64 `gorm:"type:decimal(32)" json:"bytesSent"` + BytesRecv uint64 `gorm:"type:decimal(32)" json:"bytesRecv"` +} diff --git a/backend/cron/corn.go b/backend/cron/corn.go new file mode 100644 index 000000000..c75c5611b --- /dev/null +++ b/backend/cron/corn.go @@ -0,0 +1,21 @@ +package cron + +import ( + "time" + + "github.com/1Panel-dev/1Panel/cron/job" + "github.com/1Panel-dev/1Panel/global" + "github.com/robfig/cron/v3" +) + +func Run() { + nyc, _ := time.LoadLocation("Asia/Shanghai") + Cron := cron.New(cron.WithLocation(nyc)) + _, err := Cron.AddJob("@every 1m", job.NewMonitorJob()) + if err != nil { + global.LOG.Errorf("can not add corn job: %s", err.Error()) + } + Cron.Start() + + global.Corn = Cron +} diff --git a/backend/cron/job/monitor.go b/backend/cron/job/monitor.go new file mode 100644 index 000000000..a3e560e11 --- /dev/null +++ b/backend/cron/job/monitor.go @@ -0,0 +1,61 @@ +package job + +import ( + "time" + + "github.com/1Panel-dev/1Panel/app/model" + "github.com/1Panel-dev/1Panel/global" + "github.com/shirou/gopsutil/cpu" + "github.com/shirou/gopsutil/disk" + "github.com/shirou/gopsutil/load" + "github.com/shirou/gopsutil/mem" + "github.com/shirou/gopsutil/net" +) + +type monitor struct{} + +func NewMonitorJob() *monitor { + return &monitor{} +} + +func (m *monitor) Run() { + var itemModel model.MonitorBase + totalPercent, _ := cpu.Percent(3*time.Second, false) + if len(totalPercent) == 1 { + itemModel.Cpu = totalPercent[0] + } + cpuCount, _ := cpu.Counts(false) + + loadInfo, _ := load.Avg() + itemModel.CpuLoad1 = loadInfo.Load1 + itemModel.CpuLoad5 = loadInfo.Load5 + itemModel.CpuLoad15 = loadInfo.Load15 + itemModel.LoadUsage = loadInfo.Load1 / (float64(cpuCount*2) * 0.75) * 100 + + memoryInfo, _ := mem.VirtualMemory() + itemModel.Memory = memoryInfo.UsedPercent + + _ = global.DB.Create(&itemModel) + + ioStat, _ := disk.IOCounters() + for _, v := range ioStat { + var itemIO model.MonitorIO + itemIO.Name = v.Name + itemIO.ReadCount = v.ReadCount + itemIO.WriteCount = v.WriteCount + itemIO.ReadByte = v.ReadBytes + itemIO.WriteByte = v.WriteBytes + itemIO.ReadTime = v.ReadTime + itemIO.WriteTime = v.WriteTime + _ = global.DB.Create(&itemIO) + } + + netStat, _ := net.IOCounters(true) + for _, v := range netStat { + var itemNet model.MonitorNetwork + itemNet.Name = v.Name + itemNet.BytesSent = v.BytesSent + itemNet.BytesRecv = v.BytesRecv + _ = global.DB.Create(&itemNet) + } +} diff --git a/backend/global/global.go b/backend/global/global.go index 3756155c2..74f061a98 100644 --- a/backend/global/global.go +++ b/backend/global/global.go @@ -5,6 +5,7 @@ import ( "github.com/1Panel-dev/1Panel/init/cache/badger_db" "github.com/1Panel-dev/1Panel/init/session/psession" "github.com/go-playground/validator/v10" + "github.com/robfig/cron/v3" "github.com/sirupsen/logrus" "gorm.io/gorm" ) @@ -16,4 +17,6 @@ var ( VALID *validator.Validate SESSION *psession.PSession CACHE *badger_db.Cache + + Corn *cron.Cron ) diff --git a/backend/go.mod b/backend/go.mod index f17e4b6d9..b78ad360e 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -20,7 +20,9 @@ require ( github.com/natefinch/lumberjack v2.0.0+incompatible github.com/nicksnyder/go-i18n/v2 v2.1.2 github.com/pkg/errors v0.9.1 + github.com/robfig/cron/v3 v3.0.1 github.com/satori/go.uuid v1.2.0 + github.com/shirou/gopsutil v3.21.11+incompatible github.com/sirupsen/logrus v1.9.0 github.com/spf13/viper v1.12.0 github.com/swaggo/files v0.0.0-20220728132757-551d4a08d97a @@ -43,6 +45,7 @@ require ( github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.6 // indirect github.com/go-openapi/spec v0.20.4 // indirect @@ -80,7 +83,10 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.3.0 // indirect + github.com/tklauser/go-sysconf v0.3.10 // indirect + github.com/tklauser/numcpus v0.4.0 // indirect github.com/ugorji/go/codec v1.2.7 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect go.opencensus.io v0.23.0 // indirect golang.org/x/image v0.0.0-20190802002840-cff245a6509b // indirect golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect diff --git a/backend/go.sum b/backend/go.sum index 951ca346a..9b42da3b6 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -106,6 +106,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gormigrate/gormigrate/v2 v2.0.2 h1:YV4Lc5yMQX8ahVW0ENPq6sPhrhdkGukc6fPRYmZ1R6Y= github.com/go-gormigrate/gormigrate/v2 v2.0.2/go.mod h1:vld36QpBTfTzLealsHsmQQJK5lSwJt6wiORv+oFX8/I= +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-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -313,6 +315,8 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= @@ -321,6 +325,8 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +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/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -367,6 +373,10 @@ github.com/swaggo/gin-swagger v1.5.1/go.mod h1:Cbj/MlHApPOjZdf4joWFXLLgmZVPyh54G github.com/swaggo/swag v1.8.1/go.mod h1:ugemnJsPZm/kRwFUnzBlbHRd0JY9zE1M4F+uy2pAaPQ= github.com/swaggo/swag v1.8.4 h1:oGB351qH1JqUqK1tsMYEE5qTBbPk394BhsZxmUfebcI= github.com/swaggo/swag v1.8.4/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= +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 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= @@ -380,6 +390,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -505,6 +517,7 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -538,6 +551,7 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/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-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/backend/init/cache/badger_db/badger_db.go b/backend/init/cache/badger_db/badger_db.go index 3cbb7ac88..832af0f75 100644 --- a/backend/init/cache/badger_db/badger_db.go +++ b/backend/init/cache/badger_db/badger_db.go @@ -2,9 +2,10 @@ package badger_db import ( "fmt" + "time" + "github.com/dgraph-io/badger/v3" "github.com/pkg/errors" - "time" ) type Cache struct { @@ -53,7 +54,7 @@ func (c *Cache) Get(key string) ([]byte, error) { } err = item.Value(func(val []byte) error { result = append([]byte{}, val...) - return nil + return err }) return nil }) diff --git a/backend/init/migration/migrate.go b/backend/init/migration/migrate.go index 46e818141..b6d4f7f72 100644 --- a/backend/init/migration/migrate.go +++ b/backend/init/migration/migrate.go @@ -13,6 +13,7 @@ func Init() { migrations.AddData, migrations.AddTableOperationLog, migrations.AddTableHost, + migrations.AddTablemonitor, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/backend/init/migration/migrations/init.go b/backend/init/migration/migrations/init.go index 88fd8cb71..be571dde6 100644 --- a/backend/init/migration/migrations/init.go +++ b/backend/init/migration/migrations/init.go @@ -53,3 +53,10 @@ var AddTableHost = &gormigrate.Migration{ return nil }, } + +var AddTablemonitor = &gormigrate.Migration{ + ID: "20200905-add-table-monitor", + Migrate: func(tx *gorm.DB) error { + return tx.AutoMigrate(&model.MonitorBase{}, &model.MonitorIO{}, &model.MonitorNetwork{}) + }, +} diff --git a/backend/server/server.go b/backend/server/server.go index 3f9c4994e..f69a9fc5f 100644 --- a/backend/server/server.go +++ b/backend/server/server.go @@ -5,6 +5,7 @@ import ( "fmt" "time" + "github.com/1Panel-dev/1Panel/cron" "github.com/1Panel-dev/1Panel/init/cache" "github.com/1Panel-dev/1Panel/init/session" "github.com/1Panel-dev/1Panel/init/session/psession" @@ -31,6 +32,7 @@ func Start() { cache.Init() session.Init() gin.SetMode(global.CONF.System.Level) + cron.Run() routers := router.Routers() address := fmt.Sprintf(":%d", global.CONF.System.Port) diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 04ed32873..9f39a7c8b 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -64,6 +64,7 @@ export default { menu: { home: 'Dashboard', demo: 'Demo', + monitor: 'Monitor', terminal: 'Terminal', operations: 'Operation logs', }, diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 3ca0593b8..dcb3b00f5 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -65,6 +65,7 @@ export default { home: '概览', demo: '样例', terminal: '终端管理', + monitor: '监控', operations: '操作记录', }, home: { diff --git a/frontend/src/routers/modules/monitor.ts b/frontend/src/routers/modules/monitor.ts new file mode 100644 index 000000000..de3a7b5c9 --- /dev/null +++ b/frontend/src/routers/modules/monitor.ts @@ -0,0 +1,28 @@ +import { Layout } from '@/routers/constant'; + +const monitorRouter = { + sort: 2, + path: '/monitors', + component: Layout, + redirect: '/monitor', + meta: { + title: 'menu.monitor', + icon: 'monitor', + }, + children: [ + { + path: '/monitors/monitor', + name: 'Monitor', + component: () => import('@/views/monitor/index.vue'), + meta: { + requiresAuth: true, + key: 'Monitor', + title: 'menu.monitor', + icon: 'Connection', + activeMenu: '/monitors', + }, + }, + ], +}; + +export default monitorRouter; diff --git a/frontend/src/views/monitor/index.vue b/frontend/src/views/monitor/index.vue new file mode 100644 index 000000000..33cd613e6 --- /dev/null +++ b/frontend/src/views/monitor/index.vue @@ -0,0 +1,119 @@ + + + diff --git a/frontend/src/views/terminal/index.vue b/frontend/src/views/terminal/index.vue index 01ffa78cf..67997e220 100644 --- a/frontend/src/views/terminal/index.vue +++ b/frontend/src/views/terminal/index.vue @@ -174,7 +174,7 @@