public Alarm GetLatestAlarmByType(string deviceId, Alarm.Type type, Alarm.Gravity?gravity) { IEnumerable <BsonDocument> pipeline = GetPipeline(deviceId, type, gravity); PipelineDefinition <Site, BsonDocument> pipelineDefinition = PipelineDefinition <Site, BsonDocument> .Create(pipeline); return(BsonIterator.Iterate(collection, pipelineDefinition, (BsonDocument e, Alarm item) => BsonSerializer.Deserialize <SingleBsonItem <Alarm> >(e).Item)); }
private IEnumerable <BsonDocument> GetPipeline(string deviceId, Alarm.Type type, Alarm.Gravity?gravity) { IList <BsonDocument> pipeline = new List <BsonDocument>(); BsonDocument unwindDeviceStage = new BsonDocument("$unwind", "$Devices"); pipeline.Add(unwindDeviceStage); BsonDocument projectDevicesStage = new BsonDocument("$project", new BsonDocument { { "_id", 0 }, { "Device", "$Devices" } }); pipeline.Add(projectDevicesStage); BsonDocument matchDeviceStage = new BsonDocument("$match", new BsonDocument("Device.Id", deviceId)); pipeline.Add(matchDeviceStage); BsonDocument unwindAlarmsStage = new BsonDocument("$unwind", "$Device.Alarms"); pipeline.Add(unwindAlarmsStage); BsonDocument projectAlarmsStage = new BsonDocument("$project", new BsonDocument { { "_id", 0 }, { "Item", "$Device.Alarms" } }); pipeline.Add(projectAlarmsStage); BsonDocument matchAlarmStage = new BsonDocument("$match", new BsonDocument { { "Item.IsActive", true }, { "Item.AlarmType", type } }); pipeline.Add(matchAlarmStage); if (gravity.HasValue) { BsonDocument matchGravityStage = new BsonDocument("$match", new BsonDocument { { "Item.AlarmGravity", gravity.Value } }); pipeline.Add(matchGravityStage); } return(pipeline); }
private void CreateAlarm(string deviceId, string siteId, Alarm.Type alarmType, Alarm.AlarmSubtype subtype, Alarm.Gravity alarmGravity, string shortDescription, string description) { Alarm alarm = new Alarm() { Id = $"{deviceId}-{DateTime.UtcNow.ToString("yyyyMMddHHmmss")}", DeviceId = deviceId, SiteId = siteId, IsActive = true, AlarmType = alarmType, AlarmGravity = alarmGravity, OccuredAt = DateTime.UtcNow, ShortDescription = shortDescription, Description = description, Subtype = subtype }; deviceRepository.AddAlarm(deviceId, alarm); }
public Alarm CreateAlarm(string deviceId, string siteId, Alarm.Type alarmType, Alarm.Gravity alarmGravity, string shortDescription, string description, DateTime?start, DateTime?end) { Alarm alarm = new Alarm() { Id = $"{deviceId}-alarm{DateTime.UtcNow.ToString("yyyyMMddHHmmss")}", DeviceId = deviceId, SiteId = siteId, IsActive = true, AlarmType = alarmType, AlarmGravity = alarmGravity, OccuredAt = DateTime.UtcNow, ShortDescription = shortDescription, Description = description, Start = start, End = end }; deviceRepository.AddAlarm(deviceId, alarm); return(alarm); }