亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? recordparsethread.cs

?? 監(jiān)控系統(tǒng)
?? CS
字號:
using System;
using System.IO;
using System.Threading;
using System.Collections;
using MonitorSystem.BasicClass;
using MonitorSystem.LogFileModule;
using MonitorSystem.RuleFileProcess;

namespace MonitorSystem.MonitorInterface
{
	/// <summary>
	/// LogRecord處理線程,將LogRecord與對應(yīng)XML文件中的規(guī)則對比,寫入報警信息
	/// 并將處理后的LogRecord寫入新的Log文件中,Log文件定時入隊列UploadLogQueue.
	/// </summary>
	public class RecordParseThread
	{
		private Thread m_Thread;
		private bool m_Pause;
		private bool m_Exit;

		private RecordQueue m_RecordQueue;
		private UploadLogQueue m_UploadLogQueue;
		private ConfigFile m_CfgFile;
		private SystemLog m_SysLog;
		private LogFile m_LogFile;
		private RuleFile m_Rule;
		public static Hashtable  m_xhTable = new Hashtable();
		private static Hashtable m_checkRule;	

		private string m_RuleFileName;
		private string m_RemoteFileName;
		private string m_LogNameHead;

		public static  Mutex     m_Lock = new Mutex(false);

		public RecordParseThread()
		{
			m_SysLog=new SystemLog();
			m_checkRule = Hashtable.Synchronized( m_xhTable );

			m_Pause = false;
			m_Exit = false;
		}

		public void Init(ref RecordQueue queRecord,ref UploadLogQueue queUploadLog,ConfigFile iCfgFile,ref LogFile iLogFile)
		{
			m_RecordQueue = queRecord;
			m_UploadLogQueue = queUploadLog;
			m_CfgFile = iCfgFile;
			m_LogFile = iLogFile;

			string LogPath = m_CfgFile.LogLocal_Path;
			m_LogNameHead = LogPath + m_CfgFile.LogFileHead;
			
		}

