?? monitorbasicclass.cs
字號:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;
using System.Collections;
namespace MonitorSystem.BasicClass
{
/// <summary>
/// 報警規(guī)則類
/// </summary>
public class AlertRule
{
/// <summary>
/// 報警臨界值
/// </summary>
public int CriticalValue;
/// <summary>
/// 臨界值關(guān)系 0:等于,1:小于,2:大于,3:不等于,4:大于等于,5:小于等于
/// </summary>
public int Relation;
/// <summary>
/// 報警等級 1 一般警告,2 嚴(yán)重警告,3 一般故障,4 嚴(yán)重故障,5 待判斷
/// </summary>
public int Level;
/// <summary>
/// 報警方式 0 無,1 鳴叫,2 短信,3 email, 4 待判斷
/// </summary>
public int Action;
/// <summary>
/// 報警參數(shù)
/// </summary>
public string ActionParam;
public AlertRule()
{
//
// TODO: 在此處添加構(gòu)造函數(shù)邏輯
//
}
/// <summary>
/// 根據(jù)采集的值檢查報警規(guī)則
/// </summary>
/// <returns></returns>
public int Check()
{
return -1;
}
}
/// <summary>
/// 監(jiān)控規(guī)則類,是實際監(jiān)控項目類的基類
/// </summary>
public abstract class MonitorRule
{
/// <summary>
/// 規(guī)則ID
/// </summary>
public int RuleID;
/// <summary>
/// 規(guī)則類型id
/// </summary>
public int TypeID;
/// <summary>
/// 規(guī)則名稱
/// </summary>
public string RuleName;
/// <summary>
/// 執(zhí)行時間間隔(采集時間間隔)
/// </summary>
public int ScanInterval;
/// <summary>
/// 報警檢查間隔,用掃描值的平均值與報警值比較
/// </summary>
public int CheckInterval;
/// <summary>
/// 掃描值
/// </summary>
public int Value;
/// <summary>
/// 臨時保存報警檢查間隔內(nèi)Value的總和
/// </summary>
public double totalValue;
/// <summary>
/// 累加計數(shù)器,如等于CheckInterval/ScanInterval則表示計數(shù)結(jié)束
/// </summary>
public int Counter;
/// <summary>
/// 指定規(guī)則最后一次執(zhí)行的時間
/// </summary>
public DateTime LastExcuteTime;
/// <summary>
/// 規(guī)則開始執(zhí)行時間
/// </summary>
public DateTime StartTime;
/// <summary>
/// 規(guī)則結(jié)束執(zhí)行時間
/// </summary>
public DateTime EndTime;
/// <summary>
/// 節(jié)點所屬平臺ID
/// </summary>
public int PlatformID;
/// <summary>
/// 所屬節(jié)點ID
/// </summary>
public int NodeID;
/// <summary>
/// 報警規(guī)則列表
/// </summary>
public AlertRule[] AlertRule;
/// <summary>
/// 該監(jiān)控記錄是否監(jiān)控規(guī)則更新記錄的標(biāo)記
/// </summary>
public bool m_bUpdate=false;
public MonitorRule()
{
totalValue=0;
Counter=0;
this.StartTime = DateTime.MinValue;
this.EndTime = DateTime.MaxValue;
}
public abstract object ExcuteCollect(); //執(zhí)行監(jiān)控,并將監(jiān)控數(shù)據(jù)寫入原始監(jiān)控數(shù)據(jù)隊列
}
public class UpdateRecord:MonitorRule
{
public UpdateRecord()
{
this.m_bUpdate=true;
}
public override object ExcuteCollect()
{
return null;
}
}
#region 監(jiān)控節(jié)點類
/// <summary>
/// 監(jiān)控節(jié)點類
/// </summary>
/*
public class MonitorNode
{
private MonitorRule[] m_RuleList=null; //監(jiān)控規(guī)則列表
private int m_PlatformID; //平臺ID
private int m_NodeID; //節(jié)點ID
private string m_NodeName; //節(jié)點名稱
private string m_NodeRemark; //節(jié)點說明
private string m_strIP; //中心接口IP地址
private int m_iPort; //中心接口socket通訊端口號
private string m_LogFtpPath; //監(jiān)控日志文件上傳的FTP路徑
private string m_ConfigFtpPath; //監(jiān)控規(guī)則的配置文件的FTP路徑
private string m_FtpLoginID; //中心接口FTP帳號
private string m_FtpLoginPwd; //中心接口FTP登錄密碼
private string m_LogPath; //監(jiān)控日志文件本地保存路徑
private string m_RulePath; //規(guī)則配置文件本地保存路徑
private IPAddress m_hostIPAddress;
private IPEndPoint m_Server;
private Socket m_Sock;
private NodeRegPackage m_NodeReg=new NodeRegPackage();
private NodeRegRespPackage m_NodeResp=new NodeRegRespPackage();
#region 屬性
/// <summary>
/// 平臺ID
/// </summary>
public int PlatformID
{
get{return m_PlatformID;}
set{m_PlatformID=value;}
}
/// <summary>
/// 節(jié)點ID
/// </summary>
public int NodeID
{
get{return m_NodeID;}
set{m_NodeID=value;}
}
/// <summary>
/// 節(jié)點名稱
/// </summary>
public string NodeName
{
get{return m_NodeName;}
set{m_NodeName=value;}
}
/// <summary>
/// 節(jié)點說明
/// </summary>
public string NodeRemark
{
get{return m_NodeRemark;}
set{m_NodeRemark=value;}
}
/// <summary>
/// 監(jiān)控日志文件上傳的FTP路徑
/// </summary>
public string LogFtpPath
{
get{return m_LogFtpPath;}
set{m_LogFtpPath=value;}
}
/// <summary>
/// 監(jiān)控規(guī)則的配置文件的FTP路徑
/// </summary>
public string ConfigFtpPath
{
get{return m_ConfigFtpPath;}
set{m_ConfigFtpPath=value;}
}
/// <summary>
/// 中心接口FTP帳號
/// </summary>
public string FtpLoginID
{
get{return m_FtpLoginID;}
set{m_FtpLoginID=value;}
}
/// <summary>
/// 中心接口FTP登錄密碼
/// </summary>
public string FtpLoginPwd
{
get{return m_FtpLoginPwd;}
set{m_FtpLoginPwd=value;}
}
/// <summary>
/// 中心接口IP地址
/// </summary>
public string IPAdress
{
get{return m_strIP;}
set{m_strIP=value;}
}
/// <summary>
/// 中心接口端口號
/// </summary>
public int Port
{
get{return m_iPort;}
set{m_iPort=value;}
}
/// <summary>
/// 監(jiān)控日志文件本地保存路徑
/// </summary>
public string LogPath
{
get{return m_LogPath;}
set{m_LogPath=value;}
}
/// <summary>
/// 規(guī)則配置文件本地保存路徑
/// </summary>
public string RulePath
{
get{return m_RulePath;}
set{m_RulePath=value;}
}
#endregion
public MonitorNode()
{
this.m_PlatformID=1;
}
/// <summary>
/// 讀節(jié)點基本配置信息文件,此文件由人工生成、配置
/// 保存節(jié)點的注冊請求信息
/// </summary>
public int ReadNodeConfig(string strFilePath)
{
try
{
FileInfo fi=new FileInfo(strFilePath);
if (fi.Exists)
{
FileStream fs = fi.OpenRead();
StreamReader sr = new StreamReader (fs,new System.Text.ASCIIEncoding());
string line="";
string[] delim = new string[]{"NodeID=","NodeName=","NodeRemark=","TcpServerIP=","TcpServerPort="};
for (int i=0;(line=sr.ReadLine())!=null&&i<5; i++)
{
if (i==0)
m_NodeID = Convert.ToInt32(line.Trim(delim[i].ToCharArray()));
else if (i==1)
m_NodeName = line.Trim(delim[i].ToCharArray());
else if (i==2)
m_NodeRemark = line.Trim(delim[i].ToCharArray());
else if (i==3)
m_strIP = line.Trim(delim[i].ToCharArray());
else if (i==4)
m_iPort = Convert.ToInt32(line.Trim(delim[i].ToCharArray()));
}
}
else
{
throw new Exception("節(jié)點配置文件不存在");
}
}
catch(Exception ex)
{
//錯誤處理
string msg = ex.Message;
return -1;
}
return 0;
}
/// <summary>
/// 在監(jiān)控平臺上注冊該節(jié)點,Socket方式。并將保存平臺ID、日志文件上傳的FTP路徑、監(jiān)控規(guī)則的配置文件路徑
/// </summary>
/// <returns>
/// 成功:將配置信息寫入對應(yīng)的成員變量
/// 失敗:拋出一個異常
/// </returns>
public void RegNode()
{
try
{
m_hostIPAddress=IPAddress.Parse(m_strIP);
}
catch
{
string msg="IP地址格式錯誤。";
throw new Exception(msg);
}
#region 發(fā)送、接收注冊信息
try
{
m_Server=new IPEndPoint(m_hostIPAddress,m_iPort);
m_Sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
m_Sock.Connect(m_Server);
byte[] ByteSend = new byte[1024];
ByteSend=m_NodeReg.EncodeSocketPackage();
m_Sock.Send(ByteSend,ByteSend.Length,0);
byte[] ByteRecv=new byte[1024];
m_Sock.Receive(ByteRecv,ByteRecv.Length,0);
m_NodeResp.DecodeSocketPackage(ByteRecv);
m_Sock.Close();
}
catch(Exception ex)
{
string msg=ex.Message;
throw new Exception(msg);
}
#endregion
#region 檢查response包體
try
{
char[] checkHeadFlag = new char[]{'O','P','E','N','E','T'};
if (m_NodeResp.HeadFlag==checkHeadFlag && m_NodeResp.ContentLength==656
&& m_NodeResp.PacketType=='1')
{
if (m_NodeResp.Result==1)
throw new Exception("注冊未通過中心接口鑒權(quán)!");
if (m_NodeResp.PlatformID.Length <= 0)
throw new Exception("監(jiān)控平臺ID號錯誤!");
else
m_PlatformID = Convert.ToInt32(m_NodeResp.PlatformID);
if (m_NodeResp.LogFtpPath.Length<=0)
throw new Exception("日志上傳路徑錯誤");
else
m_LogFtpPath = string.Format("{0}",m_NodeResp.LogFtpPath);
if (m_NodeResp.ConfigFtpPath.Length<=0)
throw new Exception("配置文件更新FTP路徑錯誤");
else
m_ConfigFtpPath=string.Format("{0}",m_NodeResp.ConfigFtpPath);
m_FtpLoginID=string.Format("{0}",m_NodeResp.FtpLoginID);
m_FtpLoginPwd=string.Format("{0}",m_NodeResp.FtpLoginPwd);
}
else
{
throw new Exception("應(yīng)答包包頭信息錯誤!");
}
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
#endregion
}
public void RegInit(char[] HeadFlag,int ContentLength,uint CommandID,char PacketType,int Version,int Encrypt,char[] Reserve)
{
m_NodeReg.MonitorNodeID = String.Format("{0,4:0000}",this.m_NodeID).ToCharArray(0,4);
m_NodeReg.MonitorNodeName = this.m_NodeName.ToCharArray(0,64);
m_NodeReg.MonitorRemark = this.m_NodeRemark.ToCharArray(0,128);
m_NodeReg.HeadFlag = HeadFlag;
m_NodeReg.ContentLength = ContentLength;
m_NodeReg.CommandID = CommandID;
m_NodeReg.PacketType = PacketType;
m_NodeReg.Version = Version;
m_NodeReg.Encrypt = Encrypt;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -