public void Run(int minHour, int?maxHour, Alarm.Gravity gravity) { try { int minMin = minHour * 60 + 5; int?minMax = maxHour.HasValue ? (maxHour.Value * 60 + 5) : (int?)null; IEnumerable <Device> devices = deviceService.CheckDeviceCommunication(minMin, minMax); IList <Alarm> alarms = new List <Alarm>(); logger.Info($"{devices.Count()} device(s) which has Communication Alarms"); foreach (var device in devices) { bool createAlarm = true; foreach (Alarm alarm in device.Alarms) { if (alarm.AlarmType.Equals(Alarm.Type.CommuniationFailure) && alarm.AlarmGravity.Equals(gravity) && alarm.IsActive) { createAlarm = false; } } if (createAlarm) { Alarm alarm = device.Alarms .Where(e => e.AlarmType == Alarm.Type.CommuniationFailure) .Where(e => (int)e.AlarmGravity == ((int)gravity + 1) && e.IsActive) .OrderBy(e => e.OccuredAt).LastOrDefault(); if (alarm != null) { alarm.IsActive = false; alarmService.UpdateAlarm(device.Id, alarm); } alarmService.CreateCommunicationAlarm(device.Id, device.SiteId, device.LastCommunication, gravity); } } notificationService.SendNotifications(alarms); } catch (Exception e) { logger.Error($"Error on create communication alarms", e); } }
// TODO : Check for previous freeze alarm public void CreateFreezingAlarm(Telemetry telemetry, string siteId, FreezingProbability probability) { Alarm latestFreezeAlarm = alarmRepository.GetLatestAlarmByType(telemetry.DeviceId, Alarm.Type.FreezeWarning, null); if (latestFreezeAlarm == null) { Alarm.Gravity gravity = Alarm.Gravity.Information; if (probability == FreezingProbability.HIGH) { gravity = Alarm.Gravity.Serious; } if (probability == FreezingProbability.IMMINENT) { gravity = Alarm.Gravity.Critical; } CreateAlarm(telemetry.DeviceId, siteId, Alarm.Type.FreezeWarning, Alarm.AlarmSubtype.Freeze, gravity, "Gel détecté", $"Le capteur {telemetry.DeviceId} detecte du gel"); } }
public void TestCreateCommunicationAlarm1h() { //GIVEN string deviceId = "1"; string siteId = "2"; DateTime lastCom = new DateTime(2018, 1, 20, 14, 30, 0); Alarm.Gravity gravity = Alarm.Gravity.Information; Mock <IDeviceRepository> deviceRepo = new Mock <IDeviceRepository>(); Mock <IFreezeRepository> freezeRepo = new Mock <IFreezeRepository>(); //WHEN AlarmService service = new AlarmService(deviceRepo.Object, freezeRepo.Object); Alarm alarm = service.CreateCommunicationAlarm(deviceId, siteId, lastCom, gravity); //THEN deviceRepo.Verify(o => o.AddAlarm("1", It.Is <Alarm>(e => e.AlarmGravity == Alarm.Gravity.Information && e.AlarmType == Alarm.Type.CommuniationFailure && e.Description == "Le capteur n'a pas communiqué depuis le 20/01/2018 14:30" && e.ShortDescription == "Erreur de communication")), Times.Once); }
public Alarm CreateCommunicationAlarm(string deviceId, string siteId, DateTime lastCommunication, Alarm.Gravity gravity) { return(CreateAlarm(deviceId, siteId, Alarm.Type.CommuniationFailure, gravity, "Erreur de communication", $"Le capteur n'a pas communiqué depuis le {lastCommunication.ToString("dd/MM/yyyy HH:mm")}", null, null)); }
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); }
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); }