c实现服务器性能监控并发送邮件保存日志课案.docx

上传人:b****7 文档编号:8964217 上传时间:2023-02-02 格式:DOCX 页数:20 大小:19.48KB
下载 相关 举报
c实现服务器性能监控并发送邮件保存日志课案.docx_第1页
第1页 / 共20页
c实现服务器性能监控并发送邮件保存日志课案.docx_第2页
第2页 / 共20页
c实现服务器性能监控并发送邮件保存日志课案.docx_第3页
第3页 / 共20页
c实现服务器性能监控并发送邮件保存日志课案.docx_第4页
第4页 / 共20页
c实现服务器性能监控并发送邮件保存日志课案.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

c实现服务器性能监控并发送邮件保存日志课案.docx

《c实现服务器性能监控并发送邮件保存日志课案.docx》由会员分享,可在线阅读,更多相关《c实现服务器性能监控并发送邮件保存日志课案.docx(20页珍藏版)》请在冰豆网上搜索。

c实现服务器性能监控并发送邮件保存日志课案.docx

c实现服务器性能监控并发送邮件保存日志课案

c#实现服务器性能监控并发送邮件保存日志

这篇文章主要介绍了c#实现服务器性能监控并发送邮件保存日志的示例,代码分为客户端和服务端,客户端可安装为本地服务形式启动

客户端代码

复制代码代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Diagnostics;

usingSystem.ServiceProcess;

usingSystem.Text;

usingSystem.Threading;

usingSystem.Management;

usingSystem.Configuration;

usingSystem.Net;

usingSystem.IO;

namespaceMON.WS

{

publicpartialclassService:

ServiceBase

{

//post11.9

//卸载服务

//installutil/uF:

\XLFX-2\XLFX\MON.WS\bin\debug\MON.WS.EXE

//安装服务

//installutilF:

\XLFX-2\XLFX\MON.WS\bin\debug\MON.WS.EXE

objectthreadObj;

ThreadjobThread;

DictionarydicCounter;

DictionarydicDisk;

publicService()

{

InitializeComponent();

}

///

///服务启动

///

///

protectedoverridevoidOnStart(string[]args)

{

threadObj=newobject();

dicCounter=newDictionary();

dicDisk=newDictionary();

jobThread=newThread(newThreadStart(Job));

jobThread.IsBackground=true;

jobThread.Start();

}

///

///服务停止

///

protectedoverridevoidOnStop()

{

if(jobThread.IsAlive)

{

jobThread.Abort();

jobThread.Join();

}

foreach(varobjindicCounter.Values)

{

obj.Dispose();

}

foreach(varobjindicDisk.Values)

{

obj.Dispose();

}

dicDisk.Clear();

dicCounter.Clear();

}

///

///监控线程

///

voidJob()

{

while(true)

{

lock(threadObj)

{

//监控开始

try

{

varobj=newMONServiceClient.MONService();

varhn=Dns.GetHostName();

varips=GetIpv4Address(hn);

if(ips.Count<1)

{

obj.Dispose();

Thread.Sleep(60000);//如果服务器出错,那么就每分钟去检查一次

WriteLog("一个IPV4的地址也没有得到");

continue;

}

DataSetds=GetConfigDS(hn,ips,obj);

if(ds==null)

{

obj.Dispose();

Thread.Sleep(60000);

WriteLog("请检查WEBService和全局变量设置");

continue;

}

intsleepTime;

try

{

sleepTime=Convert.ToInt32(ds.Tables[0].Rows[0]["LOG_CIRC"])*1000;//毫秒

}

catch

{

sleepTime=60000;

}

if(sleepTime<1)

{

sleepTime=60000;

}

Thread.Sleep(sleepTime);

if(ds.Tables[1].Rows[0]["S_ISWATCH"].ToString()=="0")

{

//监控开关->关闭

obj.Dispose();

continue;

}

vararr=getWatchValue(ds).ToArray();

obj.UpdateServerStatus(arr);

obj.Dispose();

}

catch(Exceptionex)

{

WriteLog(ex.Message);

}

//监控结束

}

}

}

///

///获取配置信息

///

///

///

DataSetGetConfigDS(stringhn,Listips,MONServiceClient.MONServiceobj)

{

DataSetds;

try

{

if(ips.Count>1)

{

ds=obj.GetMachineConfig(hn,ips[0].ToString(),ips[1].ToString());

}

else

{

ds=obj.GetMachineConfig(hn,ips[0].ToString(),"");

}

}

catch

{

ds=null;

}

returnds;

}

///

///获取性能数组

///

///

///

ListgetWatchValue(DataSetds)

{

varresult=newList();

result.Add(ds.Tables[1].Rows[0]["LIST_ID"].ToString());

result.Add(GetValue(ds.Tables[1].Rows[0]["S_CPU"].ToString()).ToString("F2"));

result.Add(GetDiskValue(ds.Tables[1].Rows[0]["S_DISK_APP"].ToString()).ToString("F2"));

result.Add(GetDiskValue(System.Environment.SystemDirectory.Substring(0,2)).ToString("F2"));

result.Add(GetValue(ds.Tables[1].Rows[0]["S_MEMORY"].ToString()).ToString("F2"));

result.Add(GetValue(ds.Tables[1].Rows[0]["S_FLOW_IN"].ToString()).ToString("F2"));

result.Add(GetValue(ds.Tables[1].Rows[0]["S_FLOW_OUT"].ToString()).ToString("F2"));

result.Add(GetValue(ds.Tables[1].Rows[0]["S_WEB_PORT"].ToString()).ToString("F2"));

result.Add(GetValue(ds.Tables[1].Rows[0]["S_SQL_CONNECT"].ToString()).ToString("F2"));

result.Add(ds.Tables[1].Rows[0]["CAMP_ID"].ToString());

result.Add(ds.Tables[1].Rows[0]["CICODE"].ToString());

result.Add(ds.Tables[1].Rows[0]["S_KIND"].ToString());

returnresult;

}

///

///获取IPV4的地址

///

///

///

ListGetIpv4Address(stringhn)

{

varresult=newList();

varips=Dns.GetHostAddresses(hn);

foreach(varipinips)

{

if(ip.AddressFamily==System.Net.Sockets.AddressFamily.InterNetwork)

{

result.Add(ip);

}

}

returnresult;

}

///

///获取性能计数器的值

///

///

///

doubleGetValue(stringconfigStr)

{

try

{

if(!

dicCounter.ContainsKey(configStr))

{

vararr=configStr.Split('#');

varpc=newPerformanceCounter();

pc.CategoryName=arr[0];

pc.CounterName=arr[1];

pc.InstanceName=arr[2];

dicCounter.Add(configStr,pc);

}

returndicCounter[configStr].NextValue();

}

catch(Exceptionex)

{

WriteLog(string.Format("计数器取值错误:

{0}{1}{2}",configStr,Environment.NewLine,ex.Message));

return-1;

}

}

///

///获取磁盘信息的值

///

///

///

doubleGetDiskValue(stringkey)

{

try

{

if(!

dicDisk.ContainsKey(key))

{

ManagementObjectDiskInfo=newManagementObject(string.Format("win32_logicaldisk.deviceid=\"{0}\"",key));

dicDisk.Add(key,DiskInfo);

}

dicDisk[key].Get();

vars=Convert.ToDouble(dicDisk[key]["Size"]);

varl=Convert.ToDouble(dicDisk[key]["FreeSpace"]);

vard=(s-l)/s*100;

returnd;

}

catch(Exceptionex)

{

WriteLog(string.Format("获取磁盘信息值错误:

{0}{1}{2}",key,Environment.NewLine,ex.Message));

return-1;

}

}

///

///写本地日志

///

///

voidWriteLog(stringtext)

{

try

{

varlogDic=ConfigurationManager.AppSettings["LogDic"];

intlogDays;

try

{

logDays=Convert.ToInt32(ConfigurationManager.AppSettings["LogDays"]);

}

catch

{

logDays=7;

}

if(logDays<1)

{

logDays=7;

}

varfs=LogFileMon(logDic,logDays);

StreamWriterwriter=newStreamWriter(fs);

writer.WriteLine(DateTime.Now.ToString());

writer.WriteLine(text);

writer.WriteLine("-----------------------------------------------------------");

writer.Flush();

writer.Close();

fs.Close();

}

catch

{

//写日志出错就没办法了

}

}

///

///维护日志文件

///

///

///

FileStreamLogFileMon(stringlogDic,intdayCount)

{

DirectoryInfodi=newDirectoryInfo(logDic);

//如果日志文件夹不存在则创建日志文件夹;

if(!

di.Exists)

{

di.Create();

}

//当前应保存的日志数据

Listdays=newList();

for(vari=0;i

{

vard=DateTime.Now.AddDays(0-i).ToString("yyyy-MM-dd");

days.Add(string.Format("{0}.log",d));

}

//删除没用的历史数据

foreach(varfindi.GetFiles())

{

if(!

days.Contains(f.Name))

{

f.Delete();

}

}

//返回当前日志文件的数据流

varfileName=Path.Combine(logDic,days[0]);

varfs=File.Open(fileName,FileMode.Append,FileAccess.Write);

returnfs;

}

}

}

服务端代码

复制代码代码如下:

ImportsSystem.Web.Services

ImportsSystem.Web.Services.Protocols

ImportsSystem.ComponentModel

ImportsSystem.Threading

ImportsSystem.Collections.Generic

ImportsSystem.Text

'若要允许使用ASP.NETAJAX从脚本中调用此Web服务,请取消对下行的注释。

'_

="http:

//tempuri.org/")>_

=WsiProfiles.BasicProfile1_1)>_

_

PublicClassMONService

InheritsSystem.Web.SWebService

_

PublicFunctionGetMachineConfig(ByValHostNameAsString,ByValIP1AsString,ByValIP2AsString)AsDataSet

DimsqldaAsNewdata_source.WebTao.Public.SqlServerData

Try

DimsSQLAsString="select*frommon_server_list"&_

"whereS_HOSTNAME='"&HostName&"'andIP1='"&IP1&"'andIP2='"&IP2&"'"

DimdtAsDataTable=sqlda.GetMytable(sSQL)

Ifdt.Rows.Count<1Then

sqlda.runSql("insertintomon_server_list(S_HOSTNAME,IP1,IP2,S_ISWATCH,CICODE,S_NAME,CAMP_ID,S_KIND,STATUS)values('"&HostName&"','"&IP1&"','"&IP2&"',0,'待确定','待确定',-1,0,0)")

dt=sqlda.GetMytable(sSQL)

sqlda.runSql("INSERTINTO[MON_INFO]([LIST_ID],[S_CPU],[S_DISK_APP],[S_DISK_SYS],[S_MEMORY],[S_FLOW_IN],[S_FLOW_OUT],[S_WEB_PORT],[S_SQL_CONNECT],[IN_TIME])VALUES("&dt.Rows(0)("LIST_ID").ToString()&",-1,-1,-1,-1,-1,-1,-1,-1,'"&Now.ToString()&"')")

EndIf

DimresultAsDataSet=sqlda.GetMyDataSet("select*fromMON_PARAMETER")

result.Tables.Add(dt)

Returnresult

CatchexAsException

ReturnNothing

EndTry

EndFunction

_

PublicFunctionUpdateServerStatus(ByValParamArrayValueArr()AsString)

DimsqldaAsNewdata_source.WebTao.Public.SqlServerData

Try

DimsSQLAsString="UPDATE[MON_INFO]"&_

"SET"&_

"[S_CPU]="&ValueArr

(1)&_

",[S_DISK_APP]="&ValueArr

(2)&_

",[S_DISK_SYS]="&ValueArr(3)&_

",[S_MEMORY]="&ValueArr(4)&_

",[S_FLOW_IN]="&ValueArr(5)&_

",[S_FLOW_OUT]="&ValueArr(6)&_

",[S_WEB_PORT]="&ValueArr(7)&_

",[S_SQL_CONNECT]="&ValueArr(8)&_

",[IN_TIME]='"&Now.ToString()&"'"&_

"WHERELIST_ID="&ValueArr(0)

sqlda.runSql(sSQL)

'没有策略

IfValueArr(9).Trim()="-1"OrString.IsNullOrEmpty(ValueArr(9).Trim())Then

Return0

EndIf

'找到策略

sSQL="select*fromMON_CAMPAIGN_LISTwhereCAMP_ID="&ValueArr(9)

DimdtAsDataTable=sqlda.GetMytable(sSQL)

DimDicAsNewDictionary(OfString,String)

Dic.Add("S_PRIORITY",dt.Rows(0)("S_PRIORITY").ToString())

Dic.Add("S_ACTION",dt.Rows(0)("S_ACTION").ToString())

'验证策略

sSQL="selectcount(*)fromMON_INFOwhere1=1and"&dt.Rows(0)("S_NAME").ToString&"an

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1