// // Copyright (C) 2020 IOTech Ltd // // SPDX-License-Identifier: Apache-2.0 package models import ( "github.com/winc-link/hummingbird/internal/pkg/constants" "github.com/winc-link/hummingbird/internal/pkg/utils" "gorm.io/gorm" "strings" //"gitlab.com/tedge/edgex/internal/pkg/constants" ) // DeviceService and its properties are defined in the APIv2 specification: // https://app.swaggerhub.com/apis-docs/EdgeXFoundry1/core-metadata/2.x#/DeviceService // Model fields are same as the DTOs documented by this swagger. Exceptions, if any, are noted below. type DeviceService struct { Timestamps `gorm:"embedded"` Id string `gorm:"id;primaryKey;not null;type:string;size:255;comment:主键"` Name string `gorm:"type:string;size:255;comment:名字"` BaseAddress string `gorm:"type:string;size:255;comment:地址"` DeviceLibraryId string `gorm:"uniqueIndex;type:string;size:255;comment:驱动ID"` Config MapStringInterface `gorm:"type:string;size:255;comment:配置"` DockerContainerId string `gorm:"type:string;size:255;comment:docker容器ID"` ExpertMode bool `gorm:"comment:扩展模式"` ExpertModeContent string `gorm:"comment:扩展内容"` DockerParamsSwitch bool `gorm:"comment:docker启动参数开关"` DockerParams string `gorm:"type:text;comment:docker启动参数"` ContainerName string `gorm:"type:string;size:255;comment:容器名字"` LogLevel constants.LogLevel `gorm:"default:1;comment:日志等级"` DriverType int `gorm:"default:1;not null;comment:驱动类别,1:驱动,2:三方应用"` RunStatus int `gorm:"-"` ImageExist bool `gorm:"-"` Platform constants.IotPlatform } func (d *DeviceService) TableName() string { return "device_service" } func (d *DeviceService) Get() interface{} { return *d } func (d *DeviceService) IsRunning() bool { return d.RunStatus == constants.RunStatusStarted } func (d *DeviceService) IsStopped() bool { return d.RunStatus == constants.RunStatusStopped } func (d *DeviceService) GetBaseAddress() string { if d.BaseAddress == "" { return constants.DefaultDriverBaseAddress } return d.BaseAddress } func (d *DeviceService) GetPort() string { tmpAddr := strings.Split(d.BaseAddress, ":") if len(tmpAddr) >= 2 { return tmpAddr[1] } return "" } func (d *DeviceService) IsDriver() bool { return d.DriverType == constants.DriverLibTypeDefault } type DeviceServiceExtendConf struct { ConfigFilePath string Mount []string Port int } func (d *DeviceService) BeforeCreate(tx *gorm.DB) (err error) { var mqttAuth MqttAuth mqttAuth.Id = utils.RandomNum() mqttAuth.ResourceType = constants.DriverResource mqttAuth.ResourceId = d.Id mqttAuth.ClientId = utils.GenUUID() mqttAuth.UserName = "edge-driver" + d.Id mqttAuth.Password = utils.GenUUID() return tx.Model(&MqttAuth{}).Create(&mqttAuth).Error } func (d *DeviceService) BeforeDelete(tx *gorm.DB) (err error) { var mqttAuth MqttAuth return tx.Model(&MqttAuth{}).Where("resource_type = ? and resource_id = ?", constants.DriverResource, d.Id).Delete(&mqttAuth).Error }