Example #1
0
        // GET: /Monitoring/SummaryReport/GetCurrentDeviceStatus
        public ActionResult GetCurrentDeviceStatus(JQueryDataTableParamModel param, int?clientID)
        {
            param.iSortColumn = null;

            try
            {
                if (clientID == null)
                {
                    var ret = new
                    {
                        status = 0,
                        error  = "Client ID cannot be null."
                    };
                    return(Json(ret));
                }

                var serviceClient = new RMS.Centralize.WebSite.Proxy.ClientService().clientService;
                var clientResult  = serviceClient.GetClient(GetClientBy.ClientID, clientID, null, null, true, false);
                if (clientResult != null && clientResult.IsSuccess && clientID != null)
                {
                    var service = new RMS.Centralize.WebSite.Proxy.SummaryReportService().summaryReportService;
                    var result  = service.SearchSummaryMonitoring(param, null, null, null, null
                                                                  , null, null, "1", clientID);

                    List <DeviceStatus> lDeviceStatuses = new List <DeviceStatus>();

                    foreach (var monitoringProfileDevice in clientResult.ListMonitoringProfileDevices)
                    {
                        RmsMonitoringProfileDevice device = monitoringProfileDevice;

                        if (result.ListSummaryMonitorings == null)
                        {
                            result.ListSummaryMonitorings = new List <ReportSummaryMonitoring>();
                        }

                        var summaryMonitorings = result.ListSummaryMonitorings.Where(smg => smg.MonitoringProfileDeviceId == device.MonitoringProfileDeviceId);
                        List <ReportSummaryMonitoring> lReports = new List <ReportSummaryMonitoring>(summaryMonitorings.ToList());


                        // ถ้าเจอ แสดงว่า ไม่ปกติ
                        if (lReports.Count > 0)
                        {
                            foreach (var report in lReports)
                            {
                                int?deviceTypeID = FindDeviceTypeIDByDeviceID(clientResult.ListDevices, report.DeviceId);
                                var dt           = clientResult.ListDeviceType.First(t => t.DeviceTypeId == deviceTypeID);
                                if (dt != null)
                                {
                                    DeviceStatus ds = new DeviceStatus(report.Id, dt.DeviceTypeId, dt.DeviceType, dt.DisplayOrder,
                                                                       device.DeviceDescription
                                                                       , report.Status, report.MessageId, report.Message, report.MessageRemark, report.MonitoringProfileDeviceId
                                                                       , report.LastActionDateTime, report.LastActionType, report.LevelName
                                                                       , report.ColorCode, report.ColorTagStart, report.ColorTagEnd, report.MessageDateTime);

                                    lDeviceStatuses.Add(ds);
                                }
                            }
                        }
                        // ถ้าไม่พบ แสดงว่า อุปกรณ์ปกติ ให้ใส่ dummy data
                        else
                        {
                            int?deviceTypeID = FindDeviceTypeIDByDeviceID(clientResult.ListDevices, device.DeviceId);
                            var dt           = clientResult.ListDeviceType.First(t => t.DeviceTypeId == deviceTypeID);
                            if (dt != null)
                            {
                                DeviceStatus ds = new DeviceStatus(0, dt.DeviceTypeId, dt.DeviceType, dt.DisplayOrder,
                                                                   device.DeviceDescription, 0, 0, "Good", null, device.MonitoringProfileDeviceId, null, null, null, "success", "<span class=\"label label-success\">", "</span>", null);

                                lDeviceStatuses.Add(ds);
                            }
                        }
                    }

                    lDeviceStatuses = new List <DeviceStatus>(lDeviceStatuses.OrderBy(o => o.DisplayOrder).ThenBy(o => o.DeviceDescription).ThenBy(o => o.MessageDateTime));

                    string deviceName = "";
                    foreach (var deviceStatus in lDeviceStatuses)
                    {
                        if (deviceStatus.DeviceDescription == deviceName)
                        {
                            deviceStatus.DeviceDescription = "";
                            continue;
                        }
                        deviceName = deviceStatus.DeviceDescription;
                    }

                    int?totalRecords = 0;
                    totalRecords = lDeviceStatuses.Count;
                    var data = new
                    {
                        sEcho                = param.sEcho,
                        iTotalRecords        = totalRecords,
                        iTotalDisplayRecords = totalRecords,
                        aaData               = lDeviceStatuses,
                        status               = (result.IsSuccess) ? 1 : 0,
                        error                = result.ErrorMessage
                    };
                    return(Json(data));
                }



                var data2 = new
                {
                    status = 0,
                    error  = "Client Not Found"
                };

                return(Json(data2));
            }
            catch (Exception ex)
            {
                var data = new
                {
                    status = 0,
                    error  = ex.Message
                };
                new RMSWebException(this, "0500", "GetCurrentDeviceStatus failed. " + ex.Message, ex, true);

                return(Json(data));
            }
        }
