diff options
Diffstat (limited to 'cloud/pkg/devicecontroller/controller/upstream.go')
| -rw-r--r-- | cloud/pkg/devicecontroller/controller/upstream.go | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/cloud/pkg/devicecontroller/controller/upstream.go b/cloud/pkg/devicecontroller/controller/upstream.go index 566a393d4..d1bcc3836 100644 --- a/cloud/pkg/devicecontroller/controller/upstream.go +++ b/cloud/pkg/devicecontroller/controller/upstream.go @@ -135,8 +135,9 @@ func (uc *UpstreamController) updateDeviceStatus() { } deviceStatus := &DeviceStatus{Status: cacheDevice.Status} for twinName, twin := range msgTwin.Twin { - for i, cacheTwin := range deviceStatus.Status.Twins { - if twinName == cacheTwin.PropertyName && twin.Actual != nil && twin.Actual.Value != nil { + deviceTwin := findTwinByName(twinName, &deviceStatus.Status.Twins) + if deviceTwin != nil { + if twin.Actual != nil && twin.Actual.Value != nil { reported := v1beta1.TwinProperty{} reported.Value = *twin.Actual.Value reported.Metadata = make(map[string]string) @@ -146,8 +147,20 @@ func (uc *UpstreamController) updateDeviceStatus() { if twin.Metadata != nil { reported.Metadata["type"] = twin.Metadata.Type } - deviceStatus.Status.Twins[i].Reported = reported - break + deviceTwin.Reported = reported + } + + if twin.Expected != nil && twin.Expected.Value != nil { + observedDesired := v1beta1.TwinProperty{} + observedDesired.Value = *twin.Expected.Value + observedDesired.Metadata = make(map[string]string) + if twin.Expected.Metadata != nil { + observedDesired.Metadata["timestamp"] = strconv.FormatInt(twin.Expected.Metadata.Timestamp, 10) + } + if twin.Metadata != nil { + observedDesired.Metadata["type"] = twin.Metadata.Type + } + deviceTwin.ObservedDesired = observedDesired } } } @@ -212,3 +225,12 @@ func NewUpstreamController(dc *DownstreamController) (*UpstreamController, error } return uc, nil } + +func findTwinByName(twinName string, twins *[]v1beta1.Twin) *v1beta1.Twin { + for _, twin := range *twins { + if twinName == twin.PropertyName { + return &twin + } + } + return nil +} |
