| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 | 
							- using Aitex.Core.RT.Device.Unit;
 
- using Aitex.Core.RT.Log;
 
- using Aitex.Core.RT.SCCore;
 
- using MECF.Framework.Common.Equipment;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Diagnostics;
 
- using System.IO;
 
- using System.Linq;
 
- using System.Management;
 
- using System.Reflection;
 
- using System.ServiceModel.Channels;
 
- using System.Text;
 
- using System.Timers;
 
- using System.Windows;
 
- namespace Venus_RT.Modules
 
- {
 
-     public class ResourceMonitor
 
-     {
 
-         private string processRTname = Process.GetCurrentProcess().ProcessName;
 
-         private string processUIname = "Venus_UI";
 
-         //private int _stringlen = 20;
 
-         private int threshold = 800;
 
-         private Process pro;
 
-         private Timer _timer;
 
-         //数据波动监测可用
 
-         //List<double> _Numberofhandlesopened = new List<double>() { };
 
-         //List<double> _Numberofmodules = new List<double>() { };
 
-         //List<double> _Basicpriority = new List<double>() { };
 
-         //List<double> _processor = new List<double>() { };
 
-         //List<double> _Minimumworkingset = new List<double>() { };
 
-         //List<double> _MaximumWorkingSet = new List<double>() { };
 
-         //List<double> _Workset = new List<double>() { };
 
-         //List<double> _Peakworkingset = new List<double>() { };
 
-         //List<double> _Dedicatedmemorysize = new List<double>() { };
 
-         //List<double> _UnpagedMemorySize = new List<double>() { };
 
-         //List<double> _PagingMemorySize = new List<double>() { };
 
-         //List<double> _Peakpagingmemorysize = new List<double>() { };
 
-         //List<double> _VirtualMemorySize = new List<double>() { };
 
-         //List<double> _PeakVirtualMemorySize = new List<double>() { };
 
-         //string ProcessName              = string.Empty;
 
-         //string ProcessID                = string.Empty;
 
-         //string Starttime                = string.Empty;
 
-         private string Response                 = string.Empty;
 
-         private string MainWindowHandle         = string.Empty;
 
-         //string MainWindowTitle          = string.Empty;
 
-         private string AssociatedProcessHandle  = string.Empty;
 
-         private string Numberofhandlesopened    = string.Empty;
 
-         private string Numberofmodules          = string.Empty;
 
-         private string Basicpriority            = string.Empty;
 
-         private string Increasepriority         = string.Empty;
 
-         private string processor                = string.Empty;
 
-         private string Minimumworkingset        = string.Empty;
 
-         private string MaximumWorkingSet        = string.Empty;
 
-         private string Workset                  = string.Empty;
 
-         private string Peakworkingset           = string.Empty;
 
-         private string Dedicatedmemorysize      = string.Empty;
 
-         private string UnpagedMemorySize        = string.Empty;
 
-         private string PagingMemorySize         = string.Empty;
 
-         private string Peakpagingmemorysize     = string.Empty;
 
-         private string VirtualMemorySize        = string.Empty;
 
-         private string PeakVirtualMemorySize    = string.Empty;
 
-         private string Occupytime               = string.Empty;
 
-         private string PrivilegeOccupancytime   = string.Empty;
 
-         private string Useroccupiedtime         = string.Empty;
 
-         private PerformanceCounter CpuOccupied;
 
-         public ResourceMonitor() 
 
-         {
 
-             //ProcessName = "进程名称";
 
-             //ProcessID = "进程ID".PadRight(_stringlen - 2, ' ');
 
-             //Starttime = "启动时间";
 
-             Response = "Response or not";
 
-             MainWindowHandle = "Main Window Handle";
 
-             //MainWindowTitle = "主窗口标题";
 
-             AssociatedProcessHandle = "Associated Process Handle ";
 
-             Numberofhandlesopened = "Number of handles opened ";
 
-             Numberofmodules = "Number of modules ";
 
-             Basicpriority = "Basic priority ";
 
-             Increasepriority = "Increase priority ";
 
-             processor = "processor ";
 
-             Minimumworkingset = "Minimum working set ";
 
-             MaximumWorkingSet = "Maximum working Set ";
 
-             Workset = "Work set ";
 
-             Peakworkingset = "Peak working set ";
 
-             Dedicatedmemorysize = "Dedicated memory size ";
 
-             UnpagedMemorySize = "Unpaged Memory Size ";
 
-             PagingMemorySize = "Paging Memory Size ";
 
-             Peakpagingmemorysize = "Peak paging memory size ";
 
-             VirtualMemorySize = "Virtual Memory Size ";
 
-             PeakVirtualMemorySize = "Peak Virtual Memory Size ";
 
-             Occupytime = "Occupy time ";
 
-             PrivilegeOccupancytime = "Privilege Occupancy time ";
 
-             Useroccupiedtime = "User occupied time ";
 
-             
 
-         }
 
-         ~ResourceMonitor() => _timer.Dispose();//定时器销毁
 
-         public bool Initialize()
 
-         {
 
-             //>0 开启否则不开启
 
-             if (SC.GetValue<int>("System.CheckResourceInterval") > 0)
 
-             {
 
-                 _timer = new Timer();
 
-                 CpuOccupied  = new PerformanceCounter("Processor", "% Processor Time", "_Total");
 
-                 _timer.Enabled = true;
 
-                 _timer.Interval = SC.GetValue<int>("System.CheckResourceInterval") * 60 * 1000;
 
-                 _timer.Elapsed += GetProcessInfo;
 
-                 _timer.Start();
 
-                 //LOG.Write($"{ProcessName}" +
 
-                 //$"{ProcessID}" +
 
-                 ////$"{Starttime}"+
 
-                 //$"{Response}" +
 
-                 //$"{MainWindowHandle}" +
 
-                 ////$"{MainWindowTitle}"+
 
-                 //$"{AssociatedProcessHandle}" +
 
-                 //$"{Numberofhandlesopened}" +
 
-                 //$"{Numberofmodules}" +
 
-                 //$"{Basicpriority}" +
 
-                 //$"{Increasepriority}" +
 
-                 //$"{processor}" +
 
-                 //$"{Minimumworkingset}" +
 
-                 //$"{MaximumWorkingSet}" +
 
-                 //$"{Workset}" +
 
-                 //$"{Peakworkingset}" +
 
-                 //$"{Dedicatedmemorysize}" +
 
-                 //$"{UnpagedMemorySize}" +
 
-                 //$"{PagingMemorySize}" +
 
-                 //$"{Peakpagingmemorysize}" +
 
-                 //$"{VirtualMemorySize}" +
 
-                 //$"{PeakVirtualMemorySize}" +
 
-                 //$"{Occupytime}" +
 
-                 //$"{PrivilegeOccupancytime}" +
 
-                 //$"{Useroccupiedtime}");
 
-             }
 
-             return true;
 
-         }
 
-         private void GetProcessInfo(object sender, ElapsedEventArgs e)
 
-         {
 
-             try
 
-             {
 
-                 string rtmonoitor = process_use(processRTname);
 
-                 string uimonoitor = process_use(processUIname); 
 
-                 string systemMonitor = $"PC => {drive_use()}" +
 
-                     $"{cpu_use()}" +
 
-                     $"{memory_use()}";
 
-                 LOG.Write(eEvent.INFO_WINRESOURCE, ModuleName.System,
 
-                     rtmonoitor +
 
-                     " ".PadLeft(56, ' ') + uimonoitor +
 
-                     " ".PadLeft(56, ' ') + systemMonitor
 
-                 );
 
-                 //没有就不做任何操作
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write(eEvent.ERR_WINRESOURCE, ModuleName.System,$"Monitor Error happened: {ex}");
 
-             }
 
-         }
 
-         //process
 
-         private string process_use(string processname)
 
-         {
 
-             string monitor = "";
 
-             //判断是否存在该进程
 
-             //有就开始记录
 
-             if (Process.GetProcessesByName(processname).Length > 0)
 
-             {
 
-                 pro = Process.GetProcessesByName(processname)[0];
 
-                 //_Numberofhandlesopened.Add(pro.HandleCount);         //进程打开的句柄数
 
-                 //_Numberofmodules.Add(pro.Modules.Count);               //模块数量
 
-                 //_Basicpriority.Add(pro.BasePriority);                 //基本优先级
 
-                 //_processor.Add(pro.ProcessorAffinity.ToInt32());                     //处理器
 
-                 //_Minimumworkingset.Add(pro.MinWorkingSet.ToInt32());             //最小工作集
 
-                 //_MaximumWorkingSet.Add(pro.MaxWorkingSet.ToInt32());             //最大工作集
 
-                 //_Workset.Add(Convert.ToInt32(pro.WorkingSet64));                       //工作集
 
-                 //_Peakworkingset.Add(Convert.ToInt32(pro.PeakWorkingSet64));                //峰值工作集
 
-                 //_Dedicatedmemorysize.Add(Convert.ToInt32(pro.PrivateMemorySize64 / 1048576));           //专用内存大小
 
-                 //_UnpagedMemorySize.Add(Convert.ToInt32(pro.NonpagedSystemMemorySize64 / 1048576));             //未分页内存大小
 
-                 //_PagingMemorySize.Add(Convert.ToInt32(pro.PagedMemorySize64 / 1048576));              //分页内存大小
 
-                 //_Peakpagingmemorysize.Add(Convert.ToInt32(pro.PeakPagedMemorySize64 / 1048576));          //峰值分页内存大小
 
-                 //_VirtualMemorySize.Add(Convert.ToInt32(pro.VirtualMemorySize64 / 1024));             //虚拟内存大小
 
-                 //_PeakVirtualMemorySize.Add(Convert.ToInt32(pro.PeakVirtualMemorySize64 / 1048576));         //峰值虚拟内存大小
 
-                 monitor = //$"{ProcessName}:{pro.ProcessName}" +
 
-                                    //$"{pro.StartTime.ToLongDateString() + pro.StartTime.ToLongTimeString()}" +
 
-                 $"{processname} => {Response}:{pro.Responding.ToString()}\t" +
 
-                 $"{MainWindowHandle}:{pro.MainWindowHandle.ToString()}\t" +
 
-                 //$"{pro.MainWindowTitle}" +
 
-                 $"{AssociatedProcessHandle}:{pro.Handle.ToString()}\t" +
 
-                 $"{Numberofhandlesopened}:{pro.HandleCount.ToString()}\t" +
 
-                 $"{Numberofmodules}:{pro.Modules.Count.ToString()}\t" +
 
-                 $"{Basicpriority}:{pro.BasePriority.ToString()} \t" +
 
-                 $"{Increasepriority}:{pro.PriorityBoostEnabled.ToString()}\t" +
 
-                 $"{processor}:{pro.ProcessorAffinity.ToInt32().ToString()}\t" +
 
-                 //$"{Minimumworkingset}:{pro.MinWorkingSet.ToInt32().ToString()}\t" +
 
-                 $"{MaximumWorkingSet}:{pro.MaxWorkingSet.ToInt32().ToString()}\t" +
 
-                 $"{Workset}:{pro.WorkingSet64.ToString()}\t" +
 
-                 $"{Peakworkingset}:{pro.PeakWorkingSet64.ToString()}\t" +
 
-                 $"{Dedicatedmemorysize}:{(pro.PrivateMemorySize64 / 1048576).ToString()}MB\t" +
 
-                 $"{UnpagedMemorySize}:{(pro.NonpagedSystemMemorySize64 / 1048576).ToString()}MB\t" +
 
-                 $"{PagingMemorySize}:{(pro.PagedMemorySize64 / 1048576).ToString()}MB\t" +
 
-                 $"{Peakpagingmemorysize}:{(pro.PeakPagedMemorySize64 / 1048576).ToString()}MB\t" +
 
-                 $"{VirtualMemorySize}:{(pro.VirtualMemorySize64 / 1048576).ToString()}MB\t" +
 
-                 $"{PeakVirtualMemorySize}:{(pro.PeakVirtualMemorySize64 / 1048576).ToString()}MB\t" +
 
-                 $"{Occupytime}:{pro.TotalProcessorTime.ToString()}\t" +
 
-                 $"{PrivilegeOccupancytime}:{pro.PrivilegedProcessorTime.ToString()}\t" +
 
-                 $"{Useroccupiedtime}:{pro.UserProcessorTime.ToString()}\r\n";
 
-                 //如果虚拟内存大于800MB 即报警
 
-                 if (pro.PagedMemorySize64 / 1048576 >= threshold)
 
-                 {
 
-                     LOG.Write(eEvent.WARN_WINRESOURCE, ModuleName.System, $"警告!进程 {processname} 内存异常增长,超过{threshold}MB阈值!");
 
-                 }
 
-             }
 
-             return monitor;
 
-         }
 
-         //CPU
 
-         private string cpu_use()
 
-         {
 
-             float cpu_use_per = CpuOccupied.NextValue();
 
-             string cpu_use = $"CPU usage rate:{cpu_use_per:F2}%\t";
 
-             return cpu_use;
 
-         }
 
-         
 
-         //disk
 
-         private string drive_use()
 
-         {
 
-             string drive_use = "";
 
-             foreach (DriveInfo drive in DriveInfo.GetDrives())
 
-             {
 
-                 if (drive.IsReady)
 
-                 {
 
-                     drive_use += $"{drive.Name}";
 
-                     drive_use += $" Total:{drive.TotalSize / 1024 / 1024 / 1024}GB";
 
-                     drive_use += $" Used:{(drive.TotalSize - drive.AvailableFreeSpace) / 1024 / 1024 / 1024}GB";
 
-                     drive_use += $" Free:{drive.AvailableFreeSpace / 1024 / 1024 / 1024}GB\t";
 
-                 }
 
-             }
 
-             return drive_use;
 
-         }
 
-         //memory
 
-         private string memory_use()
 
-         {
 
-             string memory_use = "Memory status:" +
 
-                 $"Memory Available:{GetMemoryAvailable():F2}GB\t" +
 
-                 $"Memory Used:{GetMemoryUsed():F2}GB\t" +
 
-                 $"Memory Used Rate:{GetMemoryUsedRate():F2}%\t";
 
-             return memory_use;
 
-         }
 
-         //MemoryAvailable
 
-         private double? GetMemoryAvailable()
 
-         {
 
-             double availablebytes = 0;
 
-             var managementClassOs = new ManagementClass("Win32_OperatingSystem");
 
-             foreach (var managementBaseObject in managementClassOs.GetInstances())
 
-                 if (managementBaseObject["FreePhysicalMemory"] != null)
 
-                     availablebytes = 1024 * double.Parse(managementBaseObject["FreePhysicalMemory"].ToString());
 
-             return availablebytes / GbDiv;
 
-         }
 
-         //MemoryUsed
 
-         private double? GetMemoryUsed()
 
-         {
 
-             double? PhysicalMemory = GetPhysicalMemory();
 
-             double? MemoryAvailable = GetMemoryAvailable();
 
-             double? MemoryUsed = (double?)(PhysicalMemory - MemoryAvailable);
 
-             double currentMemoryUsed = (double)MemoryUsed;
 
-             return currentMemoryUsed;
 
-         }
 
-         //PhysicalMemory
 
-         private long? GetPhysicalMemory()
 
-         {
 
-             //获得物理内存
 
-             var managementClass = new ManagementClass("Win32_ComputerSystem");
 
-             var managementObjectCollection = managementClass.GetInstances();
 
-             long PhysicalMemory;
 
-             foreach (var managementBaseObject in managementObjectCollection)
 
-                 if (managementBaseObject["TotalPhysicalMemory"] != null)
 
-                 {
 
-                     return long.Parse(managementBaseObject["TotalPhysicalMemory"].ToString()) / GbDiv;
 
-                 }
 
-             return null;
 
-         }
 
-         //MemoryUsedRate
 
-         private double? GetMemoryUsedRate()
 
-         {
 
-             double? PhysicalMemory = GetPhysicalMemory();
 
-             double? MemoryAvailable = GetMemoryAvailable();
 
-             double? MemoryUsedRate = (double?)(PhysicalMemory - MemoryAvailable) / PhysicalMemory;
 
-             return MemoryUsedRate.HasValue ? Convert.ToDouble(MemoryUsedRate * 100) : 0;
 
-         }
 
-         
 
-         #region 单位转换进制
 
-         private const int KbDiv = 1024;
 
-         private const int MbDiv = 1024 * 1024;
 
-         private const int GbDiv = 1024 * 1024 * 1024;
 
-         #endregion
 
-     }
 
- }
 
 
  |