1、增加任务指令
This commit is contained in:
		
							parent
							
								
									a2c95fe43f
								
							
						
					
					
						commit
						58b0f2c4c6
					
				|  | @ -8,6 +8,7 @@ import ( | ||||||
| 	"hpds-iot-web/config" | 	"hpds-iot-web/config" | ||||||
| 	router2 "hpds-iot-web/internal/router" | 	router2 "hpds-iot-web/internal/router" | ||||||
| 	"hpds-iot-web/model" | 	"hpds-iot-web/model" | ||||||
|  | 	"hpds-iot-web/mq" | ||||||
| 	discover "hpds-iot-web/pkg/discover/consul" | 	discover "hpds-iot-web/pkg/discover/consul" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
|  | @ -27,7 +28,7 @@ var ( | ||||||
| 
 | 
 | ||||||
| func must(err error) { | func must(err error) { | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Fprint(os.Stderr, err) | 		_, _ = fmt.Fprint(os.Stderr, err) | ||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -79,24 +80,28 @@ func NewStartCmd() *cobra.Command { | ||||||
| 			//创建注册对象
 | 			//创建注册对象
 | ||||||
| 			tags := make([]string, 1) | 			tags := make([]string, 1) | ||||||
| 			tags[0] = "web" | 			tags[0] = "web" | ||||||
| 			consulCfg, err := discover.NewConsulConfig(cfg.Consul.Host, cfg.Name, cfg.Name, cfg.Consul.Host, cfg.Consul.Port, | 			consulCfg, err := discover.NewConsulConfig(fmt.Sprintf("%s:%d", cfg.Consul.Host, cfg.Consul.Port), cfg.Name, cfg.Name, cfg.Consul.Host, cfg.Consul.Port, | ||||||
| 				tags, 300, 300, 300) | 				tags, 300, 300, 300) | ||||||
| 			must(err) | 			must(err) | ||||||
| 
 | 
 | ||||||
| 			//连接数据库
 | 			//连接数据库
 | ||||||
| 			model.New(cfg.Db.DriveName, cfg.Db.Conn) | 			model.New(cfg.Db.DriveName, cfg.Db.Conn, cfg.Mode == "dev") | ||||||
| 			//连接redis
 | 			//连接redis
 | ||||||
| 			model.NewCache(cfg.Cache) | 			model.NewCache(cfg.Cache) | ||||||
| 
 | 
 | ||||||
| 			logger := LoadLoggerConfig(cfg.Logging) | 			logger := LoadLoggerConfig(cfg.Logging) | ||||||
| 
 | 
 | ||||||
|  | 			//创建消息连接点
 | ||||||
|  | 			mq.MqList, err = mq.NewMqClient(cfg.Funcs, cfg.Node, logger) | ||||||
|  | 			must(err) | ||||||
|  | 
 | ||||||
| 			// 退出channel
 | 			// 退出channel
 | ||||||
| 			exitChannel := make(chan os.Signal) | 			exitChannel := make(chan os.Signal) | ||||||
| 			defer close(exitChannel) | 			defer close(exitChannel) | ||||||
| 
 | 
 | ||||||
| 			// 退出信号监听
 | 			// 退出信号监听
 | ||||||
| 			go func(c chan os.Signal) { | 			go func(c chan os.Signal) { | ||||||
| 				consulCfg.ServiceDeregister() | 				_ = consulCfg.ServiceDeregister() | ||||||
| 				signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) | 				signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) | ||||||
| 			}(exitChannel) | 			}(exitChannel) | ||||||
| 			router := router2.InitRouter(cfg, logger, model.DB) | 			router := router2.InitRouter(cfg, logger, model.DB) | ||||||
|  | @ -116,13 +121,13 @@ func NewStartCmd() *cobra.Command { | ||||||
| 			//zap.L().Error("发生错误", zap.Error(err))
 | 			//zap.L().Error("发生错误", zap.Error(err))
 | ||||||
| 			select { | 			select { | ||||||
| 			case <-ctx.Done(): | 			case <-ctx.Done(): | ||||||
| 				consulCfg.ServiceDeregister() | 				_ = consulCfg.ServiceDeregister() | ||||||
| 				logger.With( | 				logger.With( | ||||||
| 					zap.String("web", "exit"), | 					zap.String("web", "exit"), | ||||||
| 				).Error(ctx.Err().Error()) | 				).Error(ctx.Err().Error()) | ||||||
| 				return | 				return | ||||||
| 			case errs := <-exitChannel: | 			case errs := <-exitChannel: | ||||||
| 				consulCfg.ServiceDeregister() | 				_ = consulCfg.ServiceDeregister() | ||||||
| 				logger.With( | 				logger.With( | ||||||
| 					zap.String("web", "服务退出"), | 					zap.String("web", "服务退出"), | ||||||
| 				).Info(errs.String()) | 				).Info(errs.String()) | ||||||
|  |  | ||||||
|  | @ -26,7 +26,7 @@ consul: | ||||||
|   timeout: 5 |   timeout: 5 | ||||||
|   deregister: 1 |   deregister: 1 | ||||||
| db: | db: | ||||||
|   conn: root:OIxv7QptYBO3@tcp(192.168.0.200:3306)/hpds_jky?charset=utf8mb4 |   conn: root:OIxv7QptYBO3@tcp(114.55.236.153:27136)/hpds_jky?charset=utf8mb4 | ||||||
|   drive_name: mysql |   drive_name: mysql | ||||||
| cache: | cache: | ||||||
|   host: 192.168.0.200 |   host: 192.168.0.200 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,38 @@ | ||||||
|  | name: web | ||||||
|  | host: 0.0.0.0 | ||||||
|  | port: 8088 | ||||||
|  | mode: dev | ||||||
|  | logging: | ||||||
|  |   path: ./logs | ||||||
|  |   prefix: hpds-iot-web | ||||||
|  |   errorFileSuffix: error.log | ||||||
|  |   warnFileSuffix: warn.log | ||||||
|  |   infoFileSuffix: info.log | ||||||
|  |   debugFileSuffix: debug.log | ||||||
|  |   maxSize: 100 | ||||||
|  |   maxBackups: 3000 | ||||||
|  |   maxAge: 30 | ||||||
|  |   development: true | ||||||
|  | mineData: | ||||||
|  |   accessKey: f0bda738033e47ffbfbd5d3f865c19e1 | ||||||
|  | minio: | ||||||
|  |   protocol: http | ||||||
|  |   endpoint: 127.0.0.1:9000 | ||||||
|  |   accessKeyId: root | ||||||
|  |   secretAccessKey: OIxv7QptYBO3 | ||||||
|  | consul: | ||||||
|  |   host: http://consul.hpds.cc | ||||||
|  |   port: 80 | ||||||
|  |   interval: 300 | ||||||
|  |   timeout: 5 | ||||||
|  |   deregister: 1 | ||||||
|  | db: | ||||||
|  |   conn: root:OIxv7QptYBO3@tcp(114.55.236.153:23306)/diagnostic_platform?charset=utf8mb4 | ||||||
|  |   drive_name: mysql | ||||||
|  | cache: | ||||||
|  |   host: 127.0.0.1 | ||||||
|  |   port: 6379 | ||||||
|  |   db: 0 | ||||||
|  |   pool_size: 10 | ||||||
|  | functions: | ||||||
|  |   - name: web-sf | ||||||
|  | @ -1,7 +1,6 @@ | ||||||
| package config | package config | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"bytes" |  | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"github.com/spf13/viper" | 	"github.com/spf13/viper" | ||||||
| 	"os" | 	"os" | ||||||
|  | @ -22,6 +21,8 @@ type WebConfig struct { | ||||||
| 	Logging  LogOptions     `yaml:"logging"` | 	Logging  LogOptions     `yaml:"logging"` | ||||||
| 	Minio    MinioConfig    `yaml:"minio"` | 	Minio    MinioConfig    `yaml:"minio"` | ||||||
| 	MineData MineDataConfig `yaml:"mineData"` | 	MineData MineDataConfig `yaml:"mineData"` | ||||||
|  | 	Node     HpdsNode       `yaml:"node,omitempty"` | ||||||
|  | 	Funcs    []FuncConfig   `yaml:"functions,omitempty"` | ||||||
| } | } | ||||||
| type ConsulConfig struct { | type ConsulConfig struct { | ||||||
| 	Host       string   `yaml:"host,omitempty"` | 	Host       string   `yaml:"host,omitempty"` | ||||||
|  | @ -69,6 +70,18 @@ type MineDataConfig struct { | ||||||
| 	AccessKey string `yaml:"accessKey"` | 	AccessKey string `yaml:"accessKey"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | type HpdsNode struct { | ||||||
|  | 	Host  string `yaml:"host"` | ||||||
|  | 	Port  int    `yaml:"port"` | ||||||
|  | 	Token string `yaml:"token,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type FuncConfig struct { | ||||||
|  | 	Name    string `yaml:"name"` | ||||||
|  | 	DataTag uint8  `yaml:"dataTag"` | ||||||
|  | 	MqType  uint   `yaml:"mqType"` //消息类型, 发布,1;订阅;2
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func ParseConfigByFile(path string) (cfg *WebConfig, err error) { | func ParseConfigByFile(path string) (cfg *WebConfig, err error) { | ||||||
| 	buffer, err := os.ReadFile(path) | 	buffer, err := os.ReadFile(path) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -81,11 +94,13 @@ func load(buf []byte) (cfg *WebConfig, err error) { | ||||||
| 	cViper := viper.New() | 	cViper := viper.New() | ||||||
| 	cViper.SetConfigType("yaml") | 	cViper.SetConfigType("yaml") | ||||||
| 	cfg = new(WebConfig) | 	cfg = new(WebConfig) | ||||||
| 	cViper.ReadConfig(bytes.NewBuffer(buf)) | 	cfg.Funcs = make([]FuncConfig, 0) | ||||||
| 	err = cViper.Unmarshal(cfg) | 	//cViper.ReadConfig(bytes.NewBuffer(buf))
 | ||||||
| 	if err != nil { | 	err = yaml.Unmarshal(buf, cfg) | ||||||
| 		return nil, err | 	//err = cViper.Unmarshal(cfg)
 | ||||||
| 	} | 	//if err != nil {
 | ||||||
|  | 	//	return nil, err
 | ||||||
|  | 	//}
 | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -34,5 +34,11 @@ cache: | ||||||
|   port: 6379 |   port: 6379 | ||||||
|   db: 0 |   db: 0 | ||||||
|   pool_size: 10 |   pool_size: 10 | ||||||
|  | node: | ||||||
|  |   host: 127.0.0.1 | ||||||
|  |   port: 27188 | ||||||
|  |   token: 06d36c6f5705507dae778fdce90d0767 | ||||||
| functions: | functions: | ||||||
|   - name: web-sf |   - name: task-request | ||||||
|  |     dataTag : 12 | ||||||
|  |     mqType: 1 | ||||||
							
								
								
									
										15
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										15
									
								
								go.mod
								
								
								
								
							|  | @ -5,6 +5,7 @@ go 1.18 | ||||||
| require ( | require ( | ||||||
| 	git.hpds.cc/Component/gin_valid v0.0.0-20230104142509-f956bce255b6 | 	git.hpds.cc/Component/gin_valid v0.0.0-20230104142509-f956bce255b6 | ||||||
| 	git.hpds.cc/Component/logging v0.0.0-20230106105738-e378e873921b | 	git.hpds.cc/Component/logging v0.0.0-20230106105738-e378e873921b | ||||||
|  | 	git.hpds.cc/pavement/hpds_node v0.0.0-20230307094826-753c4fe9c877 | ||||||
| 	github.com/dgrijalva/jwt-go v3.2.0+incompatible | 	github.com/dgrijalva/jwt-go v3.2.0+incompatible | ||||||
| 	github.com/gin-contrib/zap v0.1.0 | 	github.com/gin-contrib/zap v0.1.0 | ||||||
| 	github.com/gin-gonic/gin v1.8.2 | 	github.com/gin-gonic/gin v1.8.2 | ||||||
|  | @ -25,6 +26,8 @@ require ( | ||||||
| 	cloud.google.com/go/compute v1.12.1 // indirect | 	cloud.google.com/go/compute v1.12.1 // indirect | ||||||
| 	cloud.google.com/go/compute/metadata v0.2.1 // indirect | 	cloud.google.com/go/compute/metadata v0.2.1 // indirect | ||||||
| 	cloud.google.com/go/firestore v1.8.0 // indirect | 	cloud.google.com/go/firestore v1.8.0 // indirect | ||||||
|  | 	git.hpds.cc/Component/mq_coder v0.0.0-20221010064749-174ae7ae3340 // indirect | ||||||
|  | 	git.hpds.cc/Component/network v0.0.0-20221012021659-2433c68452d5 // indirect | ||||||
| 	github.com/armon/go-metrics v0.4.0 // indirect | 	github.com/armon/go-metrics v0.4.0 // indirect | ||||||
| 	github.com/coreos/go-semver v0.3.0 // indirect | 	github.com/coreos/go-semver v0.3.0 // indirect | ||||||
| 	github.com/coreos/go-systemd/v22 v22.3.2 // indirect | 	github.com/coreos/go-systemd/v22 v22.3.2 // indirect | ||||||
|  | @ -35,8 +38,10 @@ require ( | ||||||
| 	github.com/go-playground/locales v0.14.0 // indirect | 	github.com/go-playground/locales v0.14.0 // indirect | ||||||
| 	github.com/go-playground/universal-translator v0.18.0 // indirect | 	github.com/go-playground/universal-translator v0.18.0 // indirect | ||||||
| 	github.com/go-playground/validator/v10 v10.11.1 // indirect | 	github.com/go-playground/validator/v10 v10.11.1 // indirect | ||||||
|  | 	github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect | ||||||
| 	github.com/gogo/protobuf v1.3.2 // indirect | 	github.com/gogo/protobuf v1.3.2 // indirect | ||||||
| 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||||||
|  | 	github.com/golang/mock v1.6.0 // indirect | ||||||
| 	github.com/golang/protobuf v1.5.2 // indirect | 	github.com/golang/protobuf v1.5.2 // indirect | ||||||
| 	github.com/golang/snappy v0.0.4 // indirect | 	github.com/golang/snappy v0.0.4 // indirect | ||||||
| 	github.com/google/go-cmp v0.5.9 // indirect | 	github.com/google/go-cmp v0.5.9 // indirect | ||||||
|  | @ -55,7 +60,11 @@ require ( | ||||||
| 	github.com/klauspost/compress v1.15.9 // indirect | 	github.com/klauspost/compress v1.15.9 // indirect | ||||||
| 	github.com/klauspost/cpuid/v2 v2.1.0 // indirect | 	github.com/klauspost/cpuid/v2 v2.1.0 // indirect | ||||||
| 	github.com/leodido/go-urn v1.2.1 // indirect | 	github.com/leodido/go-urn v1.2.1 // indirect | ||||||
|  | 	github.com/lucas-clemente/quic-go v0.29.1 // indirect | ||||||
| 	github.com/magiconair/properties v1.8.6 // indirect | 	github.com/magiconair/properties v1.8.6 // indirect | ||||||
|  | 	github.com/marten-seemann/qtls-go1-18 v0.1.2 // indirect | ||||||
|  | 	github.com/marten-seemann/qtls-go1-19 v0.1.0 // indirect | ||||||
|  | 	github.com/matoous/go-nanoid/v2 v2.0.0 // indirect | ||||||
| 	github.com/mattn/go-colorable v0.1.12 // indirect | 	github.com/mattn/go-colorable v0.1.12 // indirect | ||||||
| 	github.com/mattn/go-isatty v0.0.16 // indirect | 	github.com/mattn/go-isatty v0.0.16 // indirect | ||||||
| 	github.com/minio/md5-simd v1.1.2 // indirect | 	github.com/minio/md5-simd v1.1.2 // indirect | ||||||
|  | @ -64,6 +73,8 @@ require ( | ||||||
| 	github.com/mitchellh/mapstructure v1.5.0 // indirect | 	github.com/mitchellh/mapstructure v1.5.0 // indirect | ||||||
| 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||||
| 	github.com/modern-go/reflect2 v1.0.2 // indirect | 	github.com/modern-go/reflect2 v1.0.2 // indirect | ||||||
|  | 	github.com/nxadm/tail v1.4.8 // indirect | ||||||
|  | 	github.com/onsi/ginkgo v1.16.4 // indirect | ||||||
| 	github.com/pelletier/go-toml v1.9.5 // indirect | 	github.com/pelletier/go-toml v1.9.5 // indirect | ||||||
| 	github.com/pelletier/go-toml/v2 v2.0.6 // indirect | 	github.com/pelletier/go-toml/v2 v2.0.6 // indirect | ||||||
| 	github.com/pkg/errors v0.9.1 // indirect | 	github.com/pkg/errors v0.9.1 // indirect | ||||||
|  | @ -87,12 +98,15 @@ require ( | ||||||
| 	go.uber.org/atomic v1.9.0 // indirect | 	go.uber.org/atomic v1.9.0 // indirect | ||||||
| 	go.uber.org/multierr v1.8.0 // indirect | 	go.uber.org/multierr v1.8.0 // indirect | ||||||
| 	golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect | 	golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect | ||||||
|  | 	golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect | ||||||
|  | 	golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect | ||||||
| 	golang.org/x/net v0.4.0 // indirect | 	golang.org/x/net v0.4.0 // indirect | ||||||
| 	golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect | 	golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect | ||||||
| 	golang.org/x/sync v0.1.0 // indirect | 	golang.org/x/sync v0.1.0 // indirect | ||||||
| 	golang.org/x/sys v0.3.0 // indirect | 	golang.org/x/sys v0.3.0 // indirect | ||||||
| 	golang.org/x/text v0.5.0 // indirect | 	golang.org/x/text v0.5.0 // indirect | ||||||
| 	golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect | 	golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect | ||||||
|  | 	golang.org/x/tools v0.1.12 // indirect | ||||||
| 	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect | 	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect | ||||||
| 	google.golang.org/api v0.102.0 // indirect | 	google.golang.org/api v0.102.0 // indirect | ||||||
| 	google.golang.org/appengine v1.6.7 // indirect | 	google.golang.org/appengine v1.6.7 // indirect | ||||||
|  | @ -101,6 +115,7 @@ require ( | ||||||
| 	google.golang.org/protobuf v1.28.1 // indirect | 	google.golang.org/protobuf v1.28.1 // indirect | ||||||
| 	gopkg.in/ini.v1 v1.67.0 // indirect | 	gopkg.in/ini.v1 v1.67.0 // indirect | ||||||
| 	gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect | 	gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect | ||||||
|  | 	gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect | 	xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -9,6 +9,30 @@ import ( | ||||||
| 	e "hpds-iot-web/pkg/err" | 	e "hpds-iot-web/pkg/err" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | func (s HandlerService) DiseaseList(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewDiseaseService(s.AppConfig, s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.DiseaseRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("DiseaseList", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	if req.Size < 1 { | ||||||
|  | 		req.Size = 20 | ||||||
|  | 	} | ||||||
|  | 	if req.Size > 1000 { | ||||||
|  | 		req.Size = 1000 | ||||||
|  | 	} | ||||||
|  | 	if req.Page < 1 { | ||||||
|  | 		req.Page = 1 | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.DiseaseList(c, req) | ||||||
|  | 	go s.SaveLog("获取病害库列表", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (s HandlerService) DiseaseTypeList(c *gin.Context) (data interface{}, err error) { | func (s HandlerService) DiseaseTypeList(c *gin.Context) (data interface{}, err error) { | ||||||
| 	repo := service.NewDiseaseService(s.AppConfig, s.Engine, s.Logger) | 	repo := service.NewDiseaseService(s.AppConfig, s.Engine, s.Logger) | ||||||
| 	us, _ := c.Get("operatorUser") | 	us, _ := c.Get("operatorUser") | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func (s HandlerService) ModelList(c *gin.Context) (data interface{}, err error) { | func (s HandlerService) ModelList(c *gin.Context) (data interface{}, err error) { | ||||||
| 	repo := service.NewModelService(s.Engine, s.Logger) | 	repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger) | ||||||
| 	us, _ := c.Get("operatorUser") | 	us, _ := c.Get("operatorUser") | ||||||
| 	userInfo := us.(*model.SystemUser) | 	userInfo := us.(*model.SystemUser) | ||||||
| 	var req proto.ModelRequest | 	var req proto.ModelRequest | ||||||
|  | @ -33,7 +33,7 @@ func (s HandlerService) ModelList(c *gin.Context) (data interface{}, err error) | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| func (s HandlerService) AddModel(c *gin.Context) (data interface{}, err error) { | func (s HandlerService) AddModel(c *gin.Context) (data interface{}, err error) { | ||||||
| 	repo := service.NewModelService(s.Engine, s.Logger) | 	repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger) | ||||||
| 	us, _ := c.Get("operatorUser") | 	us, _ := c.Get("operatorUser") | ||||||
| 	userInfo := us.(*model.SystemUser) | 	userInfo := us.(*model.SystemUser) | ||||||
| 	var req proto.ModelItemRequest | 	var req proto.ModelItemRequest | ||||||
|  | @ -47,7 +47,7 @@ func (s HandlerService) AddModel(c *gin.Context) (data interface{}, err error) { | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| func (s HandlerService) EditModel(c *gin.Context) (data interface{}, err error) { | func (s HandlerService) EditModel(c *gin.Context) (data interface{}, err error) { | ||||||
| 	repo := service.NewModelService(s.Engine, s.Logger) | 	repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger) | ||||||
| 	us, _ := c.Get("operatorUser") | 	us, _ := c.Get("operatorUser") | ||||||
| 	userInfo := us.(*model.SystemUser) | 	userInfo := us.(*model.SystemUser) | ||||||
| 	var req proto.ModelItemRequest | 	var req proto.ModelItemRequest | ||||||
|  | @ -61,7 +61,7 @@ func (s HandlerService) EditModel(c *gin.Context) (data interface{}, err error) | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| func (s HandlerService) DelModel(c *gin.Context) (data interface{}, err error) { | func (s HandlerService) DelModel(c *gin.Context) (data interface{}, err error) { | ||||||
| 	repo := service.NewModelService(s.Engine, s.Logger) | 	repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger) | ||||||
| 	us, _ := c.Get("operatorUser") | 	us, _ := c.Get("operatorUser") | ||||||
| 	userInfo := us.(*model.SystemUser) | 	userInfo := us.(*model.SystemUser) | ||||||
| 	var req proto.ModelItemRequest | 	var req proto.ModelItemRequest | ||||||
|  | @ -74,3 +74,32 @@ func (s HandlerService) DelModel(c *gin.Context) (data interface{}, err error) { | ||||||
| 	go s.SaveLog("删除模型", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | 	go s.SaveLog("删除模型", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (s HandlerService) ModelIssue(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.ModelIssueRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("ModelIssue", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.ModelIssue(c, req) | ||||||
|  | 	go s.SaveLog("模型下发", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | func (s HandlerService) GetModelWorkflow(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewModelService(s.AppConfig, s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.ModelItemRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("ModelIssue", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.GetModelWorkflow(c, req) | ||||||
|  | 	go s.SaveLog("获取模型工作流", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -92,3 +92,87 @@ func (s HandlerService) DeleteBrand(c *gin.Context) (data interface{}, err error | ||||||
| 	go s.SaveLog("删除品牌", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | 	go s.SaveLog("删除品牌", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (s HandlerService) NodeList(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewSystemService(s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.NodeRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("NodeList", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	if req.Size < 1 { | ||||||
|  | 		req.Size = 20 | ||||||
|  | 	} | ||||||
|  | 	if req.Size > 100 { | ||||||
|  | 		req.Size = 100 | ||||||
|  | 	} | ||||||
|  | 	if req.Page < 1 { | ||||||
|  | 		req.Page = 1 | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.NodeList(c, req) | ||||||
|  | 	go s.SaveLog("获取节点列表", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s HandlerService) NodeInfo(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewSystemService(s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.NodeItemRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("NodeInfo", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.NodeInfo(c, req) | ||||||
|  | 	go s.SaveLog("获取节点信息", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s HandlerService) EditNode(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewSystemService(s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.NodeItemRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("EditNode", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.EditNode(c, req) | ||||||
|  | 	go s.SaveLog("修改节点", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s HandlerService) NodeState(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewSystemService(s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.NodeInfoRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("NodeState", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.NodeState(c, req) | ||||||
|  | 	go s.SaveLog("获取节点运行信息", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s HandlerService) NodeLastState(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewSystemService(s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.NodeInfoRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("NodeLastState", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.NodeLastState(c, req) | ||||||
|  | 	go s.SaveLog("获取节点最后运行信息", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,40 @@ | ||||||
|  | package handler | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/gin-gonic/gin" | ||||||
|  | 	"hpds-iot-web/internal/proto" | ||||||
|  | 	"hpds-iot-web/internal/service" | ||||||
|  | 	"hpds-iot-web/model" | ||||||
|  | 	e "hpds-iot-web/pkg/err" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func (s HandlerService) TaskList(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewTaskService(s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.TaskRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("TaskList", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.TaskList(c, req) | ||||||
|  | 	go s.SaveLog("任务列表", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s HandlerService) AddTask(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewTaskService(s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.TaskItemRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("AddTask", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.AddTask(c, req) | ||||||
|  | 	go s.SaveLog("新增任务", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| package handler | package handler | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
| 	"github.com/gin-gonic/gin" | 	"github.com/gin-gonic/gin" | ||||||
| 	"hpds-iot-web/internal/proto" | 	"hpds-iot-web/internal/proto" | ||||||
| 	"hpds-iot-web/internal/service" | 	"hpds-iot-web/internal/service" | ||||||
|  | @ -28,6 +29,21 @@ func (s HandlerService) GetUserInfo(c *gin.Context) (data interface{}, err error | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (s HandlerService) GetUserList(c *gin.Context) (data interface{}, err error) { | ||||||
|  | 	repo := service.NewUserService(s.Engine, s.Logger) | ||||||
|  | 	us, _ := c.Get("operatorUser") | ||||||
|  | 	userInfo := us.(*model.SystemUser) | ||||||
|  | 	var req proto.UserRequest | ||||||
|  | 	err = c.ShouldBindJSON(&req) | ||||||
|  | 	if err != nil { | ||||||
|  | 		go s.SaveLog("GetUserList", "Manage", "", "", req.ToString(), fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 		return nil, e.NewValidErr(err) | ||||||
|  | 	} | ||||||
|  | 	data, err = repo.GetUserList(c, req) | ||||||
|  | 	go s.SaveLog("获取用户列表", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (s HandlerService) MenuList(c *gin.Context) (data interface{}, err error) { | func (s HandlerService) MenuList(c *gin.Context) (data interface{}, err error) { | ||||||
| 	repo := service.NewUserService(s.Engine, s.Logger) | 	repo := service.NewUserService(s.Engine, s.Logger) | ||||||
| 	us, _ := c.Get("operatorUser") | 	us, _ := c.Get("operatorUser") | ||||||
|  |  | ||||||
|  | @ -23,6 +23,20 @@ func (us UserLogin) ToString() string { | ||||||
| 	return string(data) | 	return string(data) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | type UserRequest struct { | ||||||
|  | 	RealName string `json:"realName"` | ||||||
|  | 	Phone    string `json:"phone"` | ||||||
|  | 	BasePageList | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (us UserRequest) ToString() string { | ||||||
|  | 	data, err := json.Marshal(us) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(data) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| type OwnerRequest struct { | type OwnerRequest struct { | ||||||
| 	OwnerName string `json:"ownerName"` | 	OwnerName string `json:"ownerName"` | ||||||
| 	BasePageList | 	BasePageList | ||||||
|  | @ -301,7 +315,8 @@ func (p ServiceParamItem) ToString() string { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type ModelRequest struct { | type ModelRequest struct { | ||||||
| 	ModelName string `json:"modelName"` | 	ModelName string `json:"modelName,omitempty"` | ||||||
|  | 	BizType   int    `json:"bizType,omitempty"` | ||||||
| 	BasePageList | 	BasePageList | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -314,13 +329,22 @@ func (p ModelRequest) ToString() string { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type ModelItemRequest struct { | type ModelItemRequest struct { | ||||||
| 	ModelId          int    `json:"modelId"` | 	ModelId          int64    `json:"modelId"` | ||||||
|  | 	BizType          int      `json:"bizType"` | ||||||
| 	ModelName        string   `json:"modelName"` | 	ModelName        string   `json:"modelName"` | ||||||
| 	ModelVersion     string   `json:"modelVersion"` | 	ModelVersion     string   `json:"modelVersion"` | ||||||
| 	ModelDesc        string   `json:"modelDesc"` | 	ModelDesc        string   `json:"modelDesc"` | ||||||
| 	ModelFiles       string   `json:"modelFiles"` | 	ModelFiles       string   `json:"modelFiles"` | ||||||
| 	ModelParamsFiles string   `json:"modelParamsFiles"` | 	ModelParamsFiles string   `json:"modelParamsFiles"` | ||||||
| 	ModelExecScript  string   `json:"modelExecScript"` | 	ModelExecScript  string   `json:"modelExecScript"` | ||||||
|  | 	DockerFile       []string `json:"dockerFile"` | ||||||
|  | 	MappedPort       int      `json:"mappedPort"` | ||||||
|  | 	ModelCommand     string   `json:"modelCommand"` | ||||||
|  | 	InPath           string   `json:"inPath"` | ||||||
|  | 	OutPath          string   `json:"outPath"` | ||||||
|  | 	HttpUrl          string   `json:"httpUrl"` | ||||||
|  | 	IsLightWeight    bool     `json:"isLightWeight"` | ||||||
|  | 	Workflow         string   `json:"workflow"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (p ModelItemRequest) ToString() string { | func (p ModelItemRequest) ToString() string { | ||||||
|  | @ -331,6 +355,19 @@ func (p ModelItemRequest) ToString() string { | ||||||
| 	return string(data) | 	return string(data) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | type ModelIssueRequest struct { | ||||||
|  | 	NodeId  int64 `json:"nodeId"` | ||||||
|  | 	ModelId int64 `json:"modelId"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p ModelIssueRequest) ToString() string { | ||||||
|  | 	data, err := json.Marshal(p) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(data) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| type DeviceRequest struct { | type DeviceRequest struct { | ||||||
| 	Key          string `json:"key"` | 	Key          string `json:"key"` | ||||||
| 	ProductId    int64  `json:"productId"` | 	ProductId    int64  `json:"productId"` | ||||||
|  | @ -404,6 +441,20 @@ func (p BrandItemRequest) ToString() string { | ||||||
| 	return string(data) | 	return string(data) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | type DiseaseRequest struct { | ||||||
|  | 	BizType int    `json:"bizType"` | ||||||
|  | 	Key     string `json:"key"` | ||||||
|  | 	BasePageList | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p DiseaseRequest) ToString() string { | ||||||
|  | 	data, err := json.Marshal(p) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(data) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| type DiseaseTypeRequest struct { | type DiseaseTypeRequest struct { | ||||||
| 	CategoryId int    `json:"categoryId"` | 	CategoryId int    `json:"categoryId"` | ||||||
| 	Key        string `json:"key"` | 	Key        string `json:"key"` | ||||||
|  | @ -467,6 +518,7 @@ type ImportDatasetRequest struct { | ||||||
| 	DatasetName string `json:"datasetName"` | 	DatasetName string `json:"datasetName"` | ||||||
| 	DatasetDesc string `json:"datasetDesc"` | 	DatasetDesc string `json:"datasetDesc"` | ||||||
| 	ProjectId   int64  `json:"projectId"` | 	ProjectId   int64  `json:"projectId"` | ||||||
|  | 	StoreName   string `json:"storeName"` | ||||||
| 	OwnerId     int64  `json:"ownerId"` | 	OwnerId     int64  `json:"ownerId"` | ||||||
| 	Creator     int64  `json:"creator"` | 	Creator     int64  `json:"creator"` | ||||||
| } | } | ||||||
|  | @ -478,3 +530,111 @@ func (p ImportDatasetRequest) ToString() string { | ||||||
| 	} | 	} | ||||||
| 	return string(data) | 	return string(data) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | type NodeRequest struct { | ||||||
|  | 	NodeId          int64  `json:"nodeId"` | ||||||
|  | 	NodeName        string `json:"nodeName"` | ||||||
|  | 	NodeGuid        string `json:"nodeGuid"` | ||||||
|  | 	NodeType        int    `json:"nodeType"` | ||||||
|  | 	Platform        string `json:"platform"` | ||||||
|  | 	PlatformVersion string `json:"platformVersion"` | ||||||
|  | 	CPU             string `json:"cpu"` | ||||||
|  | 	MemTotal        uint64 `json:"memTotal"` | ||||||
|  | 	DiskTotal       uint64 `json:"diskTotal"` | ||||||
|  | 	SwapTotal       uint64 `json:"swapTotal"` | ||||||
|  | 	Arch            string `json:"arch"` | ||||||
|  | 	Virtualization  string `json:"virtualization"` | ||||||
|  | 	BootTime        uint64 `json:"bootTime"` | ||||||
|  | 	IP              string `json:"ip"` | ||||||
|  | 	CountryCode     string `json:"countryCode"` | ||||||
|  | 	Version         string `json:"version"` | ||||||
|  | 	CreateAt        int64  `json:"createAt"` | ||||||
|  | 	UpdateAt        int64  `json:"updateAt"` | ||||||
|  | 	BasePageList | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p NodeRequest) ToString() string { | ||||||
|  | 	data, err := json.Marshal(p) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(data) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type NodeItemRequest struct { | ||||||
|  | 	NodeId          int64  `json:"nodeId"` | ||||||
|  | 	NodeName        string `json:"nodeName"` | ||||||
|  | 	NodeGuid        string `json:"nodeGuid"` | ||||||
|  | 	NodeType        int    `json:"nodeType"` | ||||||
|  | 	Platform        string `json:"platform"` | ||||||
|  | 	PlatformVersion string `json:"platformVersion"` | ||||||
|  | 	CPU             string `json:"cpu"` | ||||||
|  | 	MemTotal        uint64 `json:"memTotal"` | ||||||
|  | 	DiskTotal       uint64 `json:"diskTotal"` | ||||||
|  | 	SwapTotal       uint64 `json:"swapTotal"` | ||||||
|  | 	Arch            string `json:"arch"` | ||||||
|  | 	Virtualization  string `json:"virtualization"` | ||||||
|  | 	BootTime        uint64 `json:"bootTime"` | ||||||
|  | 	IP              string `json:"ip"` | ||||||
|  | 	CountryCode     string `json:"countryCode"` | ||||||
|  | 	Version         string `json:"version"` | ||||||
|  | 	CreateAt        int64  `json:"createAt"` | ||||||
|  | 	UpdateAt        int64  `json:"updateAt"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p NodeItemRequest) ToString() string { | ||||||
|  | 	data, err := json.Marshal(p) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(data) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type NodeInfoRequest struct { | ||||||
|  | 	NodeGuid string `json:"nodeGuid"` | ||||||
|  | 	Uptime   int64  `json:"uptime"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p NodeInfoRequest) ToString() string { | ||||||
|  | 	data, err := json.Marshal(p) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(data) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type TaskRequest struct { | ||||||
|  | 	BizType    int    `json:"bizType"` | ||||||
|  | 	TaskName   string `json:"taskName"` | ||||||
|  | 	StartTime  string `json:"startTime"` | ||||||
|  | 	FinishTime string `json:"finishTime"` | ||||||
|  | 	BasePageList | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p TaskRequest) ToString() string { | ||||||
|  | 	data, err := json.Marshal(p) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(data) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type TaskItemRequest struct { | ||||||
|  | 	TaskId          int64  `json:"taskId"` | ||||||
|  | 	ModelId         int64  `json:"modelId"` | ||||||
|  | 	NodeId          int64  `json:"nodeId"` | ||||||
|  | 	TaskName        string `json:"taskName"` | ||||||
|  | 	TaskDesc        string `json:"taskDesc"` | ||||||
|  | 	DatasetArr      int64  `json:"datasetArr"` | ||||||
|  | 	SubDataset      string `json:"subDataset"` | ||||||
|  | 	SubDataTag      int    `json:"subDataTag"` | ||||||
|  | 	AppointmentTime string `json:"appointmentTime"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (p TaskItemRequest) ToString() string { | ||||||
|  | 	data, err := json.Marshal(p) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return string(data) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,7 @@ | ||||||
| package proto | package proto | ||||||
| 
 | 
 | ||||||
|  | import "hpds-iot-web/model" | ||||||
|  | 
 | ||||||
| // BaseResponse 基础返回结构
 | // BaseResponse 基础返回结构
 | ||||||
| type BaseResponse struct { | type BaseResponse struct { | ||||||
| 	Code    int         `json:"code"` | 	Code    int         `json:"code"` | ||||||
|  | @ -56,6 +58,7 @@ type DatasetItem struct { | ||||||
| 	DatasetId    int64  `json:"datasetId"` | 	DatasetId    int64  `json:"datasetId"` | ||||||
| 	DatasetName  string `json:"datasetName"` | 	DatasetName  string `json:"datasetName"` | ||||||
| 	DatasetDesc  string `json:"datasetDesc"` | 	DatasetDesc  string `json:"datasetDesc"` | ||||||
|  | 	StoreName    string `json:"storeName"` | ||||||
| 	CategoryId   int    `json:"categoryId"` | 	CategoryId   int    `json:"categoryId"` | ||||||
| 	ProjectId    int64  `json:"projectId"` | 	ProjectId    int64  `json:"projectId"` | ||||||
| 	OwnerId      int64  `json:"ownerId"` | 	OwnerId      int64  `json:"ownerId"` | ||||||
|  | @ -63,3 +66,57 @@ type DatasetItem struct { | ||||||
| 	CreateAt     int64  `json:"createAt"` | 	CreateAt     int64  `json:"createAt"` | ||||||
| 	DatasetCount int64  `json:"datasetCount"` | 	DatasetCount int64  `json:"datasetCount"` | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | type NodeState struct { | ||||||
|  | 	List []model.NodeState `json:"list"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type NodeLastState struct { | ||||||
|  | 	List []NodeLastStateItem `json:"list"` | ||||||
|  | } | ||||||
|  | type NodeLastStateItem struct { | ||||||
|  | 	NodeId          int64   `json:"nodeId"` | ||||||
|  | 	NodeGuid        string  `json:"nodeGuid"` | ||||||
|  | 	NodeName        string  `json:"nodeName"` | ||||||
|  | 	NodeType        int     `json:"nodeType"` | ||||||
|  | 	NodeStatus      int     `json:"nodeStatus"` | ||||||
|  | 	Platform        string  `json:"platform"` | ||||||
|  | 	PlatformVersion string  `json:"platformVersion"` | ||||||
|  | 	CPU             string  `json:"CPU"` | ||||||
|  | 	MemTotal        uint64  `json:"memTotal"` | ||||||
|  | 	DiskTotal       uint64  `json:"diskTotal"` | ||||||
|  | 	SwapTotal       uint64  `json:"swapTotal"` | ||||||
|  | 	CpuUsed         float64 `json:"cpuUsed"` | ||||||
|  | 	MemUsed         uint64  `json:"memUsed"` | ||||||
|  | 	SwapUsed        uint64  `json:"swapUsed"` | ||||||
|  | 	DiskUsed        uint64  `json:"diskUsed"` | ||||||
|  | 	NetInTransfer   uint64  `json:"netInTransfer"` | ||||||
|  | 	NetOutTransfer  uint64  `json:"netOutTransfer"` | ||||||
|  | 	NetInSpeed      uint64  `json:"netInSpeed"` | ||||||
|  | 	NetOutSpeed     uint64  `json:"netOutSpeed"` | ||||||
|  | 	Load1           float64 `json:"load1"` | ||||||
|  | 	Load5           float64 `json:"load5"` | ||||||
|  | 	Load15          float64 `json:"load15"` | ||||||
|  | 	TcpConnCount    uint64  `json:"tcpConnCount"` | ||||||
|  | 	UdpConnCount    uint64  `json:"udpConnCount"` | ||||||
|  | 	ProcessCount    uint64  `json:"processCount"` | ||||||
|  | 	ExecTask        string  `json:"execTask"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type TaskDetail struct { | ||||||
|  | 	TaskId          int64  `json:"taskId"` | ||||||
|  | 	ModelId         int64  `json:"modelId"` | ||||||
|  | 	ModelName       string `json:"modelName"` | ||||||
|  | 	NodeId          int64  `json:"nodeId"` | ||||||
|  | 	NodeName        string `json:"nodeName"` | ||||||
|  | 	TaskName        string `json:"taskName"` | ||||||
|  | 	TaskDesc        string `json:"taskDesc"` | ||||||
|  | 	DatasetArr      string `json:"datasetArr"` | ||||||
|  | 	ResultStorage   string `json:"resultStorage"` | ||||||
|  | 	AppointmentTime string `json:"appointmentTime"` | ||||||
|  | 	StartTime       int64  `json:"startTime"` | ||||||
|  | 	FinishTime      int64  `json:"finishTime"` | ||||||
|  | 	Status          int    `json:"status"` | ||||||
|  | 	CreateAt        int64  `xorm:"created" json:"createAt"` | ||||||
|  | 	UpdateAt        int64  `xorm:"updated" json:"updateAt"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -24,6 +24,7 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi | ||||||
| 		{ | 		{ | ||||||
| 			user.Use(middleware.JwtAuthMiddleware(logger.Logger)) | 			user.Use(middleware.JwtAuthMiddleware(logger.Logger)) | ||||||
| 			user.POST("/login", e.ErrorWrapper(hs.Login)) | 			user.POST("/login", e.ErrorWrapper(hs.Login)) | ||||||
|  | 			user.POST("/list", e.ErrorWrapper(hs.GetUserList)) | ||||||
| 			user.GET("/getUserInfo", e.ErrorWrapper(hs.GetUserInfo)) | 			user.GET("/getUserInfo", e.ErrorWrapper(hs.GetUserInfo)) | ||||||
| 
 | 
 | ||||||
| 			menu := user.Group("/menu") | 			menu := user.Group("/menu") | ||||||
|  | @ -113,6 +114,10 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi | ||||||
| 					device.POST("/delete", e.ErrorWrapper(hs.DeleteDevice)) | 					device.POST("/delete", e.ErrorWrapper(hs.DeleteDevice)) | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | 			//detection := manage.Group("/detection")
 | ||||||
|  | 			//{
 | ||||||
|  | 			//
 | ||||||
|  | 			//}
 | ||||||
| 		} | 		} | ||||||
| 		model := r.Group("/model") | 		model := r.Group("/model") | ||||||
| 		{ | 		{ | ||||||
|  | @ -121,6 +126,8 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi | ||||||
| 			model.POST("/add", e.ErrorWrapper(hs.AddModel)) | 			model.POST("/add", e.ErrorWrapper(hs.AddModel)) | ||||||
| 			model.POST("/edit", e.ErrorWrapper(hs.EditModel)) | 			model.POST("/edit", e.ErrorWrapper(hs.EditModel)) | ||||||
| 			model.POST("/delete", e.ErrorWrapper(hs.DelModel)) | 			model.POST("/delete", e.ErrorWrapper(hs.DelModel)) | ||||||
|  | 			model.POST("/issue", e.ErrorWrapper(hs.ModelIssue)) | ||||||
|  | 			model.POST("/workflow", e.ErrorWrapper(hs.GetModelWorkflow)) | ||||||
| 		} | 		} | ||||||
| 		file := r.Group("/file") | 		file := r.Group("/file") | ||||||
| 		{ | 		{ | ||||||
|  | @ -138,10 +145,27 @@ func InitRouter(cfg *config.WebConfig, logger *logging.Logger, engine *xorm.Engi | ||||||
| 				brand.POST("/edit", e.ErrorWrapper(hs.EditBrand)) | 				brand.POST("/edit", e.ErrorWrapper(hs.EditBrand)) | ||||||
| 				brand.POST("/delete", e.ErrorWrapper(hs.DeleteBrand)) | 				brand.POST("/delete", e.ErrorWrapper(hs.DeleteBrand)) | ||||||
| 			} | 			} | ||||||
|  | 			node := system.Group("/node") | ||||||
|  | 			{ | ||||||
|  | 				node.POST("/list", e.ErrorWrapper(hs.NodeList)) | ||||||
|  | 				node.POST("/info", e.ErrorWrapper(hs.NodeInfo)) | ||||||
|  | 				node.POST("/edit", e.ErrorWrapper(hs.EditNode)) | ||||||
|  | 
 | ||||||
|  | 				node.POST("/state", e.ErrorWrapper(hs.NodeState)) | ||||||
|  | 				node.POST("/last", e.ErrorWrapper(hs.NodeLastState)) | ||||||
|  | 
 | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		task := r.Group("/task") | ||||||
|  | 		{ | ||||||
|  | 			task.Use(middleware.JwtAuthMiddleware(logger.Logger)) | ||||||
|  | 			task.POST("/list", e.ErrorWrapper(hs.TaskList)) | ||||||
|  | 			task.POST("/add", e.ErrorWrapper(hs.AddTask)) | ||||||
| 		} | 		} | ||||||
| 		disease := r.Group("/disease") | 		disease := r.Group("/disease") | ||||||
| 		{ | 		{ | ||||||
| 			disease.Use(middleware.JwtAuthMiddleware(logger.Logger)) | 			disease.Use(middleware.JwtAuthMiddleware(logger.Logger)) | ||||||
|  | 			disease.POST("/list", e.ErrorWrapper(hs.DiseaseList)) | ||||||
| 			diseaseType := disease.Group("/type") | 			diseaseType := disease.Group("/type") | ||||||
| 			{ | 			{ | ||||||
| 				diseaseType.POST("/list", e.ErrorWrapper(hs.DiseaseTypeList)) | 				diseaseType.POST("/list", e.ErrorWrapper(hs.DiseaseTypeList)) | ||||||
|  |  | ||||||
|  | @ -106,6 +106,7 @@ func (rp *repo) DatasetList(ctx context.Context, req proto.DatasetRequest) (rsp | ||||||
| 				DatasetId:    v.DatasetId, | 				DatasetId:    v.DatasetId, | ||||||
| 				DatasetName:  v.DatasetName, | 				DatasetName:  v.DatasetName, | ||||||
| 				DatasetDesc:  v.DatasetDesc, | 				DatasetDesc:  v.DatasetDesc, | ||||||
|  | 				StoreName:    v.StoreName, | ||||||
| 				CategoryId:   v.CategoryId, | 				CategoryId:   v.CategoryId, | ||||||
| 				ProjectId:    v.ProjectId, | 				ProjectId:    v.ProjectId, | ||||||
| 				OwnerId:      v.OwnerId, | 				OwnerId:      v.OwnerId, | ||||||
|  | @ -148,6 +149,7 @@ func (rp *repo) ImportDataset(ctx context.Context, req proto.ImportDatasetReques | ||||||
| 			CategoryId:  req.CategoryId, | 			CategoryId:  req.CategoryId, | ||||||
| 			ProjectId:   req.ProjectId, | 			ProjectId:   req.ProjectId, | ||||||
| 			OwnerId:     req.OwnerId, | 			OwnerId:     req.OwnerId, | ||||||
|  | 			StoreName:   req.StoreName, | ||||||
| 			Creator:     req.Creator, | 			Creator:     req.Creator, | ||||||
| 			Status:      1, | 			Status:      1, | ||||||
| 			CreateAt:    time.Now().Unix(), | 			CreateAt:    time.Now().Unix(), | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type DiseaseService interface { | type DiseaseService interface { | ||||||
|  | 	DiseaseList(ctx context.Context, req proto.DiseaseRequest) (rsp *proto.BaseResponse, err error) | ||||||
| 	DiseaseTypeList(ctx context.Context, req proto.DiseaseTypeRequest) (rsp *proto.BaseResponse, err error) | 	DiseaseTypeList(ctx context.Context, req proto.DiseaseTypeRequest) (rsp *proto.BaseResponse, err error) | ||||||
| 	AddDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error) | 	AddDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
| 	EditDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error) | 	EditDiseaseType(ctx context.Context, req proto.DiseaseTypeItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | @ -27,6 +28,42 @@ func NewDiseaseService(cfg *config.WebConfig, engine *xorm.Engine, logger *loggi | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (rp *repo) DiseaseList(ctx context.Context, req proto.DiseaseRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		data := make([]model.Disease, 0) | ||||||
|  | 		count, err := rp.engine.Where("(? = '' or disease_name like ?)", req.Key, "%"+req.Key+"%"). | ||||||
|  | 			And("(? = 0 or category_id = ?)", req.BizType, req.BizType). | ||||||
|  | 			Limit(int(req.Size), int(((req.Page)-1)*req.Size)). | ||||||
|  | 			FindAndCount(&data) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "成功" | ||||||
|  | 		rsp = FillPaging(count, req.Page, req.Size, data, rsp) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (rp *repo) DiseaseTypeList(ctx context.Context, req proto.DiseaseTypeRequest) (rsp *proto.BaseResponse, err error) { | func (rp *repo) DiseaseTypeList(ctx context.Context, req proto.DiseaseTypeRequest) (rsp *proto.BaseResponse, err error) { | ||||||
| 	rsp = new(proto.BaseResponse) | 	rsp = new(proto.BaseResponse) | ||||||
| 	select { | 	select { | ||||||
|  |  | ||||||
|  | @ -21,13 +21,14 @@ type PagingStruct struct { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // FillPaging 填充分页数据
 | // FillPaging 填充分页数据
 | ||||||
| func FillPaging(count int64, pageNum int64, pageSize int64, list interface{}, data *proto.BaseResponse) *proto.BaseResponse { | func FillPaging(count, pageNum, pageSize int64, list interface{}, data *proto.BaseResponse) *proto.BaseResponse { | ||||||
| 	//var tp int64
 | 	//var tp int64
 | ||||||
| 	//if count%pageSize > 0 {
 | 	//if count%pageSize > 0 {
 | ||||||
| 	//	tp = count/pageSize + 1
 | 	//	tp = count/pageSize + 1
 | ||||||
| 	//} else {
 | 	//} else {
 | ||||||
| 	//	tp = count / pageSize
 | 	//	tp = count / pageSize
 | ||||||
| 	//}
 | 	//}
 | ||||||
|  | 	_ = fmt.Sprintf("%d, %d", pageNum, pageSize) | ||||||
| 	ps := new(PagingStruct) | 	ps := new(PagingStruct) | ||||||
| 	ps.List = list | 	ps.List = list | ||||||
| 	ps.Total = count | 	ps.Total = count | ||||||
|  | @ -50,6 +51,7 @@ type UserService interface { | ||||||
| 	Login(ctx context.Context, userName, pass string) (rsp *proto.BaseResponse, err error) | 	Login(ctx context.Context, userName, pass string) (rsp *proto.BaseResponse, err error) | ||||||
| 	GetUserInfo(ctx context.Context, userId int64) (rsp *proto.BaseResponse, err error) | 	GetUserInfo(ctx context.Context, userId int64) (rsp *proto.BaseResponse, err error) | ||||||
| 	MenuList(ctx context.Context, userId int64) (rsp *proto.BaseResponse, err error) | 	MenuList(ctx context.Context, userId int64) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	GetUserList(ctx context.Context, req proto.UserRequest) (rsp *proto.BaseResponse, err error) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func NewUserService(engine *xorm.Engine, logger *logging.Logger) UserService { | func NewUserService(engine *xorm.Engine, logger *logging.Logger) UserService { | ||||||
|  | @ -245,3 +247,39 @@ ReturnPoint: | ||||||
| 	} | 	} | ||||||
| 	return rsp, err | 	return rsp, err | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) GetUserList(ctx context.Context, req proto.UserRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		data := make([]model.SystemUser, 0) | ||||||
|  | 		count, err := rp.engine.Where("(? = '' or phone like ?)", req.Phone, "%"+req.Phone+"%"). | ||||||
|  | 			And("(? = '' or real_name like ?)", req.RealName, req.RealName). | ||||||
|  | 			And("status = 1").Limit(int(req.Size), int(((req.Page)-1)*req.Size)). | ||||||
|  | 			FindAndCount(&data) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "成功" | ||||||
|  | 		rsp = FillPaging(count, req.Page, req.Size, data, rsp) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -2,11 +2,16 @@ package service | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"git.hpds.cc/Component/logging" | 	"git.hpds.cc/Component/logging" | ||||||
|  | 	"git.hpds.cc/pavement/hpds_node" | ||||||
|  | 	"hpds-iot-web/config" | ||||||
| 	"hpds-iot-web/internal/proto" | 	"hpds-iot-web/internal/proto" | ||||||
| 	"hpds-iot-web/model" | 	"hpds-iot-web/model" | ||||||
|  | 	"hpds-iot-web/mq" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 	"xorm.io/xorm" | 	"xorm.io/xorm" | ||||||
| ) | ) | ||||||
|  | @ -16,10 +21,13 @@ type ModelService interface { | ||||||
| 	AddModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) | 	AddModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
| 	EditModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) | 	EditModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
| 	DelModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) | 	DelModel(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	ModelIssue(ctx context.Context, req proto.ModelIssueRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	GetModelWorkflow(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func NewModelService(engine *xorm.Engine, logger *logging.Logger) ModelService { | func NewModelService(cfg *config.WebConfig, engine *xorm.Engine, logger *logging.Logger) ModelService { | ||||||
| 	return &repo{ | 	return &repo{ | ||||||
|  | 		AppConfig: cfg, | ||||||
| 		engine:    engine, | 		engine:    engine, | ||||||
| 		logger:    logger, | 		logger:    logger, | ||||||
| 	} | 	} | ||||||
|  | @ -73,11 +81,19 @@ func (rp *repo) AddModel(ctx context.Context, req proto.ModelItemRequest) (rsp * | ||||||
| 	default: | 	default: | ||||||
| 		item := &model.Model{ | 		item := &model.Model{ | ||||||
| 			ModelName:        req.ModelName, | 			ModelName:        req.ModelName, | ||||||
|  | 			BizType:          req.BizType, | ||||||
| 			ModelVersion:     req.ModelVersion, | 			ModelVersion:     req.ModelVersion, | ||||||
| 			ModelDesc:        req.ModelDesc, | 			ModelDesc:        req.ModelDesc, | ||||||
| 			ModelFiles:       req.ModelFiles, | 			ModelFiles:       req.ModelFiles, | ||||||
| 			ModelParamsFiles: req.ModelParamsFiles, | 			ModelParamsFiles: req.ModelParamsFiles, | ||||||
| 			ModelExecScript:  req.ModelExecScript, | 			ModelExecScript:  req.ModelExecScript, | ||||||
|  | 			DockerFile:       strings.Join(req.DockerFile, "|"), | ||||||
|  | 			MappedPort:       req.MappedPort, | ||||||
|  | 			ModelCommand:     req.ModelCommand, | ||||||
|  | 			InPath:           req.InPath, | ||||||
|  | 			OutPath:          req.OutPath, | ||||||
|  | 			HttpUrl:          req.HttpUrl, | ||||||
|  | 			IsLightWeight:    req.IsLightWeight, | ||||||
| 			Status:           1, | 			Status:           1, | ||||||
| 			CreateAt:         time.Now().Unix(), | 			CreateAt:         time.Now().Unix(), | ||||||
| 			UpdateAt:         time.Now().Unix(), | 			UpdateAt:         time.Now().Unix(), | ||||||
|  | @ -142,6 +158,32 @@ func (rp *repo) EditModel(ctx context.Context, req proto.ModelItemRequest) (rsp | ||||||
| 		if len(req.ModelExecScript) > 0 { | 		if len(req.ModelExecScript) > 0 { | ||||||
| 			item.ModelExecScript = req.ModelExecScript | 			item.ModelExecScript = req.ModelExecScript | ||||||
| 		} | 		} | ||||||
|  | 		if req.BizType > 0 { | ||||||
|  | 			item.BizType = req.BizType | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if len(req.DockerFile) > 0 { | ||||||
|  | 			item.DockerFile = strings.Join(req.DockerFile, "|") | ||||||
|  | 		} | ||||||
|  | 		if req.MappedPort > 0 { | ||||||
|  | 			item.MappedPort = req.MappedPort | ||||||
|  | 		} | ||||||
|  | 		if len(req.ModelCommand) > 0 { | ||||||
|  | 			item.ModelCommand = req.ModelCommand | ||||||
|  | 		} | ||||||
|  | 		if len(req.InPath) > 0 { | ||||||
|  | 			item.InPath = req.InPath | ||||||
|  | 		} | ||||||
|  | 		if len(req.OutPath) > 0 { | ||||||
|  | 			item.OutPath = req.OutPath | ||||||
|  | 		} | ||||||
|  | 		if len(req.HttpUrl) > 0 { | ||||||
|  | 			item.HttpUrl = req.HttpUrl | ||||||
|  | 		} | ||||||
|  | 		if len(req.Workflow) > 0 { | ||||||
|  | 			item.Workflow = req.Workflow | ||||||
|  | 		} | ||||||
|  | 		item.IsLightWeight = req.IsLightWeight | ||||||
| 		item.UpdateAt = time.Now().Unix() | 		item.UpdateAt = time.Now().Unix() | ||||||
| 		_, err = rp.engine.ID(req.ModelId).AllCols().Update(item) | 		_, err = rp.engine.ID(req.ModelId).AllCols().Update(item) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | @ -206,3 +248,123 @@ ReturnPoint: | ||||||
| 	} | 	} | ||||||
| 	return rsp, err | 	return rsp, err | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) ModelIssue(ctx context.Context, req proto.ModelIssueRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		var h bool | ||||||
|  | 		m := new(model.Model) | ||||||
|  | 		h, err = rp.engine.ID(req.ModelId).Get(m) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if !h { | ||||||
|  | 			err = fmt.Errorf("未能找到对应的模型") | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		node := new(model.Node) | ||||||
|  | 		h, err = rp.engine.ID(req.NodeId).Get(node) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if !h { | ||||||
|  | 			err = fmt.Errorf("未能找到对应的节点") | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		item := new(model.IssueModel) | ||||||
|  | 		h, err = rp.engine.Where("model_id = ? and node_id= ?", req.ModelId, req.NodeId).Get(item) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if h { | ||||||
|  | 			err = fmt.Errorf("已经有该模型") | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		item.ModelId = req.ModelId | ||||||
|  | 		item.NodeId = req.NodeId | ||||||
|  | 		item.CreateAt = time.Now().Unix() | ||||||
|  | 		item.UpdateAt = time.Now().Unix() | ||||||
|  | 		_, err = rp.engine.Insert(item) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		mqClient := mq.GetMqClient("task-request", 1) | ||||||
|  | 		payload := make(map[string]interface{}) | ||||||
|  | 		payload["modelId"] = item.ModelId | ||||||
|  | 		payload["modelVersion"] = m.ModelVersion | ||||||
|  | 		payload["modelCommand"] = m.ModelCommand | ||||||
|  | 		payload["nodeId"] = item.NodeId | ||||||
|  | 		payload["dockerFile"] = m.DockerFile | ||||||
|  | 		payload["mappedPort"] = m.MappedPort | ||||||
|  | 		payload["inPath"] = m.InPath | ||||||
|  | 		payload["outPath"] = m.OutPath | ||||||
|  | 		payload["httpUrl"] = m.HttpUrl | ||||||
|  | 		payload["nodeGuid"] = node.NodeGuid | ||||||
|  | 		mqPayload := &mq.InstructionReq{ | ||||||
|  | 			Command: mq.ModelIssue, | ||||||
|  | 			Payload: payload, | ||||||
|  | 		} | ||||||
|  | 		b, _ := json.Marshal(mqPayload) | ||||||
|  | 		err = mq.GenerateAndSendData(mqClient.EndPoint.(hpds_node.AccessPoint), b, rp.logger) | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "模型下发成功" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		rsp.Data = item | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) GetModelWorkflow(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		var h bool | ||||||
|  | 		item := new(model.Model) | ||||||
|  | 		h, err = rp.engine.ID(req.ModelId).Get(item) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if !h { | ||||||
|  | 			err = fmt.Errorf("未能找到对应的模型") | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "删除模型成功" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		rsp.Data = item.Workflow | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -17,6 +17,12 @@ type SystemService interface { | ||||||
| 	AddBrand(ctx context.Context, req proto.BrandItemRequest) (rsp *proto.BaseResponse, err error) | 	AddBrand(ctx context.Context, req proto.BrandItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
| 	EditBrand(ctx context.Context, req proto.BrandItemRequest) (rsp *proto.BaseResponse, err error) | 	EditBrand(ctx context.Context, req proto.BrandItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
| 	DeleteBrand(ctx context.Context, req proto.BrandItemRequest) (rsp *proto.BaseResponse, err error) | 	DeleteBrand(ctx context.Context, req proto.BrandItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 
 | ||||||
|  | 	NodeList(ctx context.Context, req proto.NodeRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	NodeInfo(ctx context.Context, req proto.NodeItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	EditNode(ctx context.Context, req proto.NodeItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	NodeState(ctx context.Context, req proto.NodeInfoRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	NodeLastState(ctx context.Context, req proto.NodeInfoRequest) (rsp *proto.BaseResponse, err error) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func NewSystemService(engine *xorm.Engine, logger *logging.Logger) SystemService { | func NewSystemService(engine *xorm.Engine, logger *logging.Logger) SystemService { | ||||||
|  | @ -231,3 +237,244 @@ ReturnPoint: | ||||||
| 	} | 	} | ||||||
| 	return rsp, err | 	return rsp, err | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) NodeList(ctx context.Context, req proto.NodeRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		data := make([]model.Node, 0) | ||||||
|  | 		var count int64 | ||||||
|  | 		count, err = rp.engine.Where("(? = '' or node_name like ?)", req.NodeName, "%"+req.NodeName+"%"). | ||||||
|  | 			And("(? = '' or node_guid like ?)", req.NodeGuid, "%"+req.NodeGuid+"%"). | ||||||
|  | 			And("(? = 0 or node_type = ?)", req.NodeType, req.NodeType). | ||||||
|  | 			And("node_status = 1").Limit(int(req.Size), int(((req.Page)-1)*req.Size)). | ||||||
|  | 			FindAndCount(&data) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "成功" | ||||||
|  | 		rsp = FillPaging(count, req.Page, req.Size, data, rsp) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) NodeInfo(ctx context.Context, req proto.NodeItemRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		var h bool | ||||||
|  | 		item := new(model.Node) | ||||||
|  | 		h, err = rp.engine.ID(req.NodeId).Get(item) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if !h { | ||||||
|  | 			err = fmt.Errorf("未能找到对应的节点") | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "获取节点成功" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		rsp.Data = item | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) EditNode(ctx context.Context, req proto.NodeItemRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		var h bool | ||||||
|  | 		item := new(model.Node) | ||||||
|  | 		h, err = rp.engine.ID(req.NodeId).Get(item) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if !h { | ||||||
|  | 			err = fmt.Errorf("未能找到对应的节点") | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if len(req.NodeName) > 0 { | ||||||
|  | 			item.NodeName = req.NodeName | ||||||
|  | 		} | ||||||
|  | 		if req.NodeType > 0 { | ||||||
|  | 			item.NodeType = req.NodeType | ||||||
|  | 		} | ||||||
|  | 		if len(req.Platform) > 0 { | ||||||
|  | 			item.Platform = req.Platform | ||||||
|  | 		} | ||||||
|  | 		if len(req.PlatformVersion) > 0 { | ||||||
|  | 			item.PlatformVersion = req.PlatformVersion | ||||||
|  | 		} | ||||||
|  | 		if len(req.CPU) > 0 { | ||||||
|  | 			item.CPU = req.CPU | ||||||
|  | 		} | ||||||
|  | 		if req.MemTotal > 0 { | ||||||
|  | 			item.MemTotal = req.MemTotal | ||||||
|  | 		} | ||||||
|  | 		if req.DiskTotal > 0 { | ||||||
|  | 			item.DiskTotal = req.DiskTotal | ||||||
|  | 		} | ||||||
|  | 		if req.SwapTotal > 0 { | ||||||
|  | 			item.SwapTotal = req.SwapTotal | ||||||
|  | 		} | ||||||
|  | 		if len(req.Arch) > 0 { | ||||||
|  | 			item.Arch = req.Arch | ||||||
|  | 		} | ||||||
|  | 		if len(req.Virtualization) > 0 { | ||||||
|  | 			item.Virtualization = req.Virtualization | ||||||
|  | 		} | ||||||
|  | 		if req.BootTime > 0 { | ||||||
|  | 			item.BootTime = req.BootTime | ||||||
|  | 		} | ||||||
|  | 		if len(req.IP) > 0 { | ||||||
|  | 			item.IP = req.IP | ||||||
|  | 		} | ||||||
|  | 		if len(req.CountryCode) > 0 { | ||||||
|  | 			item.CountryCode = req.CountryCode | ||||||
|  | 		} | ||||||
|  | 		if len(req.Version) > 0 { | ||||||
|  | 			item.Version = req.Version | ||||||
|  | 		} | ||||||
|  | 		item.UpdateAt = time.Now().Unix() | ||||||
|  | 		_, err = rp.engine.ID(req.NodeId).AllCols().Update(item) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "修改节点成功" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		rsp.Data = item | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) NodeState(ctx context.Context, req proto.NodeInfoRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		list := make([]model.NodeState, 0) | ||||||
|  | 		err = rp.engine.Where("node_name = ?", req.NodeGuid). | ||||||
|  | 			And(" uptime > UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL -24 HOUR))"). | ||||||
|  | 			Find(&list) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		state := new(proto.NodeState) | ||||||
|  | 		state.List = list | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "获取节点状态信息成功" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		rsp.Data = state | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) NodeLastState(ctx context.Context, req proto.NodeInfoRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		list := make([]proto.NodeLastStateItem, 0) | ||||||
|  | 		//err = rp.engine.Where("node_name = ?", req.NodeGuid).
 | ||||||
|  | 		//	And("? + uptime > UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL -24 HOUR))", req.Uptime).Desc("uptime").
 | ||||||
|  | 		//	Find(&list)
 | ||||||
|  | 		err = rp.engine.SQL(`select c.node_id,c.node_name,c.node_guid,c.node_type,c.node_type,c.platform,c.platform_version,c.c_p_u,c.mem_total, | ||||||
|  | c.disk_total,c.swap_total,a.c_p_u cpu_used,c.node_status, a.mem_used,a.swap_used, a.disk_used, a.net_in_transfer, a.net_in_speed, | ||||||
|  | a.net_out_speed, a.net_out_transfer, a.load1, a.load5, a.load15, a.tcp_conn_count, a.udp_conn_count, a.process_count, | ||||||
|  | d.task_name exec_task from node_state a , (select node_name, max(uptime) uptime from node_state group by node_name) b, node c | ||||||
|  | left join (select t2.node_id, t2.task_name from task t2, (select node_id, max(start_time) start from task group by node_id) t1 where t2.node_id = t1.node_id and t2.start_time = t1.start and t2.status = 1) d on c.node_id = d.node_id | ||||||
|  |          where a.node_name = b.node_name and a.uptime = b.uptime and a.node_name = c.node_guid and c.node_status > 0 and (? = '' or a.node_name = ?) `, req.NodeGuid, req.NodeGuid).Find(&list) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		state := new(proto.NodeLastState) | ||||||
|  | 		state.List = list | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "获取节点状态信息成功" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		rsp.Data = state | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,178 @@ | ||||||
|  | package service | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"fmt" | ||||||
|  | 	"git.hpds.cc/Component/logging" | ||||||
|  | 	"git.hpds.cc/pavement/hpds_node" | ||||||
|  | 	"hpds-iot-web/internal/proto" | ||||||
|  | 	"hpds-iot-web/model" | ||||||
|  | 	"hpds-iot-web/mq" | ||||||
|  | 	"net/http" | ||||||
|  | 	"time" | ||||||
|  | 	"xorm.io/xorm" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type TaskService interface { | ||||||
|  | 	TaskList(ctx context.Context, req proto.TaskRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	AddTask(ctx context.Context, req proto.TaskItemRequest) (rsp *proto.BaseResponse, err error) | ||||||
|  | 	//EditTask(ctx context.Context, req proto.ModelItemRequest) (rsp *proto.BaseResponse, err error)
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewTaskService(engine *xorm.Engine, logger *logging.Logger) TaskService { | ||||||
|  | 	return &repo{ | ||||||
|  | 		engine: engine, | ||||||
|  | 		logger: logger, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) TaskList(ctx context.Context, req proto.TaskRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		data := make([]proto.TaskDetail, 0) | ||||||
|  | 		count, err := rp.engine.Table("task").Alias("t"). | ||||||
|  | 			Join("inner", []string{"model", "m"}, "t.model_id = m.model_id"). | ||||||
|  | 			Join("inner", []string{"node", "n"}, "t.node_id = n.node_id"). | ||||||
|  | 			Cols("t.*", "m.model_name", "n.node_name"). | ||||||
|  | 			Where("(? = 0 or m.biz_type = ?)", req.BizType, req.BizType). | ||||||
|  | 			And("(?='' or task_name like ?)", req.TaskName, "%"+req.TaskName+"%"). | ||||||
|  | 			And("t.start_time >= unix_timestamp(?)", req.StartTime). | ||||||
|  | 			And("? = 0 or t.start_time <= unix_timestamp(?)", req.FinishTime, req.FinishTime). | ||||||
|  | 			And("t.status > 0").Limit(int(req.Size), int(((req.Page)-1)*req.Size)). | ||||||
|  | 			FindAndCount(&data) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "成功" | ||||||
|  | 		rsp = FillPaging(count, req.Page, req.Size, data, rsp) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (rp *repo) AddTask(ctx context.Context, req proto.TaskItemRequest) (rsp *proto.BaseResponse, err error) { | ||||||
|  | 	rsp = new(proto.BaseResponse) | ||||||
|  | 	select { | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 		err = fmt.Errorf("超时/取消") | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Message = "超时/取消" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		return rsp, ctx.Err() | ||||||
|  | 	default: | ||||||
|  | 		var h bool | ||||||
|  | 		m := new(model.Model) | ||||||
|  | 		h, err = rp.engine.ID(req.ModelId).Get(m) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if !h { | ||||||
|  | 			err = fmt.Errorf("未能找到对应的模型") | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		ds := new(model.Dataset) | ||||||
|  | 		h, err = rp.engine.ID(req.ModelId).Get(ds) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		if !h { | ||||||
|  | 			err = fmt.Errorf("未能找到对应的数据集") | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		item := &model.Task{ | ||||||
|  | 			ModelId:         req.ModelId, | ||||||
|  | 			NodeId:          req.NodeId, | ||||||
|  | 			TaskName:        req.TaskName, | ||||||
|  | 			TaskDesc:        req.TaskDesc, | ||||||
|  | 			DatasetArr:      fmt.Sprintf("%d", req.DatasetArr), | ||||||
|  | 			SubDataset:      req.SubDataset, | ||||||
|  | 			SubDataTag:      req.SubDataTag, | ||||||
|  | 			AppointmentTime: req.AppointmentTime, | ||||||
|  | 			Status:          1, | ||||||
|  | 			CreateAt:        time.Now().Unix(), | ||||||
|  | 			UpdateAt:        time.Now().Unix(), | ||||||
|  | 		} | ||||||
|  | 		if len(req.AppointmentTime) > 0 { | ||||||
|  | 			var appTime time.Time | ||||||
|  | 			appTime, err = time.ParseInLocation("2006-01-02 15:04:05", req.AppointmentTime, time.Local) | ||||||
|  | 			if err != nil { | ||||||
|  | 				err = fmt.Errorf("时间格式不匹配") | ||||||
|  | 				goto ReturnPoint | ||||||
|  | 			} | ||||||
|  | 			item.StartTime = appTime.Unix() | ||||||
|  | 		} else { | ||||||
|  | 			item.StartTime = time.Now().Unix() | ||||||
|  | 		} | ||||||
|  | 		_, err = rp.engine.Insert(item) | ||||||
|  | 		if err != nil { | ||||||
|  | 			goto ReturnPoint | ||||||
|  | 		} | ||||||
|  | 		//reg, _ := regexp.Compile("\\[.*?\\]")
 | ||||||
|  | 		//if ok := reg.FindAll([]byte(item.ResultStorage), 2); len(ok) > 0 {
 | ||||||
|  | 		//	item.ResultStorage = reg.ReplaceAllString(item.ResultStorage, fmt.Sprintf("%d_%d", item.TaskId, item.ModelId))
 | ||||||
|  | 		//	_, err = rp.engine.ID(item.TaskId).Cols("result_storage").Update(item)
 | ||||||
|  | 		//	if err != nil {
 | ||||||
|  | 		//		goto ReturnPoint
 | ||||||
|  | 		//	}
 | ||||||
|  | 		//}
 | ||||||
|  | 		payload := make(map[string]interface{}) | ||||||
|  | 		payload["taskId"] = item.TaskId | ||||||
|  | 		payload["modelId"] = item.ModelId | ||||||
|  | 		payload["modelVersion"] = m.ModelVersion | ||||||
|  | 		payload["modelCommand"] = m.ModelCommand | ||||||
|  | 		payload["nodeId"] = item.NodeId | ||||||
|  | 		payload["inPath"] = m.InPath | ||||||
|  | 		payload["outPath"] = m.OutPath | ||||||
|  | 		payload["httpUrl"] = m.HttpUrl | ||||||
|  | 		payload["datasetArr"] = item.DatasetArr | ||||||
|  | 		payload["datasetPath"] = ds.StoreName | ||||||
|  | 		payload["datasetName"] = ds.DatasetName | ||||||
|  | 		payload["subDataset"] = item.SubDataset | ||||||
|  | 		payload["subDataTag"] = item.SubDataTag | ||||||
|  | 		payload["workflow"] = m.Workflow | ||||||
|  | 
 | ||||||
|  | 		mqClient := mq.GetMqClient("task-request", 1) | ||||||
|  | 		mqPayload := &mq.InstructionReq{ | ||||||
|  | 			Command: mq.TaskAdd, | ||||||
|  | 			Payload: payload, | ||||||
|  | 		} | ||||||
|  | 		pData, _ := json.Marshal(mqPayload) | ||||||
|  | 		err = mq.GenerateAndSendData(mqClient.EndPoint.(hpds_node.AccessPoint), pData, rp.logger) | ||||||
|  | 		rsp.Code = http.StatusOK | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusOK) | ||||||
|  | 		rsp.Message = "新增任务成功" | ||||||
|  | 		rsp.Err = ctx.Err() | ||||||
|  | 		rsp.Data = item | ||||||
|  | 		return rsp, err | ||||||
|  | 	} | ||||||
|  | ReturnPoint: | ||||||
|  | 	if err != nil { | ||||||
|  | 		rsp.Code = http.StatusInternalServerError | ||||||
|  | 		rsp.Status = http.StatusText(http.StatusInternalServerError) | ||||||
|  | 		rsp.Err = err | ||||||
|  | 		rsp.Message = "失败" | ||||||
|  | 	} | ||||||
|  | 	return rsp, err | ||||||
|  | } | ||||||
|  | @ -4,6 +4,7 @@ type Dataset struct { | ||||||
| 	DatasetId   int64  `xorm:"not null pk autoincr INT(11)" json:"datasetId"` | 	DatasetId   int64  `xorm:"not null pk autoincr INT(11)" json:"datasetId"` | ||||||
| 	DatasetName string `xorm:"varchar(200) not null" json:"datasetName"` | 	DatasetName string `xorm:"varchar(200) not null" json:"datasetName"` | ||||||
| 	DatasetDesc string `xorm:"varchar(200)" json:"datasetDesc"` | 	DatasetDesc string `xorm:"varchar(200)" json:"datasetDesc"` | ||||||
|  | 	StoreName   string `xorm:"varchar(200)" json:"storeName"` | ||||||
| 	CategoryId  int    `xorm:"not null SMALLINT default 1" json:"categoryId"` //业务分类, 1:道路 2:桥梁 3:隧道 4:边坡
 | 	CategoryId  int    `xorm:"not null SMALLINT default 1" json:"categoryId"` //业务分类, 1:道路 2:桥梁 3:隧道 4:边坡
 | ||||||
| 	ProjectId   int64  `xorm:"INT(11) not null default 0 index" json:"projectId"` | 	ProjectId   int64  `xorm:"INT(11) not null default 0 index" json:"projectId"` | ||||||
| 	OwnerId     int64  `xorm:"INT(11) not null default 0 index" json:"ownerId"` | 	OwnerId     int64  `xorm:"INT(11) not null default 0 index" json:"ownerId"` | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ type Disease struct { | ||||||
| 	DetectionMethod string `xorm:"varchar(200) not null " json:"detectionMethod"` | 	DetectionMethod string `xorm:"varchar(200) not null " json:"detectionMethod"` | ||||||
| 	DiseaseDesc     string `xorm:"TEXT" json:"diseaseDesc"` | 	DiseaseDesc     string `xorm:"TEXT" json:"diseaseDesc"` | ||||||
| 	Reference       string `xorm:"varchar(200) not null " json:"reference"` //参照标准
 | 	Reference       string `xorm:"varchar(200) not null " json:"reference"` //参照标准
 | ||||||
|  | 	StoreName       string `xorm:"varchar(200)" json:"storeName"`           //存储路径
 | ||||||
| 	CreateAt        int64  `xorm:"created" json:"createAt"` | 	CreateAt        int64  `xorm:"created" json:"createAt"` | ||||||
| 	UpdateAt        int64  `xorm:"updated" json:"updateAt"` | 	UpdateAt        int64  `xorm:"updated" json:"updateAt"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -17,9 +17,9 @@ var ( | ||||||
| 	Redis *redis.Client | 	Redis *redis.Client | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func New(driveName, dsn string) { | func New(driveName, dsn string, showSql bool) { | ||||||
| 	DB, _ = NewDbConnection(dsn) | 	DB, _ = NewDbConnection(driveName, dsn) | ||||||
| 	DB.ShowSQL(true) | 	DB.ShowSQL(showSql) | ||||||
| 	DB.Dialect().SetQuotePolicy(dialects.QuotePolicyReserved) | 	DB.Dialect().SetQuotePolicy(dialects.QuotePolicyReserved) | ||||||
| 	err := DB.Sync2( | 	err := DB.Sync2( | ||||||
| 		&Brand{}, | 		&Brand{}, | ||||||
|  | @ -42,6 +42,8 @@ func New(driveName, dsn string) { | ||||||
| 		&Model{}, | 		&Model{}, | ||||||
| 		&ModelVersion{}, | 		&ModelVersion{}, | ||||||
| 		&Node{}, | 		&Node{}, | ||||||
|  | 		&NodeState{}, | ||||||
|  | 		&IssueModel{}, | ||||||
| 		&OriginalData{}, | 		&OriginalData{}, | ||||||
| 		&Owner{}, | 		&Owner{}, | ||||||
| 		&Project{}, | 		&Project{}, | ||||||
|  | @ -52,6 +54,8 @@ func New(driveName, dsn string) { | ||||||
| 		&SystemRole{}, | 		&SystemRole{}, | ||||||
| 		&SystemUser{}, | 		&SystemUser{}, | ||||||
| 		&SystemUserRole{}, | 		&SystemUserRole{}, | ||||||
|  | 		&Task{}, | ||||||
|  | 		&TaskResult{}, | ||||||
| 	) | 	) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		zap.L().Error("同步数据库表结构", zap.Error(err)) | 		zap.L().Error("同步数据库表结构", zap.Error(err)) | ||||||
|  | @ -59,8 +63,8 @@ func New(driveName, dsn string) { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func NewDbConnection(dsn string) (db *xorm.Engine, err error) { | func NewDbConnection(driveName, dsn string) (db *xorm.Engine, err error) { | ||||||
| 	db, err = xorm.NewEngine("mysql", dsn) | 	db, err = xorm.NewEngine(driveName, dsn) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		zap.L().Error("创建数据库连接", zap.Error(err)) | 		zap.L().Error("创建数据库连接", zap.Error(err)) | ||||||
| 		os.Exit(-1) | 		os.Exit(-1) | ||||||
|  |  | ||||||
|  | @ -3,11 +3,20 @@ package model | ||||||
| type Model struct { | type Model struct { | ||||||
| 	ModelId          int    `xorm:"not null pk autoincr INT(11)" json:"modelId"` | 	ModelId          int    `xorm:"not null pk autoincr INT(11)" json:"modelId"` | ||||||
| 	ModelName        string `xorm:"varchar(200) not null" json:"modelName"` | 	ModelName        string `xorm:"varchar(200) not null" json:"modelName"` | ||||||
|  | 	BizType          int    `xorm:"int not null default 1" json:"bizType"` | ||||||
| 	ModelVersion     string `xorm:"varchar(50) not null" json:"modelVersion"` | 	ModelVersion     string `xorm:"varchar(50) not null" json:"modelVersion"` | ||||||
| 	ModelDesc        string `xorm:"varchar(200) not null" json:"modelDesc"` | 	ModelDesc        string `xorm:"varchar(200) not null" json:"modelDesc"` | ||||||
| 	ModelFiles       string `xorm:"varchar(200) not null" json:"modelFiles"` | 	ModelFiles       string `xorm:"varchar(200) not null" json:"modelFiles"` | ||||||
| 	ModelParamsFiles string `xorm:"varchar(200)" json:"modelParamsFiles"` | 	ModelParamsFiles string `xorm:"varchar(200)" json:"modelParamsFiles"` | ||||||
| 	ModelExecScript  string `xorm:"varchar(200)" json:"modelExecScript"` | 	ModelExecScript  string `xorm:"varchar(200)" json:"modelExecScript"` | ||||||
|  | 	DockerFile       string `xorm:"varchar(200)" json:"dockerFile"` | ||||||
|  | 	MappedPort       int    `xorm:"int" json:"mappedPort"` | ||||||
|  | 	ModelCommand     string `xorm:"varchar(200)" json:"modelCommand"` | ||||||
|  | 	InPath           string `xorm:"varchar(200)" json:"inPath"` | ||||||
|  | 	OutPath          string `xorm:"varchar(200)" json:"outPath"` | ||||||
|  | 	HttpUrl          string `xorm:"varchar(200)" json:"httpUrl"` | ||||||
|  | 	IsLightWeight    bool   `xorm:"TINYINT(1) default 0" json:"isLightWeight"` | ||||||
|  | 	Workflow         string `xorm:"TEXT" json:"workflow"` | ||||||
| 	Status           int    `xorm:"not null SMALLINT default 0" json:"status"` | 	Status           int    `xorm:"not null SMALLINT default 0" json:"status"` | ||||||
| 	CreateAt         int64  `xorm:"created" json:"createAt"` | 	CreateAt         int64  `xorm:"created" json:"createAt"` | ||||||
| 	UpdateAt         int64  `xorm:"updated" json:"updateAt"` | 	UpdateAt         int64  `xorm:"updated" json:"updateAt"` | ||||||
|  |  | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | package model | ||||||
|  | 
 | ||||||
|  | type IssueModel struct { | ||||||
|  | 	Id          int64  `xorm:"not null pk autoincr INT(11)" json:"id"` | ||||||
|  | 	ModelId     int64  `xorm:"INT(11) index" json:"modelId"` | ||||||
|  | 	NodeId      int64  `xorm:"INT(11) index" json:"nodeId"` | ||||||
|  | 	Status      int    `xorm:"not null SMALLINT default 0" json:"status"` | ||||||
|  | 	IssueResult string `xorm:"TEXT" json:"issueResult"` | ||||||
|  | 	CreateAt    int64  `xorm:"created" json:"createAt"` | ||||||
|  | 	UpdateAt    int64  `xorm:"updated" json:"updateAt"` | ||||||
|  | } | ||||||
|  | @ -1,10 +1,26 @@ | ||||||
| package model | package model | ||||||
| 
 | 
 | ||||||
|  | // Node 节点信息
 | ||||||
| type Node struct { | type Node struct { | ||||||
| 	NodeId     int    `xorm:"not null pk autoincr INT(11)" json:"nodeId"` | 	NodeId          int64  `xorm:"not null pk autoincr INT(11)" json:"nodeId"` | ||||||
| 	NodeName   string `xorm:"varchar(50) not null" json:"nodeName"` | 	NodeGuid        string `xorm:"varchar(100) index" json:"nodeGuid"` | ||||||
|  | 	NodeName        string `xorm:"varchar(100)" json:"nodeName"` | ||||||
| 	NodeType        int    `xorm:"not null SMALLINT default 0" json:"nodeType"` | 	NodeType        int    `xorm:"not null SMALLINT default 0" json:"nodeType"` | ||||||
| 	NodeStatus      int    `xorm:"not null SMALLINT default 0" json:"nodeStatus"` | 	NodeStatus      int    `xorm:"not null SMALLINT default 0" json:"nodeStatus"` | ||||||
|  | 	Platform        string `xorm:"varchar(100)" json:"platform,omitempty"` | ||||||
|  | 	PlatformVersion string `xorm:"varchar(100)" json:"platformVersion,omitempty"` | ||||||
|  | 	CPU             string `xorm:"varchar(1000)" json:"cpu,omitempty"` | ||||||
|  | 	MemTotal        uint64 `xorm:"BIGINT" json:"memTotal,omitempty"` | ||||||
|  | 	DiskTotal       uint64 `xorm:"BIGINT" json:"diskTotal,omitempty"` | ||||||
|  | 	SwapTotal       uint64 `xorm:"BIGINT" json:"swapTotal,omitempty"` | ||||||
|  | 	Arch            string `xorm:"varchar(1000)" json:"arch,omitempty"` | ||||||
|  | 	Virtualization  string `xorm:"varchar(1000)" json:"virtualization,omitempty"` | ||||||
|  | 	BootTime        uint64 `xorm:"BIGINT" json:"bootTime,omitempty"` | ||||||
|  | 	IP              string `xorm:"varchar(100)" json:"ip"` | ||||||
|  | 	IsGpu           bool   `xorm:"TINYINT(1) default 0" json:"isGpu"` | ||||||
|  | 	IsTaskExecute   bool   `xorm:"TINYINT(1) default 0" json:"isTaskExecute"` | ||||||
|  | 	CountryCode     string `xorm:"varchar(100)" json:"countryCode,omitempty"` | ||||||
|  | 	Version         string `xorm:"varchar(100)" json:"version,omitempty"` | ||||||
| 	CreateAt        int64  `xorm:"created" json:"createAt"` | 	CreateAt        int64  `xorm:"created" json:"createAt"` | ||||||
| 	UpdateAt        int64  `xorm:"updated" json:"updateAt"` | 	UpdateAt        int64  `xorm:"updated" json:"updateAt"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,21 @@ | ||||||
|  | package model | ||||||
|  | 
 | ||||||
|  | // NodeState 节点状态信息
 | ||||||
|  | type NodeState struct { | ||||||
|  | 	Uptime         uint64  `xorm:"BIGINT pk" json:"uptime,omitempty"` | ||||||
|  | 	NodeName       string  `xorm:"varchar(100) pk" json:"nodeName"` | ||||||
|  | 	CPU            float64 `xorm:"DECIMAL(18,4)" json:"cpu,omitempty"` | ||||||
|  | 	MemUsed        uint64  `xorm:"BIGINT" json:"memUsed,omitempty"` | ||||||
|  | 	SwapUsed       uint64  `xorm:"BIGINT" json:"swapUsed,omitempty"` | ||||||
|  | 	DiskUsed       uint64  `xorm:"BIGINT" json:"diskUsed,omitempty"` | ||||||
|  | 	NetInTransfer  uint64  `xorm:"BIGINT" json:"netInTransfer,omitempty"` | ||||||
|  | 	NetOutTransfer uint64  `xorm:"BIGINT" json:"netOutTransfer,omitempty"` | ||||||
|  | 	NetInSpeed     uint64  `xorm:"BIGINT" json:"netInSpeed,omitempty"` | ||||||
|  | 	NetOutSpeed    uint64  `xorm:"BIGINT" json:"netOutSpeed,omitempty"` | ||||||
|  | 	Load1          float64 `xorm:"DECIMAL(18,4)" json:"load1,omitempty"` | ||||||
|  | 	Load5          float64 `xorm:"DECIMAL(18,4)" json:"load5,omitempty"` | ||||||
|  | 	Load15         float64 `xorm:"DECIMAL(18,4)" json:"load15,omitempty"` | ||||||
|  | 	TcpConnCount   uint64  `xorm:"BIGINT" json:"tcpConnCount,omitempty"` | ||||||
|  | 	UdpConnCount   uint64  `xorm:"BIGINT" json:"udpConnCount,omitempty"` | ||||||
|  | 	ProcessCount   uint64  `xorm:"BIGINT" json:"processCount,omitempty"` | ||||||
|  | } | ||||||
|  | @ -14,6 +14,7 @@ type SystemUser struct { | ||||||
| 	Pass     string `xorm:"VARCHAR(128) not null" json:"pass"`          //密码
 | 	Pass     string `xorm:"VARCHAR(128) not null" json:"pass"`          //密码
 | ||||||
| 	Salt     string `xorm:"VARCHAR(32) not null" json:"salt"`           //盐
 | 	Salt     string `xorm:"VARCHAR(32) not null" json:"salt"`           //盐
 | ||||||
| 	RealName string `xorm:"VARCHAR(50)" json:"realName"`                //真实姓名
 | 	RealName string `xorm:"VARCHAR(50)" json:"realName"`                //真实姓名
 | ||||||
|  | 	Status   int    `xorm:"not null SMALLINT default 1" json:"status"`  //是否禁用
 | ||||||
| 	CreateAt int64  `xorm:"created" json:"createAt"`                    //创建时间
 | 	CreateAt int64  `xorm:"created" json:"createAt"`                    //创建时间
 | ||||||
| 	UpdateAt int64  `xorm:"updated" json:"updateAt"`                    //更新时间
 | 	UpdateAt int64  `xorm:"updated" json:"updateAt"`                    //更新时间
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | package model | ||||||
|  | 
 | ||||||
|  | type Task struct { | ||||||
|  | 	TaskId          int64  `xorm:"not null pk autoincr INT(11)" json:"taskId"` | ||||||
|  | 	ModelId         int64  `xorm:"INT(11) index" json:"modelId"` | ||||||
|  | 	NodeId          int64  `xorm:"INT(11) index" json:"nodeId"` | ||||||
|  | 	TaskName        string `xorm:"VARCHAR(200)" json:"taskName"` | ||||||
|  | 	TaskDesc        string `xorm:"VARCHAR(500)" json:"taskDesc"` | ||||||
|  | 	DatasetArr      string `xorm:"TEXT" json:"datasetArr"` | ||||||
|  | 	SubDataset      string `xorm:"varchar(100)" json:"subDataset"` | ||||||
|  | 	SubDataTag      int    `xorm:"tinyint" json:"subDataTag"` | ||||||
|  | 	AppointmentTime string `xorm:"VARCHAR(30)" json:"appointmentTime"` | ||||||
|  | 	StartTime       int64  `xorm:"BIGINT" json:"startTime"` | ||||||
|  | 	FinishTime      int64  `xorm:"BIGINT" json:"finishTime"` | ||||||
|  | 	Status          int    `xorm:"not null SMALLINT default 0" json:"status"` // 1:等待执行; 2:执行中; 3:执行完成; 4:任务分配失败; 5:任务执行失败
 | ||||||
|  | 	CreateAt        int64  `xorm:"created" json:"createAt"` | ||||||
|  | 	UpdateAt        int64  `xorm:"updated" json:"updateAt"` | ||||||
|  | } | ||||||
|  | @ -0,0 +1,15 @@ | ||||||
|  | package model | ||||||
|  | 
 | ||||||
|  | type TaskResult struct { | ||||||
|  | 	ResultId   int64  `xorm:"not null pk autoincr INT(11)" json:"resultId"` | ||||||
|  | 	TaskId     int64  `xorm:"INT(11) index" json:"taskId"` | ||||||
|  | 	TaskCode   string `xorm:"varchar(200)" json:"taskCode"` | ||||||
|  | 	ModelId    int64  `xorm:"INT(11)" json:"modelId"` | ||||||
|  | 	NodeId     int64  `xorm:"INT(11)" json:"nodeId"` | ||||||
|  | 	StartTime  int64  `xorm:"BIGINT" json:"startTime"` | ||||||
|  | 	FinishTime int64  `xorm:"BIGINT" json:"finishTime"` | ||||||
|  | 	SubDataset string `xorm:"varchar(200)" json:"subDataset"` | ||||||
|  | 	DatasetId  int64  `xorm:"INT(11)" json:"datasetId"` | ||||||
|  | 	SrcPath    string `xorm:"varchar(500)" json:"srcPath"` | ||||||
|  | 	Result     string `xorm:"TEXT" json:"result"` | ||||||
|  | } | ||||||
|  | @ -0,0 +1,93 @@ | ||||||
|  | package mq | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"git.hpds.cc/Component/logging" | ||||||
|  | 	"go.uber.org/zap" | ||||||
|  | 	"hpds-iot-web/config" | ||||||
|  | 	"os" | ||||||
|  | 	"time" | ||||||
|  | 
 | ||||||
|  | 	"git.hpds.cc/pavement/hpds_node" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var MqList []HpdsMqNode | ||||||
|  | 
 | ||||||
|  | type HpdsMqNode struct { | ||||||
|  | 	MqType   uint | ||||||
|  | 	Topic    string | ||||||
|  | 	Node     config.HpdsNode | ||||||
|  | 	EndPoint interface{} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func must(logger *logging.Logger, err error) { | ||||||
|  | 	if err != nil { | ||||||
|  | 		if logger != nil { | ||||||
|  | 			logger.With(zap.String("web节点", "错误信息")).Error("启动错误", zap.Error(err)) | ||||||
|  | 		} else { | ||||||
|  | 			_, _ = fmt.Fprint(os.Stderr, err) | ||||||
|  | 		} | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewMqClient(funcs []config.FuncConfig, node config.HpdsNode, logger *logging.Logger) (mqList []HpdsMqNode, err error) { | ||||||
|  | 	mqList = make([]HpdsMqNode, 0) | ||||||
|  | 	for _, v := range funcs { | ||||||
|  | 		switch v.MqType { | ||||||
|  | 		case 2: | ||||||
|  | 			sf := hpds_node.NewStreamFunction( | ||||||
|  | 				v.Name, | ||||||
|  | 				hpds_node.WithMqAddr(fmt.Sprintf("%s:%d", node.Host, node.Port)), | ||||||
|  | 				hpds_node.WithObserveDataTags(v.DataTag), | ||||||
|  | 				hpds_node.WithCredential(node.Token), | ||||||
|  | 			) | ||||||
|  | 			err = sf.Connect() | ||||||
|  | 			nodeInfo := HpdsMqNode{ | ||||||
|  | 				MqType:   2, | ||||||
|  | 				Topic:    v.Name, | ||||||
|  | 				Node:     node, | ||||||
|  | 				EndPoint: sf, | ||||||
|  | 			} | ||||||
|  | 			must(logger, err) | ||||||
|  | 			mqList = append(mqList, nodeInfo) | ||||||
|  | 		default: | ||||||
|  | 			ap := hpds_node.NewAccessPoint( | ||||||
|  | 				v.Name, | ||||||
|  | 				hpds_node.WithMqAddr(fmt.Sprintf("%s:%d", node.Host, node.Port)), | ||||||
|  | 				hpds_node.WithCredential(node.Token), | ||||||
|  | 			) | ||||||
|  | 			err = ap.Connect() | ||||||
|  | 			nodeInfo := HpdsMqNode{ | ||||||
|  | 				MqType:   1, | ||||||
|  | 				Topic:    v.Name, | ||||||
|  | 				Node:     node, | ||||||
|  | 				EndPoint: ap, | ||||||
|  | 			} | ||||||
|  | 			must(logger, err) | ||||||
|  | 			ap.SetDataTag(v.DataTag) | ||||||
|  | 			mqList = append(mqList, nodeInfo) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 	return mqList, err | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func GetMqClient(topic string, mqType uint) *HpdsMqNode { | ||||||
|  | 	for _, v := range MqList { | ||||||
|  | 		if v.Topic == topic && v.MqType == mqType { | ||||||
|  | 			return &v | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func GenerateAndSendData(stream hpds_node.AccessPoint, data []byte, logger *logging.Logger) error { | ||||||
|  | 	logger.With(zap.String("web节点", "发送消息")).Info("数据", zap.String("发送的数据", string(data))) | ||||||
|  | 	_, err := stream.Write(data) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	time.Sleep(1000 * time.Millisecond) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | package mq | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	TaskAdd = iota + 1 | ||||||
|  | 	ModelIssue | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type InstructionReq struct { | ||||||
|  | 	Command int         `json:"command"` | ||||||
|  | 	Payload interface{} `json:"payload"` | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue