예제 #1
0
        public async Task <ActionResult <MonitorRoom> > DeassignMonitor([FromQuery] MonitorKey monitorKey)
        {
            await _monitorStore.DeassignMonitorAsync(monitorKey);

            var result = await _monitorStore.FindMonitorUnassignedDetailsAsync(monitorKey);

            return(Ok(result));
        }
예제 #2
0
        public async Task <ActionResult <MonitorRoom> > AssignMonitor([FromQuery] MonitorKey monitorKey, [FromBody] MonitorRoom monitorRoom)
        {
            monitorRoom.SetMonitorKey(monitorKey);
            await _monitorStore.AssignMonitorAsync(monitorRoom);

            MonitorRoom result = await _monitorStore.FindMonitorRoomDetailsAsync(monitorKey);

            return(Ok(result));
        }
예제 #3
0
        public async Task DeassignMonitorAsync(MonitorKey monitorKey)
        {
            using SqlConnection connection = new SqlConnection(_connectionString);
            await connection.OpenAsync();

            await connection.ExecuteAsync(
                "Monitor_Deassign_tr",
                monitorKey,
                commandType : CommandType.StoredProcedure);
        }
예제 #4
0
        //Try to get counter without lock
        private Counter GetOrCreateCounter(MonitorKey key)
        {
            Counter counter;

            if (!_monitors.TryGetValue(key, out counter))
            {
                counter = SafeCreateCounter(key);
            }

            return(counter);
        }
예제 #5
0
        private Counter SafeCreateCounter(MonitorKey key)
        {
            Counter counter;

            lock (_createCounterLock)
            {
                if (!_monitors.TryGetValue(key, out counter))
                {
                    counter = new Counter(key);
                    _monitors.Add(key, counter);
                }
            }

            return(counter);
        }
예제 #6
0
        public async Task <MonitorUnassigned> FindMonitorUnassignedDetailsAsync(MonitorKey monitorKey)
        {
            using SqlConnection connection = new SqlConnection(_connectionString);
            await connection.OpenAsync();

            var result = await connection.QuerySingleOrDefaultAsync <MonitorUnassigned>(
                @"SELECT * FROM MonitorUnassigned_V 
                    WHERE HotelChain = @HotelChain
                    AND CountryCode = @CountryCode
                    AND Town = @Town
                    AND Suburb = @Suburb
                    AND MACAddress = @MACAddress",
                monitorKey
                );

            return(result);
        }
예제 #7
0
        /// <summary>
        /// 报警通知回调
        /// </summary>
        /// <param name="alarm"></param>
        void MessageCore_OnAlarmReceived(Alarm alarm)
        {
            string msg = "DeviceID:" + alarm.DeviceID +
                         "\r\nSN:" + alarm.SN +
                         "\r\nCmdType:" + alarm.CmdType +
                         "\r\nAlarmPriority:" + alarm.AlarmPriority +
                         "\r\nAlarmMethod:" + alarm.AlarmMethod +
                         "\r\nAlarmTime:" + alarm.AlarmTime +
                         "\r\nAlarmDescription:" + alarm.AlarmDescription;

            Invoke(new Action(() =>
            {
                MessageBox.Show(msg);
                var key = new MonitorKey()
                {
                    CmdType  = CommandType.Play,
                    DeviceID = alarm.DeviceID
                };
                _messageCore.NodeMonitorService[key.ToString()].AlarmResponse(alarm);
                //txtMsg.Text = msg;
            }));
        }
 public PersistenceStopWatch(IMonitoring monitoring, MonitorKey key)
 {
     _monitoring = monitoring;
     _key        = key;
 }
예제 #9
0
        public async Task <IActionResult> HandleMonitorRecord([FromBody] MonitorRecord monitorRecord)
        {
            HotelKey hotelKey = ParseHotelKeyFromClaims(User);

            MonitorKey monitorKey = new MonitorKey
            {
                HotelChain  = hotelKey.HotelChain,
                CountryCode = hotelKey.CountryCode,
                Town        = hotelKey.Town,
                Suburb      = hotelKey.Suburb,
                MACAddress  = monitorRecord.MACAddress
            };


            monitorRecord.Logs.ForEach(async log =>
            {
                try
                {
                    await _monitorStore.AddMonitorLogAsync(
                        hotelKey,
                        monitorRecord.MACAddress,
                        log);
                }
                catch (SqlException ex)
                {
                    StringBuilder errorMessages = new StringBuilder();
                    for (int i = 0; i < ex.Errors.Count; i++)
                    {
                        errorMessages.Append("Index #" + i + "\n" +
                                             "Message: " + ex.Errors[i].Message + "\n" +
                                             "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                                             "Source: " + ex.Errors[i].Source + "\n" +
                                             "Procedure: " + ex.Errors[i].Procedure + "\n");
                    }
                    Console.WriteLine(errorMessages.ToString());
                }
            });



            MonitorRoom monitorRoom = await _monitorStore.FindMonitorRoomDetailsAsync(monitorKey);

            if (monitorRoom != null)
            {
                monitorRecord.Readings.ForEach(async reading =>
                {
                    try
                    {
                        await _monitorStore.AddMonitorReadingAsync(
                            monitorRoom,
                            reading);
                    }
                    catch (SqlException ex)
                    {
                        StringBuilder errorMessages = new StringBuilder();
                        for (int i = 0; i < ex.Errors.Count; i++)
                        {
                            errorMessages.Append("Index #" + i + "\n" +
                                                 "Message: " + ex.Errors[i].Message + "\n" +
                                                 "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                                                 "Source: " + ex.Errors[i].Source + "\n" +
                                                 "Procedure: " + ex.Errors[i].Procedure + "\n");
                        }
                        Console.WriteLine(errorMessages.ToString());
                    }
                });
            }

            return(StatusCode(StatusCodes.Status201Created));
        }
예제 #10
0
 private StopWatch Create(MonitorKey key)
 {
     return(new PersistenceStopWatch(this, key));
 }
예제 #11
0
 public void Inc(MonitorKey key)
 {
     UpdateCounter(key, 1.0);
 }
예제 #12
0
 public void Set(MonitorKey key, double value)
 {
     SetCounter(key, value);
 }
예제 #13
0
 public void Add(MonitorKey key, double value)
 {
     UpdateCounter(key, value);
 }
예제 #14
0
 public StopWatch Start(MonitorKey key)
 {
     return(Create(key).Start());
 }
예제 #15
0
        private void SetCounter(MonitorKey key, double value)
        {
            Counter counter = GetOrCreateCounter(key);

            counter.Set(value);
        }
예제 #16
0
        private void UpdateCounter(MonitorKey key, double value)
        {
            Counter counter = GetOrCreateCounter(key);

            counter.Update(value);
        }