-
Notifications
You must be signed in to change notification settings - Fork 479
/
event.go
103 lines (90 loc) · 3.02 KB
/
event.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*******************************************************************************
* Copyright 2018 Dell Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*******************************************************************************/
package models
import (
correlation "github.com/edgexfoundry/edgex-go/internal/pkg/correlation/models"
"github.com/edgexfoundry/edgex-go/internal/pkg/db"
contract "github.com/edgexfoundry/go-mod-core-contracts/models"
"github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"
"github.com/pkg/errors"
)
// Event
//
// Deprecated: Mongo functionality is deprecated as of the Geneva release.
type Event struct {
Created int64 `bson:"created"`
Modified int64 `bson:"modified"`
Origin int64 `bson:"origin"`
Id bson.ObjectId `bson:"_id,omitempty"`
Uuid string `bson:"uuid,omitempty"`
Pushed int64 `bson:"pushed"`
Device string `bson:"device"` // Device identifier (name or id)
Readings []mgo.DBRef `bson:"readings,omitempty"` // List of readings
Checksum string `bson:"checksum,omitempty"` // checksum used to identify events
}
func (e *Event) ToContract(transform readingTransform) (c contract.Event, err error) {
id := e.Uuid
if id == "" {
id = e.Id.Hex()
}
c.ID = id
c.Created = e.Created
c.Modified = e.Modified
c.Origin = e.Origin
c.Pushed = e.Pushed
c.Device = e.Device
c.Readings = []contract.Reading{}
for _, dbRef := range e.Readings {
var r Reading
if r, err = transform.DBRefToReading(dbRef); err != nil {
return contract.Event{}, err
}
c.Readings = append(c.Readings, r.ToContract())
}
return
}
func (e *Event) FromContract(from correlation.Event, transform readingTransform) (id string, err error) {
e.Id, e.Uuid, err = fromContractId(from.ID)
if err != nil {
return
}
e.Created = from.Created
e.Modified = from.Modified
e.Origin = from.Origin
e.Pushed = from.Pushed
e.Device = from.Device
e.Checksum = from.Checksum
e.Readings = []mgo.DBRef{}
for _, reading := range from.Readings {
var readingModel Reading
if rid, err := readingModel.FromContract(reading); err != nil {
return "", errors.New(err.Error() + " id: " + rid)
}
var dbRef mgo.DBRef
if dbRef, err = transform.ReadingToDBRef(readingModel); err != nil {
return
}
e.Readings = append(e.Readings, dbRef)
}
id = toContractId(e.Id, e.Uuid)
return
}
func (e *Event) TimestampForUpdate() {
e.Modified = db.MakeTimestamp()
}
func (e *Event) TimestampForAdd() {
e.TimestampForUpdate()
e.Created = e.Modified
}