iot_server/internal/dtos/deviceservice.go

344 lines
12 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package dtos
import (
"github.com/winc-link/hummingbird/internal/models"
"github.com/winc-link/hummingbird/internal/pkg/constants"
//"gitlab.com/tedge/edgex/internal/models"
//devicelibraryProto "gitlab.com/tedge/edgex/proto/devicelibrary"
//deviceserviceProto "gitlab.com/tedge/edgex/proto/deviceservice"
"gopkg.in/yaml.v3"
)
type DeviceService struct {
Id string `json:"id,omitempty"`
Name string `json:"name"`
Created int64 `json:"created,omitempty"`
Modified int64 `json:"modified,omitempty"`
BaseAddress string `json:"baseAddress"`
DeviceLibraryId string `json:"deviceLibraryId"`
Config map[string]interface{} `json:"config"`
DockerContainerId string `json:"dockerContainerId"`
ExpertMode bool `json:"isExpertMode"`
ExpertModeContent string `json:"expertModeContent"`
DockerParamsSwitch bool `json:"dockerParamsSwitch"`
DockerParams string `json:"dockerParams"`
ContainerName string `json:"container_name"`
}
// 启动实例时对应的配置
type RunServiceCfg struct {
ImageRepo string
RunConfig string
DockerMountDevices []string
DockerParams string
DriverName string // 驱动名
}
func DeviceServiceFromModel(ds models.DeviceService) DeviceService {
var dto DeviceService
dto.Id = ds.Id
dto.Name = ds.Name
dto.BaseAddress = ds.BaseAddress
dto.DeviceLibraryId = ds.DeviceLibraryId
dto.Config = ds.Config
dto.DockerContainerId = ds.DockerContainerId
dto.ExpertMode = ds.ExpertMode
dto.ExpertModeContent = ds.ExpertModeContent
dto.DockerParamsSwitch = ds.DockerParamsSwitch
dto.DockerParams = ds.DockerParams
dto.ContainerName = ds.ContainerName
return dto
}
//func FromDeviceServiceModelToRPC(mds models.DeviceService) *deviceserviceProto.DeviceService {
// byteConfig, _ := json.Marshal(mds.Config)
// var ds deviceserviceProto.DeviceService
// ds.Id = mds.Id
// ds.Name = mds.Name
// ds.BaseAddress = mds.BaseAddress
// ds.DeviceLibraryId = mds.DeviceLibraryId
// ds.DockerContainerId = mds.DockerContainerId
// ds.Config = byteConfig
// ds.ExpertMode = mds.ExpertMode
// ds.ExpertModeContent = mds.ExpertModeContent
// ds.DockerParamsSwitch = mds.DockerParamsSwitch
// ds.DockerParams = mds.DockerParams
// ds.LogLevel = int64(mds.LogLevel)
// ds.RunStatus = int32(mds.RunStatus)
// ds.ImageExist = mds.ImageExist
// return &ds
//}
//func FromDeviceServiceRpcToModel(ds *deviceserviceProto.DeviceService) models.DeviceService {
// var config map[string]interface{}
// if ds.Config != nil {
// _ = json.Unmarshal(ds.Config, &config)
// }
//
// var mds models.DeviceService
// mds.Id = ds.Id
// mds.Name = ds.Name
// mds.BaseAddress = ds.BaseAddress
// mds.DeviceLibraryId = ds.DeviceLibraryId
// mds.DockerContainerId = ds.DockerContainerId
// mds.RunStatus = int(ds.RunStatus)
// mds.Config = config
// mds.ExpertMode = ds.ExpertMode
// mds.ExpertModeContent = ds.ExpertModeContent
// mds.DockerParamsSwitch = ds.DockerParamsSwitch
// mds.DockerParams = ds.DockerParams
// mds.ImageExist = ds.ImageExist
// mds.DriverType = int(ds.DriverType)
// return mds
//}
type DeviceServiceAddRequest struct {
Id string `json:"id,omitempty" binding:"omitempty,t-special-char"`
Name string `json:"name"`
DeviceLibraryId string `json:"deviceLibraryId" binding:"required"`
Config map[string]interface{} `json:"config" binding:"required"`
ExpertMode bool `json:"expertMode"`
ExpertModeContent string `json:"expertModeContent"`
DockerParamsSwitch bool `json:"dockerParamsSwitch"`
DockerParams string `json:"dockerParams"`
DriverType int `json:"driverType" binding:"omitempty,oneof=1 2"` //驱动库类型1驱动2三方应用
}
//func FromDeviceServiceAddToRpc(req DeviceServiceAddRequest) *deviceserviceProto.DeviceService {
// byteConfig, _ := json.Marshal(req.Config)
// return &deviceserviceProto.DeviceService{
// Id: req.Id,
// Name: req.Name,
// DeviceLibraryId: req.DeviceLibraryId,
// Config: byteConfig,
// ExpertMode: req.ExpertMode,
// ExpertModeContent: req.ExpertModeContent,
// DockerParamsSwitch: req.DockerParamsSwitch,
// DockerParams: req.DockerParams,
// DriverType: int32(req.DriverType),
// }
//}
func DeviceServiceFromDeviceServiceAddRequest(ds DeviceServiceAddRequest) models.DeviceService {
var mds models.DeviceService
mds.Id = ds.Id
mds.Name = ds.Name
mds.Config = ds.Config
mds.DeviceLibraryId = ds.DeviceLibraryId
mds.ExpertMode = ds.ExpertMode
mds.ExpertModeContent = ds.ExpertModeContent
mds.DockerParamsSwitch = ds.DockerParamsSwitch
mds.DockerParams = ds.DockerParams
mds.DriverType = ds.DriverType
return mds
}
type DeviceServiceUpdateRequest struct {
Id string `json:"id" binding:"required"`
DeviceLibraryId *string `json:"deviceLibraryId"`
Name *string `json:"name"`
Config *map[string]interface{} `json:"config"`
ExpertMode *bool `json:"expertMode"`
ExpertModeContent *string `json:"expertModeContent"`
DockerParamsSwitch *bool `json:"docker_params_switch"`
DockerParams *string `json:"docker_params"`
Platform constants.IotPlatform `json:"platform"`
//IsIgnoreRunStatus bool
}
//func FromRpcToUpdateDeviceService(rpc *deviceserviceProto.UpdateDeviceService) DeviceServiceUpdateRequest {
// var config map[string]interface{}
// if rpc.Config != nil {
// _ = json.Unmarshal(rpc.Config, &config)
// }
// return DeviceServiceUpdateRequest{
// Id: rpc.Id,
// Name: rpc.Name,
// DeviceLibraryId: rpc.DeviceLibraryId,
// Config: &config,
// ExpertMode: rpc.ExpertMode,
// ExpertModeContent: rpc.ExpertModeContent,
// DockerParamsSwitch: rpc.DockerParamsSwitch,
// DockerParams: rpc.DockerParams,
// }
//}
type UpdateDeviceServiceRunStatusRequest struct {
Id string `json:"id"`
RunStatus int `json:"run_status" binding:"required,oneof=1 2"`
}
type DeviceServiceRunLogRequest struct {
Id string `json:"id"`
Operate int `json:"operate" binding:"required,oneof=1 2"`
}
type DeviceServiceDeleteRequest struct {
Id string `json:"id" binding:"required"`
}
//func FromUpdateDeviceServiceRunStatusToRpc(req UpdateDeviceServiceRunStatusRequest) *deviceserviceProto.UpdateDeviceServiceRunStatusRequest {
// return &deviceserviceProto.UpdateDeviceServiceRunStatusRequest{
// Id: req.Id,
// RunStatus: int32(req.RunStatus),
// }
//}
//
//func FromDeviceServiceSearchQueryRequestToRpc(req DeviceServiceSearchQueryRequest) *deviceserviceProto.DeviceServiceSearchRequest {
// return &deviceserviceProto.DeviceServiceSearchRequest{
// BaseSearchConditionQuery: FromBaseSearchConditionQueryToRpc(req.BaseSearchConditionQuery),
// DeviceLibraryId: req.DeviceLibraryId,
// DriverType: int32(req.DriverType),
// }
//}
//func FromRpcToUpdateDeviceServiceRunStatus(rpc *deviceserviceProto.UpdateDeviceServiceRunStatusRequest) UpdateDeviceServiceRunStatusRequest {
// return UpdateDeviceServiceRunStatusRequest{
// Id: rpc.Id,
// RunStatus: int(rpc.RunStatus),
// }
//}
func ReplaceDeviceServiceModelFieldsWithDTO(ds *models.DeviceService, patch DeviceServiceUpdateRequest) {
if patch.Config != nil {
ds.Config = *patch.Config
}
if patch.DeviceLibraryId != nil {
ds.DeviceLibraryId = *patch.DeviceLibraryId
}
if patch.ExpertMode != nil {
ds.ExpertMode = *patch.ExpertMode
}
if patch.ExpertModeContent != nil {
ds.ExpertModeContent = *patch.ExpertModeContent
}
if patch.DockerParamsSwitch != nil {
ds.DockerParamsSwitch = *patch.DockerParamsSwitch
}
if patch.DockerParams != nil {
ds.DockerParams = *patch.DockerParams
}
if patch.Platform != "" {
ds.Platform = patch.Platform
}
}
type DeviceServiceSearchQueryRequest struct {
BaseSearchConditionQuery `schema:",inline"`
ProductId string `form:"productId"`
CloudProductId string `form:"cloudProductId"`
DeviceLibraryId string `form:"deviceLibraryId"` // 驱动库ID
DeviceLibraryIds string `form:"deviceLibraryIds"` // 驱动库IDs
Platform string `form:"platform"`
DriverType int `form:"driver_type" binding:"omitempty,oneof=1 2"` //驱动库类型1驱动2三方应用
}
//func ToDeviceServiceSearchQueryRequestDTO(req *deviceserviceProto.DeviceServiceSearchRequest) DeviceServiceSearchQueryRequest {
//
// if req.BaseSearchConditionQuery == nil {
// return DeviceServiceSearchQueryRequest{
// DeviceLibraryId: req.DeviceLibraryId,
// DriverType: int(req.DriverType),
// }
// } else {
// return DeviceServiceSearchQueryRequest{
// BaseSearchConditionQuery: ToBaseSearchConditionQueryDTO(req.BaseSearchConditionQuery),
// DeviceLibraryId: req.DeviceLibraryId,
// DriverType: int(req.DriverType),
// }
// }
//}
//func FromDeviceServiceUpdateToRpc(req DeviceServiceUpdateRequest) *deviceserviceProto.UpdateDeviceService {
// var byteConfig []byte
// if req.Config != nil {
// byteConfig, _ = json.Marshal(&req.Config)
// } else {
// byteConfig = nil
// }
//
// return &deviceserviceProto.UpdateDeviceService{
// Id: req.Id,
// Name: req.Name,
// DeviceLibraryId: req.DeviceLibraryId,
// Config: byteConfig,
// ExpertMode: req.ExpertMode,
// ExpertModeContent: req.ExpertModeContent,
// DockerParamsSwitch: req.DockerParamsSwitch,
// DockerParams: req.DockerParams,
// }
//}
/************** Response **************/
type DeviceServiceResponse struct {
Id string `json:"id"`
Name string `json:"name"`
DeviceLibrary DeviceLibraryResponse `json:"deviceLibrary"`
//Version string `json:"version"`
RunStatus int `json:"runStatus"`
Config interface{} `json:"config"`
ExpertMode bool `json:"expertMode"`
ExpertModeContent string `json:"expertModeContent"`
DockerParamsSwitch bool `json:"dockerParamsSwitch"`
DockerParams string `json:"dockerParams"`
CreateAt int64 `json:"create_at"`
ImageExist bool `json:"imageExist"`
Platform string `json:"platform"`
}
func DeviceServiceResponseFromModel(ds models.DeviceService, dl models.DeviceLibrary) DeviceServiceResponse {
return DeviceServiceResponse{
Id: ds.Id,
Name: ds.Name,
//Version: DeviceLibraryResponseFromModel(dl).Version,
DeviceLibrary: DeviceLibraryResponseFromModel(dl),
RunStatus: ds.RunStatus,
Config: ds.Config,
ExpertMode: ds.ExpertMode,
ExpertModeContent: ds.ExpertModeContent,
DockerParamsSwitch: ds.DockerParamsSwitch,
DockerParams: ds.DockerParams,
ImageExist: ds.ImageExist,
CreateAt: ds.Created,
Platform: string(ds.Platform),
}
}
//func FromDeviceServiceRpcToResponse(ds *deviceserviceProto.DeviceService, dl *devicelibraryProto.DeviceLibrary) DeviceServiceResponse {
// var cfg map[string]interface{}
// _ = json.Unmarshal(ds.Config, &cfg)
// return DeviceServiceResponse{
// Id: ds.Id,
// Name: ds.Name,
// RunStatus: int(ds.RunStatus),
// DeviceLibrary: FromDeviceLibraryRpcToResponse(dl),
// Config: cfg,
// ExpertMode: ds.ExpertMode,
// ExpertModeContent: ds.ExpertModeContent,
// DockerParamsSwitch: ds.DockerParamsSwitch,
// DockerParams: ds.DockerParams,
// ImageExist: ds.ImageExist,
// }
//}
func FromYamlStrToMap(yamlStr string) (m map[string]interface{}, err error) {
err = yaml.Unmarshal([]byte(yamlStr), &m)
if err != nil {
return nil, err
}
return m, nil
}
type UpdateDeviceServiceRunStatusResponse struct {
Id string `json:"id"`
RunStatus int `json:"run_status"`
}
type UpdateServiceLogLevelConfigRequest struct {
Id string `json:"id"` // 驱动或应用ID
LogLevel int64 `json:"logLevel"`
}