		public void Run()
		{
			while(true)
			{
				while(m_Pause)
				{
					try
					{
						Thread.Sleep(1000);
					}
					catch(Exception)
					{
					}
					continue;
				}
				if(m_Exit)
				{
					break;
				}

				
				if (m_RecordQueue.Count<=0)
				{
					
					try
					{
						Thread.Sleep(1000);
						continue;
					}
					catch(Exception)
					{
						continue;
					}
				}


				LogFile logRecord = new LogFile();
				logRecord = (LogFile)m_RecordQueue.Dequeue();

				string strPlatformID=String.Format("{0:0000}",logRecord.iPlatformID);
				string strNodeID=String.Format("{0:0000}",logRecord.iNodeID);
				m_RuleFileName=m_CfgFile.RuleLocal_Path;
				m_RemoteFileName = m_CfgFile.RuleRemote_Path;
				m_RuleFileName+=m_CfgFile.RuleFileNameFormat;
				m_RuleFileName=m_RuleFileName.Replace("XXXX", strPlatformID);
				m_RuleFileName=m_RuleFileName.Replace("YYYY", strNodeID);

				string tmpRuleFileName=m_RuleFileName.Replace(m_CfgFile.RuleLocal_Path,m_CfgFile.RuleTemp_Path);

				//如果logRecord是一條Update記錄,就將對應(yīng)的xml文件從\rule\temp 目錄下復(fù)制到\rule\Local目錄下,并刪除\rule\remote文件
				if(logRecord.strValue=="Update")
				{
					try
					{
                        //File.Delete(m_RemoteFileName);

						
						if(File.Exists(tmpRuleFileName))
						{
							File.Delete(m_RuleFileName);
							File.Move(tmpRuleFileName,m_RuleFileName);
						}

						lock(m_Lock)
						{
							UpdateCheckRule(logRecord.iPlatformID, logRecord.iNodeID, m_RuleFileName);
						}

					}
					catch(Exception ex)
					{
						m_SysLog.WriteToSysLog(ex.Message + ex.StackTrace);
					}
					continue;
				}

				try
				{
//					if(m_checkRule == null)
//					{
//						UpdateCheckRule(logRecord.iPlatformID, logRecord.iNodeID, m_RuleFileName);
//					}

					if(logRecord.iRuleID!=0&&logRecord.iTypeID!=99)
					{
						MonitorRule rule = null;
						
							//非心跳檢測記錄
//							int index = GetRuleIndex(ref m_checkRule, logRecord.iPlatformID,logRecord.iNodeID,logRecord.iRuleID);
//							if(index == -1)
//							{
//								UpdateCheckRule(logRecord.iPlatformID, logRecord.iNodeID, m_RuleFileName);
//								index = GetRuleIndex(ref m_checkRule, logRecord.iPlatformID, logRecord.iNodeID, logRecord.iRuleID);
//							}
                            
						string key = logRecord.iPlatformID.ToString().PadLeft(4,'0') + logRecord.iNodeID.ToString().PadLeft(4,'0') + logRecord.iRuleID.ToString().PadLeft(4,'0');
						if(!m_checkRule.Contains(key))
						{
							lock(m_Lock)
							{
								UpdateCheckRule(logRecord.iPlatformID, logRecord.iNodeID, m_RuleFileName);
							}
						}
						rule = (MonitorRule)m_checkRule[key];
						

						
					
						if(logRecord.iPlatformID!=rule.PlatformID)
						{
							m_SysLog.WriteToSysLog(2,"logRecord與規(guī)則文件中的平臺ID不符.");
							continue;
						}
						else if(logRecord.iNodeID!=rule.NodeID)
						{
							m_SysLog.WriteToSysLog(2,"logRecord與規(guī)則文件中的節(jié)點ID不符.");
							continue;
						}
						else if(logRecord.iTypeID!=rule.TypeID)
						{
							m_SysLog.WriteToSysLog(2,"logRecord與規(guī)則文件中的規(guī)則類型ID不符.");
							continue;
						}
						else
						{
							int iValue=0;
							bool bStartCheck=false;

							if(rule.CheckInterval>0)
							{
								//該記錄對應(yīng)的規(guī)則需要檢查間隔內(nèi)數(shù)據(jù)的平均值,與報警臨界值比較
								int iNumber = rule.CheckInterval/rule.ScanInterval;
								if(iNumber>rule.Counter)
								{
									rule.totalValue += Convert.ToDouble(logRecord.strValue);
									rule.Counter++;
								}

								if(iNumber==rule.Counter)
								{
									//取得平均值,開始比較
									iValue = Convert.ToInt32(rule.totalValue / iNumber);
									rule.Counter=0;
									rule.totalValue=0;
									bStartCheck=true;
								}
							}
							else
							{
								//不需要取平均值,直接與報警臨界值比較
								double dbValue=Convert.ToDouble(logRecord.strValue);
								iValue=Convert.ToInt32(dbValue);
								bStartCheck=true;
							}

							logRecord.iStatus=-1;
							logRecord.iInterfaceAction = new int[rule.AlertRule.Length];
							logRecord.strInActionParam = new string[rule.AlertRule.Length];

							if(bStartCheck)
							{


								for(int i=0;i<rule.AlertRule.Length;i++)
								{
									if(rule.AlertRule[i].Relation==0)//等于
									{
										if(iValue==rule.AlertRule[i].CriticalValue)
										{
											if(logRecord.iStatus<rule.AlertRule[i].Level)
												logRecord.iStatus=rule.AlertRule[i].Level;
											logRecord.iInterfaceAction[i]=rule.AlertRule[i].Action;
											logRecord.strInActionParam[i]=rule.AlertRule[i].ActionParam;
										}
										else
										{
											if(logRecord.iStatus<0)
												logRecord.iStatus=0;
											logRecord.iInterfaceAction[i]=0;
											logRecord.strInActionParam[i]="";
										}
									}
									if(rule.AlertRule[i].Relation==1)//小于
									{
										if(iValue<rule.AlertRule[i].CriticalValue)
										{
											if(logRecord.iStatus<rule.AlertRule[i].Level)
												logRecord.iStatus=rule.AlertRule[i].Level;
											logRecord.iInterfaceAction[i]=rule.AlertRule[i].Action;
											logRecord.strInActionParam[i]=rule.AlertRule[i].ActionParam;
										}
										else
										{
											if(logRecord.iStatus<0)
												logRecord.iStatus=0;
											logRecord.iInterfaceAction[i]=0;
											logRecord.strInActionParam[i]="";
										}
									}
									else if(rule.AlertRule[i].Relation==2)//大于
									{
										if(iValue>rule.AlertRule[i].CriticalValue)
										{
											if(logRecord.iStatus<rule.AlertRule[i].Level)
												logRecord.iStatus=rule.AlertRule[i].Level;
											logRecord.iInterfaceAction[i]=rule.AlertRule[i].Action;
											logRecord.strInActionParam[i]=rule.AlertRule[i].ActionParam;
										}
										else
										{
											if(logRecord.iStatus<0)
												logRecord.iStatus=0;
											logRecord.iInterfaceAction[i]=0;
											logRecord.strInActionParam[i]="";
										}
									}
									else if(rule.AlertRule[i].Relation==3)//不等于
									{
										if(iValue!=rule.AlertRule[i].CriticalValue)
										{
											if(logRecord.iStatus<rule.AlertRule[i].Level)
												logRecord.iStatus=rule.AlertRule[i].Level;
											logRecord.iInterfaceAction[i]=rule.AlertRule[i].Action;
											logRecord.strInActionParam[i]=rule.AlertRule[i].ActionParam;
										}
										else
										{
											if(logRecord.iStatus<0)
												logRecord.iStatus=0;
											logRecord.iInterfaceAction[i]=0;
											logRecord.strInActionParam[i]="";
										}
									}
									else if(rule.AlertRule[i].Relation==4)//大于等于
									{
										if(iValue>=rule.AlertRule[i].CriticalValue)
										{
											if(logRecord.iStatus<rule.AlertRule[i].Level)
												logRecord.iStatus=rule.AlertRule[i].Level;
											logRecord.iInterfaceAction[i]=rule.AlertRule[i].Action;
											logRecord.strInActionParam[i]=rule.AlertRule[i].ActionParam;
										}
										else
										{
											if(logRecord.iStatus<0)
												logRecord.iStatus=0;
											logRecord.iInterfaceAction[i]=0;
											logRecord.strInActionParam[i]="";
										}
									}
									else if(rule.AlertRule[i].Relation==5)//小于等于
									{
										if(iValue<=rule.AlertRule[i].CriticalValue)
										{
											if(logRecord.iStatus<rule.AlertRule[i].Level)
												logRecord.iStatus=rule.AlertRule[i].Level;
											logRecord.iInterfaceAction[i]=rule.AlertRule[i].Action;
											logRecord.strInActionParam[i]=rule.AlertRule[i].ActionParam;
										}
										else
										{
											if(logRecord.iStatus<0)
												logRecord.iStatus=0;
											logRecord.iInterfaceAction[i]=0;
											logRecord.strInActionParam[i]="";
										}
									}
								}
							}
						
						}
					}

					//生成監(jiān)控日志文件,并將相關(guān)信息插入待發(fā)送日志文件隊列
					try
					{
						LogRecord logRecord1 = new LogRecord();
						logRecord1.SetLog(m_LogNameHead,logRecord.strDateTime,logRecord.iPlatformID,
							logRecord.iNodeID,logRecord.iTypeID,logRecord.iRuleID,
							logRecord.strRuleName,logRecord.strValue,logRecord.iStatus,
							logRecord.iInterfaceAction,logRecord.strInActionParam,
							logRecord.strReserve1,logRecord.strReserve2);

						//m_LogFile.InterfaceWriteToFile();
						if (LogPrintThread.m_IsUpdate)
						{
							m_UploadLogQueue.Enqueue(LogPrintThread.m_UploadFile);
							LogPrintThread.m_IsUpdate = false;
						}
					}
					catch(Exception ex)
					{
						m_SysLog.WriteToSysLog(ex.Message + ex.StackTrace);
					}




				}
				catch(Exception ex)
				{
					string msg=String.Format("logRecord分析失敗:{0}",ex.Message + ex.StackTrace);
					m_SysLog.WriteToSysLog(msg);
				}
				finally
				{
					if(m_Rule!=null)
						m_Rule=null;
				}

				if(m_Exit)
				{
					break;
				}
				
								
			}			
		}

