158 lines
8.1 KiB
Go
158 lines
8.1 KiB
Go
//
|
|
// Copyright (C) 2022-2023 Intel Corporation
|
|
// Copyright (C) 2023-2025 IOTech Ltd
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package interfaces
|
|
|
|
import (
|
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/dtos"
|
|
|
|
"github.com/edgexfoundry/go-mod-bootstrap/v4/bootstrap/interfaces"
|
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/clients/logger"
|
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/models"
|
|
|
|
sdkModels "github.com/edgexfoundry/device-sdk-go/v4/pkg/models"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
// UpdatableConfig interface allows services to have custom configuration populated from configuration stored
|
|
// in the Configuration Provider (aka Consul). Services using custom configuration must implement this interface
|
|
// on their custom configuration, even if they do not use Configuration Provider. If they do not use the
|
|
// Configuration Provider they can have a dummy implementation of this interface.
|
|
// This wraps the actual interface from go-mod-bootstrap so device service code doesn't have to have the additional
|
|
// direct import of go-mod-bootstrap.
|
|
type UpdatableConfig interface {
|
|
interfaces.UpdatableConfig
|
|
}
|
|
|
|
// Authentication is a typed boolean for AddRoute calls
|
|
type Authentication bool
|
|
|
|
const (
|
|
Unauthenticated Authentication = false
|
|
Authenticated Authentication = true
|
|
)
|
|
|
|
// DeviceServiceSDK defines the interface for an EdgeX Device Service SDK
|
|
type DeviceServiceSDK interface {
|
|
// AddDevice adds a new Device to the Device Service and Core Metadata
|
|
// Returns new Device id or non-nil error.
|
|
AddDevice(device models.Device) (string, error)
|
|
// Devices return all managed Devices from cache
|
|
Devices() []models.Device
|
|
// GetDeviceByName returns the Device by its name if it exists in the cache, or returns an error.
|
|
GetDeviceByName(name string) (models.Device, error)
|
|
// UpdateDevice updates the Device in the cache and ensures that the
|
|
// copy in Core Metadata is also updated.
|
|
UpdateDevice(device models.Device) error
|
|
// RemoveDeviceByName removes the specified Device by name from the cache and ensures that the
|
|
// instance in Core Metadata is also removed.
|
|
RemoveDeviceByName(name string) error
|
|
// AddDeviceProfile adds a new DeviceProfile to the Device Service and Core Metadata
|
|
// Returns new DeviceProfile id or non-nil error.
|
|
AddDeviceProfile(profile models.DeviceProfile) (string, error)
|
|
// DeviceProfiles return all managed DeviceProfiles from cache
|
|
DeviceProfiles() []models.DeviceProfile
|
|
// GetProfileByName returns the Profile by its name if it exists in the cache, or returns an error.
|
|
GetProfileByName(name string) (models.DeviceProfile, error)
|
|
// UpdateDeviceProfile updates the DeviceProfile in the cache and ensures that the
|
|
// copy in Core Metadata is also updated.
|
|
UpdateDeviceProfile(profile models.DeviceProfile) error
|
|
// RemoveDeviceProfileByName removes the specified DeviceProfile by name from the cache and ensures that the
|
|
// instance in Core Metadata is also removed.
|
|
RemoveDeviceProfileByName(name string) error
|
|
// AddProvisionWatcher adds a new Watcher to the cache and Core Metadata
|
|
// Returns new Watcher id or non-nil error.
|
|
AddProvisionWatcher(watcher models.ProvisionWatcher) (string, error)
|
|
// ProvisionWatchers return all managed Watchers from cache
|
|
ProvisionWatchers() []models.ProvisionWatcher
|
|
// GetProvisionWatcherByName returns the Watcher by its name if it exists in the cache, or returns an error.
|
|
GetProvisionWatcherByName(name string) (models.ProvisionWatcher, error)
|
|
// UpdateProvisionWatcher updates the Watcher in the cache and ensures that the
|
|
// copy in Core Metadata is also updated.
|
|
UpdateProvisionWatcher(watcher models.ProvisionWatcher) error
|
|
// RemoveProvisionWatcher removes the specified Watcher by name from the cache and ensures that the
|
|
// instance in Core Metadata is also removed.
|
|
RemoveProvisionWatcher(name string) error
|
|
// DeviceResource retrieves the specific DeviceResource instance from cache according to
|
|
// the Device name and Device Resource name
|
|
DeviceResource(deviceName string, deviceResource string) (models.DeviceResource, bool)
|
|
// DeviceCommand retrieves the specific DeviceCommand instance from cache according to
|
|
// the Device name and Command name
|
|
DeviceCommand(deviceName string, commandName string) (models.DeviceCommand, bool)
|
|
// AddDeviceAutoEvent adds a new AutoEvent to the Device with given name
|
|
AddDeviceAutoEvent(deviceName string, event models.AutoEvent) error
|
|
// RemoveDeviceAutoEvent removes an AutoEvent from the Device with given name
|
|
RemoveDeviceAutoEvent(deviceName string, event models.AutoEvent) error
|
|
// UpdateDeviceOperatingState updates the OperatingState for the Device with given name
|
|
// in Core Metadata
|
|
UpdateDeviceOperatingState(name string, state models.OperatingState) error
|
|
// DeviceExistsForName returns true if a device exists in cache with the specified name, otherwise it returns false.
|
|
DeviceExistsForName(name string) bool
|
|
// PatchDevice patches the specified device properties in Core Metadata. Device name is required
|
|
// to be provided in the UpdateDevice. Note that all properties of UpdateDevice are pointers
|
|
// and anything that is nil will not modify the device. In the case of Arrays and Maps, the whole new value
|
|
// must be sent, as it is applied as an overwrite operation.
|
|
PatchDevice(updateDevice dtos.UpdateDevice) error
|
|
|
|
// Run starts this Device Service. This should not be called directly by a device service. Instead,
|
|
// call startup.Bootstrap(...)
|
|
Run() error
|
|
|
|
// Name returns the name of this Device Service
|
|
Name() string
|
|
|
|
// Version returns the version number of this Device Service
|
|
Version() string
|
|
|
|
// AsyncReadingsEnabled returns a bool value to indicate whether the asynchronous reading is enabled.
|
|
AsyncReadingsEnabled() bool
|
|
|
|
// AsyncValuesChannel returns a channel to allow developer send asynchronous reading back to SDK.
|
|
AsyncValuesChannel() chan *sdkModels.AsyncValues
|
|
|
|
// DiscoveredDeviceChannel returns a channel to allow developer send discovered devices back to SDK.
|
|
DiscoveredDeviceChannel() chan []sdkModels.DiscoveredDevice
|
|
|
|
// DeviceDiscoveryEnabled returns a bool value to indicate whether device discovery is enabled.
|
|
DeviceDiscoveryEnabled() bool
|
|
|
|
// DriverConfigs retrieves the driver specific configuration
|
|
DriverConfigs() map[string]string
|
|
|
|
// AddCustomRoute allows leveraging the existing internal web server to add routes specific to Device Service.
|
|
AddCustomRoute(route string, authentication Authentication, handler func(e echo.Context) error, methods ...string) error
|
|
|
|
// LoadCustomConfig uses the Config Processor from go-mod-bootstrap to attempt to load service's
|
|
// custom configuration. It uses the same command line flags to process the custom config in the same manner
|
|
// as the standard configuration.
|
|
LoadCustomConfig(customConfig UpdatableConfig, sectionName string) error
|
|
|
|
// ListenForCustomConfigChanges uses the Config Processor from go-mod-bootstrap to attempt to listen for
|
|
// changes to the specified custom configuration section. LoadCustomConfig must be called previously so that
|
|
// the instance of sdkService.configProcessor has already been set.
|
|
ListenForCustomConfigChanges(configToWatch interface{}, sectionName string, changedCallback func(interface{})) error
|
|
|
|
// LoggingClient returns the logger.LoggingClient.
|
|
LoggingClient() logger.LoggingClient
|
|
|
|
// SecretProvider returns the interfaces.SecretProvider.
|
|
SecretProvider() interfaces.SecretProvider
|
|
|
|
// MetricsManager returns the Metrics Manager used to register counter, gauge, gaugeFloat64 or timer metric types from
|
|
// github.com/rcrowley/go-metrics
|
|
MetricsManager() interfaces.MetricsManager
|
|
|
|
// PublishDeviceDiscoveryProgressSystemEvent publishes a device discovery progress system event through the EdgeX message bus
|
|
PublishDeviceDiscoveryProgressSystemEvent(progress, discoveredDeviceCount int, message string)
|
|
|
|
// PublishProfileScanProgressSystemEvent publishes a profile scan progress system event through the EdgeX message bus.
|
|
PublishProfileScanProgressSystemEvent(reqId string, progress int, message string)
|
|
|
|
// PublishGenericSystemEvent publishes a generic system event through the EdgeX message bus
|
|
PublishGenericSystemEvent(eventType, action string, details any)
|
|
}
|