95 lines
3.3 KiB
Go
95 lines
3.3 KiB
Go
//
|
||
// 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
|
||
}
|