		public void Startup()
		{ 				
			m_Thread = new Thread(new ThreadStart(this.Run));
			// Start the thread
			m_Pause = false;
			m_Exit = false;		
			m_Thread.Start();			
		}
		public void Join()
		{
			if(m_Thread != null)
			{
				m_Thread.Interrupt();
				m_Thread.Join();
			}
			else
			{
				return;
			}
		}
		public bool IsAlive()
		{
			if(m_Thread != null)
			{
				return m_Thread.IsAlive;
			}
			else
			{
				return false;
			}
		}
		public void Suspend()
		{
			if(m_Pause == false)
				m_Pause = true;
		}
		public void Resume()
		{
			if(m_Pause == true)
				m_Pause = false;		
		}
		public void SetExit()
		{
			if(m_Exit == false)
				m_Exit = true;		
		}

		private void UpdateCheckRule(int PlatformID, int NodeID, string FileName)
		{
			
			try
			{
//				ArrayList m_tmpRule=new ArrayList();
//				if (m_checkRule!=null)
//				{
					
//					//清除m_tmpRule數(shù)組中規(guī)則更新前的監(jiān)控規(guī)則
//					for (int i=0; i<m_checkRule.Length; i++)
//					{
//						if(m_checkRule[i].PlatformID==PlatformID && m_checkRule[i].NodeID==NodeID)
//						{
//							continue;
//						}
//						m_tmpRule.Add(m_checkRule[i]);
//					}
//
//					m_checkRule = new MonitorRule[m_tmpRule.Count];
//					m_tmpRule.CopyTo(m_checkRule);
//
//
//					/*System.Collections.IEnumerator myEnumerator = m_tmpRule.GetEnumerator();
//
//					while(myEnumerator.MoveNext())
//					{
//						MonitorRule rule = (MonitorRule)myEnumerator.Current;
//						if(rule.PlatformID==PlatformID && rule.NodeID==NodeID)
//						{
//							m_tmpRule.Remove(rule);
//						}
//					}
//
//					m_checkRule = new MonitorRule[m_tmpRule.Count];
//					myEnumerator = m_tmpRule.GetEnumerator();
//					for(int i=0;i<m_tmpRule.Count;i++)
//					{
//						myEnumerator.MoveNext();
//						m_checkRule[i] = (MonitorRule)myEnumerator.Current;
//					}*/
//
//					//添加新的監(jiān)控規(guī)則到m_tmpRule數(shù)組中
					MonitorRule[] ruleList=null;
					RuleFile ruleFile = new RuleFile();
					ruleFile.ProcessXmlFile(PlatformID,NodeID,FileName,out ruleList);
				for(int i=0;i<ruleList.GetLength(0);i++)
				{
					string key = PlatformID.ToString().PadLeft(4,'0') + NodeID.ToString().PadLeft(4,'0') + ruleList[i].RuleID.ToString().PadLeft(4,'0');
					if(!m_checkRule.Contains(key))
					{
						m_checkRule.Add(key,ruleList[i]);
						
					}
					else
					{
						m_checkRule.Remove(key);
						m_checkRule.Add(key,ruleList[i]);

					}
				}
//							
//					MonitorRule[] temp = new MonitorRule[ruleList.Length+m_checkRule.Length];
//					m_checkRule.CopyTo(temp,0);
//					ruleList.CopyTo(temp,m_checkRule.Length);
//					m_checkRule = temp;
//
//				}
//				else
//				{
//					RuleFile ruleFile = new RuleFile();
//					ruleFile.ProcessXmlFile(PlatformID,NodeID,FileName,out m_checkRule);
//				}
			}
			catch(Exception ex)
			{
				m_SysLog.WriteToSysLog(ex.Message);
			}

		}

