func (req *ArchiveRequest) GetSmapMessage(thing interface{}) *common.SmapMessage { var msg = new(common.SmapMessage) var rdg = new(common.SmapNumberReading) value := ob.Eval(req.value, thing) switch t := value.(type) { case int64: rdg.Value = float64(t) case uint64: rdg.Value = float64(t) case float64: rdg.Value = t } rdg.Time = req.getTime(thing) if len(req.uuid) > 0 && req.uuidActual == "" { req.uuidActual = common.UUID(ob.Eval(req.uuid, thing).(string)) } else if req.uuidActual == "" { req.uuidActual = common.UUID(req.UUID) } msg.UUID = req.uuidActual msg.Path = req.URI + "/" + req.Value msg.Readings = []common.Reading{rdg} if len(req.metadataExpr) > 0 { msg.Metadata = make(common.Dict) msg.Properties = new(common.SmapProperties) if md, ok := ob.Eval(req.metadataExpr, thing).(map[string]interface{}); ok { for k, v := range md { val := fmt.Sprintf("%s", v) if k == "UnitofTime" { msg.Properties.UnitOfTime, _ = common.ParseUOT(val) } else if k == "UnitofMeasure" { msg.Properties.UnitOfMeasure = val } msg.Metadata[k] = val } } } return msg }
func (req *ArchiveRequest) getTime(thing interface{}) uint64 { if len(req.time) == 0 { return uint64(time.Now().UnixNano()) } timeString, ok := ob.Eval(req.time, thing).(string) if ok { parsedTime, err := time.Parse(req.TimeParse, timeString) if err != nil { return uint64(time.Now().UnixNano()) } return uint64(parsedTime.UnixNano()) } return uint64(time.Now().UnixNano()) }