79 lines
2.2 KiB
Go
79 lines
2.2 KiB
Go
// -*- Mode: Go; indent-tabs-mode: t -*-
|
|
//
|
|
// Copyright (C) 2020 VMware
|
|
// Copyright (C) 2021-2023 IOTech Ltd
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package service
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/errors"
|
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/models"
|
|
|
|
"github.com/edgexfoundry/device-sdk-go/v4/internal/cache"
|
|
)
|
|
|
|
// AddDeviceAutoEvent adds a new AutoEvent to the Device with given name
|
|
func (s *deviceService) AddDeviceAutoEvent(deviceName string, event models.AutoEvent) error {
|
|
found := false
|
|
device, ok := cache.Devices().ForName(deviceName)
|
|
if !ok {
|
|
msg := fmt.Sprintf("failed to find device %s in cache", deviceName)
|
|
s.lc.Error(msg)
|
|
return errors.NewCommonEdgeX(errors.KindEntityDoesNotExist, msg, nil)
|
|
}
|
|
|
|
for _, e := range device.AutoEvents {
|
|
if e.SourceName == event.SourceName {
|
|
s.lc.Debugf("Updating existing AutoEvent %s for device %s", e.SourceName, deviceName)
|
|
e.Interval = event.Interval
|
|
e.OnChange = event.OnChange
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
|
|
if !found {
|
|
s.lc.Debugf("Adding new AutoEvent %s to device %s", event.SourceName, deviceName)
|
|
device.AutoEvents = append(device.AutoEvents, event)
|
|
err := cache.Devices().Update(device)
|
|
if err != nil {
|
|
s.lc.Errorf("failed to update device %s with AutoEvent change", deviceName)
|
|
return err
|
|
}
|
|
}
|
|
s.autoEventManager.RestartForDevice(deviceName)
|
|
|
|
return nil
|
|
}
|
|
|
|
// RemoveDeviceAutoEvent removes an AutoEvent from the Device with given name
|
|
func (s *deviceService) RemoveDeviceAutoEvent(deviceName string, event models.AutoEvent) error {
|
|
device, ok := cache.Devices().ForName(deviceName)
|
|
if !ok {
|
|
msg := fmt.Sprintf("failed to find device %s cannot in cache", deviceName)
|
|
s.lc.Error(msg)
|
|
return errors.NewCommonEdgeX(errors.KindEntityDoesNotExist, msg, nil)
|
|
}
|
|
|
|
for i, e := range device.AutoEvents {
|
|
if e.SourceName == event.SourceName {
|
|
s.lc.Debugf("Removing AutoEvent %s for device %s", e.SourceName, deviceName)
|
|
device.AutoEvents = append(device.AutoEvents[:i], device.AutoEvents[i+1:]...)
|
|
break
|
|
}
|
|
}
|
|
|
|
err := cache.Devices().Update(device)
|
|
if err != nil {
|
|
s.lc.Errorf("failed to update device %s with AutoEvent change", deviceName)
|
|
return err
|
|
}
|
|
s.autoEventManager.RestartForDevice(deviceName)
|
|
|
|
return nil
|
|
}
|