summaryrefslogtreecommitdiff
path: root/cloud/pkg/devicecontroller/controller/upstream.go
diff options
context:
space:
mode:
Diffstat (limited to 'cloud/pkg/devicecontroller/controller/upstream.go')
-rw-r--r--cloud/pkg/devicecontroller/controller/upstream.go30
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
+}