Example #2
0
        public List <DeviceStatus> SelfMonitoring(string clientCode)
        {
            /*
             *
             * 1. Call Centralize or Local to Get Client & Device Info for Monitoring
             * 2. Check Device Monitoring
             *
             */

            try
            {
                #region 1. Call Centralize to Get Client & Device Info for Monitoring
                string localStorage = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\LocalStorage";
                localStorage = (ConfigurationManager.AppSettings["RMS.LocalStorage"] ?? localStorage);
                string localClientFile = localStorage + @"\clientResult.xml";
                string xmlLocalClient  = string.Empty;
                if (File.Exists(localClientFile))
                {
                    lock (_lockClientFile)
                    {
                        xmlLocalClient = File.ReadAllText(localClientFile);
                    }
                }

                ClientResult clientResult = null;

                try
                {
                    if (xmlLocalClient == string.Empty)
                    {
                        throw new Exception("Local Client Data Not Found. Try to call server.");
                    }
                    clientResult = Helper.Serializer.XML.DeserializeObject <ClientResult>(xmlLocalClient);
                }
                catch (Exception myEx1)
                {
                    new RMSAppException(this, "0500", "SelfMonitoring failed. " + myEx1.Message, myEx1, true);

                    Configuration config;

                    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
                    configFile.ExeConfigFilename = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\Local.config";
                    config = ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None);

                    if (config.AppSettings.Settings["RMS.CLIENT_CODE"] != null)
                    {
                        clientCode = config.AppSettings.Settings["RMS.CLIENT_CODE"].Value;
                    }


                    ClientServiceClient cs = new ClientService().clientService;
                    clientResult = cs.GetClient(GetClientBy.ClientCode, null, clientCode, null, true, true);

                    try
                    {
                        var directoryName = Path.GetDirectoryName(localClientFile);
                        if (directoryName != null && !Directory.Exists(directoryName))
                        {
                            Directory.CreateDirectory(directoryName);
                        }

                        string strResultList = Serializer.XML.SerializeObject(clientResult);
                        lock (_lockClientFile)
                        {
                            using (TextWriter tw = new StreamWriter(localClientFile, false)) // Create & open the file
                            {
                                tw.Write(strResultList);
                                tw.Close();
                            }
                        }
                    }
                    catch (Exception myEx2)
                    {
                        new RMSAppException(this, "0500", "SelfMonitoring failed. " + myEx2.Message, myEx2, true);
                    }
                }

                if (clientResult == null)
                {
                    throw new Exception("Unable to restore clientResult object.");
                }

                int?deviceId = null;
                int?monitoringProfileDeviceId = null;

                var rmsMonitoringProfileDevicebyDeviceCode = RMS.Monitoring.Helper.Common.GetRmsMonitoringProfileDevicebyDeviceCode(clientResult, "CLIENT", RMS.Monitoring.Helper.Models.DeviceCode.Client);
                var rmsMonitoringProfileDevices            = rmsMonitoringProfileDevicebyDeviceCode;

                // for CLIENT code, there are only one rmsMonitoringProfileDevices
                if (rmsMonitoringProfileDevices.Count > 0)
                {
                    monitoringProfileDeviceId = rmsMonitoringProfileDevices[0].MonitoringProfileDeviceId;
                }

                #endregion

                List <RmsReportMonitoringRaw> monitoringRaws = new List <RmsReportMonitoringRaw>();

                #region 2. Check Device Monitoring

                try
                {
                    var monitoringService = new RMS.Monitoring.Core.MonitoringService();

                    // Performance
                    monitoringRaws.AddRange(monitoringService.Monitoring("performance", clientResult));

                    // Device
                    monitoringRaws.AddRange(monitoringService.Monitoring("device", clientResult));


                    //return monitoringRaws;
                }
                catch (Exception ex)
                {
                    throw new RMSAppException(this, "0500", "Check Local Device Monitoring failed. " + ex.Message, ex, false);
                }

                #endregion

                List <DeviceStatus> lDeviceStatuses = new List <DeviceStatus>();

                #region Reorder Process

                foreach (var raw in monitoringRaws)
                {
                    RmsMonitoringProfileDevice mpd =
                        clientResult.ListMonitoringProfileDevices.FirstOrDefault(a => a.MonitoringProfileDeviceId == raw.MonitoringProfileDeviceId);

                    if (mpd == null)
                    {
                        continue;              //Something wrong
                    }
                    RmsDevice rd = clientResult.ListDevices.FirstOrDefault(a => a.DeviceId == mpd.DeviceId);

                    if (rd == null)
                    {
                        continue;             //Something wrong
                    }
                    RmsDeviceType rdt = clientResult.ListDeviceType.FirstOrDefault(a => a.DeviceTypeId == rd.DeviceTypeId);

                    if (rdt == null)
                    {
                        continue;              //Something wrong
                    }
                    DeviceStatus ds = new DeviceStatus(rdt.DeviceTypeId, rdt.DeviceType, rdt.DisplayOrder, mpd.DeviceDescription, raw.Message,
                                                       raw.MessageRemark, raw.MonitoringProfileDeviceId, raw.MessageDateTime);

                    lDeviceStatuses.Add(ds);
                }

                lDeviceStatuses = new List <DeviceStatus>(lDeviceStatuses.OrderBy(o => o.DisplayOrder).ThenBy(o => o.DeviceDescription).ThenBy(o => o.MessageDateTime));

                string deviceName = "";
                foreach (var deviceStatus in lDeviceStatuses)
                {
                    deviceStatus.MonitoringProfileDeviceID = null;

                    if (deviceStatus.DeviceDescription == deviceName)
                    {
                        deviceStatus.DeviceDescription = "";
                        continue;
                    }
                    deviceName = deviceStatus.DeviceDescription;
                }


                #endregion

                return(lDeviceStatuses);
            }
            catch (Exception ex)
            {
                throw new RMSAppException(this, "0500", "SelfMonitoring failed. " + ex.Message, ex, true);
            }
        }