		private int GetRuleIndex(ref MonitorRule[] ruleList,int PlatformID, int NodeID, int RuleID)
		{
			if(ruleList!=null)
			{
				for(int i=0; i<ruleList.Length; i++)
				{
					if(ruleList[i].PlatformID==PlatformID && ruleList[i].NodeID==NodeID
						&& ruleList[i].RuleID==RuleID)
					{
						return i;
					}
				}
			}

			return -1;
		}
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产精品一区二区夜夜嗨| 一区二区三区精品视频| 91年精品国产| 视频一区视频二区在线观看| 国产精品毛片久久久久久| 日韩欧美视频在线| 国产午夜精品一区二区三区视频 | 亚洲成人综合在线| 天堂久久久久va久久久久| 国产剧情一区二区| 91精品蜜臀在线一区尤物| 亚洲欧美怡红院| 国产精品香蕉一区二区三区| 欧美一区二区三区啪啪| 午夜精品免费在线观看| 91蜜桃在线免费视频| 国产精品久久久久久久蜜臀| 久99久精品视频免费观看| 欧美男生操女生| 一区二区三区精品在线| av一区二区三区四区| 国产欧美一区视频| 国产成人av一区二区| 日韩欧美色电影| 免费在线看成人av| 欧美一级一区二区| 日本不卡的三区四区五区| 欧美色图片你懂的| 午夜精品视频在线观看| 欧美乱熟臀69xxxxxx| 日日摸夜夜添夜夜添亚洲女人| 91国偷自产一区二区开放时间| 亚洲视频在线观看一区| 99国产欧美另类久久久精品| 中文字幕+乱码+中文字幕一区| 国产成人一级电影| 国产精品理伦片| 91麻豆蜜桃一区二区三区| 亚洲色图视频免费播放| 欧美在线不卡视频| 国产在线麻豆精品观看| 欧美一区二区三区日韩视频| 亚洲一卡二卡三卡四卡无卡久久 | 国产激情视频一区二区三区欧美| 精品99一区二区| 国产激情一区二区三区四区| 欧美国产精品中文字幕| 91免费版pro下载短视频| 亚洲韩国一区二区三区| 日韩一区二区免费视频| 天涯成人国产亚洲精品一区av| 午夜精品久久久久久久久久久 | 成人三级在线视频| 热久久国产精品| 久久精品国产999大香线蕉| 午夜精品福利一区二区三区蜜桃| 亚洲网友自拍偷拍| 无码av免费一区二区三区试看 | 精品成人a区在线观看| 久久久久久久精| 欧美韩国日本一区| 精品区一区二区| 伊人性伊人情综合网| 色欧美88888久久久久久影院| 中文字幕一区在线观看| 在线观看一区二区精品视频| 日本在线不卡一区| 日韩精品乱码免费| 亚洲国产成人精品视频| 久久精品国产亚洲高清剧情介绍 | 亚洲成人激情社区| 国产1区2区3区精品美女| 日韩视频一区二区三区在线播放| 欧美丝袜第三区| 蜜桃视频第一区免费观看| 国产精品久久三| 欧美丰满嫩嫩电影| 精品一区二区日韩| 亚洲少妇最新在线视频| 精品久久久久久久久久久院品网| 色综合久久中文字幕综合网| 久久99热这里只有精品| 亚洲综合色区另类av| 久久久久久毛片| 91偷拍与自偷拍精品| 美国十次综合导航| 国产精品三级av在线播放| 欧美三片在线视频观看| 午夜视黄欧洲亚洲| 国产精品免费免费| 欧美一区二区三区不卡| 成人sese在线| 免费在线成人网| 亚洲欧洲日产国码二区| 日韩一级片在线观看| 99久久精品久久久久久清纯| 蜜桃视频免费观看一区| 亚洲乱码国产乱码精品精的特点| 久久久综合九色合综国产精品| 91麻豆精品国产91久久久久| 日本韩国欧美国产| 91免费版在线看| 95精品视频在线| 99国产精品视频免费观看| 大桥未久av一区二区三区中文| 国产伦精品一区二区三区视频青涩| 日日摸夜夜添夜夜添国产精品| 亚洲第一激情av| 日韩精品免费视频人成| 日本三级韩国三级欧美三级| 日韩在线观看一区二区| 青青草国产成人av片免费| 日韩avvvv在线播放| 日本成人在线网站| 免费黄网站欧美| 国产一区二区三区电影在线观看 | 69堂成人精品免费视频| 欧美日本乱大交xxxxx| 欧美日本韩国一区二区三区视频| 欧美性色综合网| 欧美日本乱大交xxxxx| 制服丝袜中文字幕亚洲| 日韩美女视频一区二区在线观看| 7777精品伊人久久久大香线蕉的 | 久久99精品视频| 久久99精品久久久| 国产九九视频一区二区三区| 国产成人精品三级麻豆| bt欧美亚洲午夜电影天堂| 97超碰欧美中文字幕| 欧美色倩网站大全免费| 日韩一区二区精品在线观看| 欧美精品一区二区三区在线播放 | 在线观看国产精品网站| 欧美日韩你懂得| 久久这里都是精品| 国产精品久久久久久久浪潮网站| 国产精品一区二区男女羞羞无遮挡 | 亚洲精品一卡二卡| 午夜电影网亚洲视频| 国内精品伊人久久久久av一坑 | 国产91露脸合集magnet | 国产一区二区三区免费看| 成人h动漫精品| 欧美日本韩国一区二区三区视频| 精品国产乱码久久久久久浪潮| 日韩欧美aaaaaa| 国产欧美日韩一区二区三区在线观看| 精品欧美一区二区三区精品久久 | 日本一区二区三区久久久久久久久不| 欧美三区免费完整视频在线观看| 欧美日韩久久不卡| 欧美经典一区二区| 一区二区不卡在线播放| 日韩成人免费看| 97精品电影院| 精品黑人一区二区三区久久 | 亚洲精品久久久蜜桃| 亚洲成精国产精品女| 国产曰批免费观看久久久| 国产清纯在线一区二区www| 一区二区三区欧美视频| 欧美色精品在线视频| 国产美女在线精品| 亚洲一区二区三区精品在线| 色吊一区二区三区| 亚洲成人免费在线观看| 日本在线不卡一区| 国产精品一区二区免费不卡| 欧美视频一区二区三区| 国产精品久久久久久久久晋中 | 夫妻av一区二区| 91在线观看下载| 亚洲精品在线免费观看视频| 亚洲电影一区二区| 欧美一区二区三区免费观看视频| 国产日韩欧美综合在线| 日日夜夜精品视频天天综合网| 99精品国产热久久91蜜凸| 久久久午夜精品| 日韩高清不卡在线| 欧美乱熟臀69xxxxxx| 一区二区久久久久| 99精品国产99久久久久久白柏| 久久精品网站免费观看| 精品一区二区三区不卡| 91精品国产色综合久久不卡蜜臀| 亚洲午夜三级在线| 欧美视频日韩视频在线观看| 亚洲精品国产a| 欧美性videosxxxxx| 亚洲精品中文在线观看| 日本道精品一区二区三区| 亚洲色图一区二区| 9i在线看片成人免费| 国产精品久久久久久久裸模| caoporn国产精品| 亚洲视频一区二区在线观看| 色综合一个色综合亚洲| 亚洲另类中文字|