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);
            }
        }
Exemplo n.º 2
0
        // 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");
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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));
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }