AppDomainAppServer.StatusInfo.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using SuperSocket.SocketBase.Metadata;
  6. using System.Diagnostics;
  7. using SuperSocket.SocketBase;
  8. namespace SuperSocket.SocketEngine
  9. {
  10. [StatusInfo(StatusInfoKeys.CpuUsage, Name = "CPU Usage", Format = "{0:0.00}%", DataType = typeof(double), Order = 112)]
  11. [StatusInfo(StatusInfoKeys.MemoryUsage, Name = "Memory Usage", Format = "{0:0.00}%", DataType = typeof(double), Order = 113)]
  12. partial class AppDomainAppServer
  13. {
  14. private static Process m_Process;
  15. private readonly static bool m_AppDomainMonitoringSupported = false;
  16. static AppDomainAppServer()
  17. {
  18. try
  19. {
  20. AppDomain.MonitoringIsEnabled = true;
  21. m_AppDomainMonitoringSupported = true;
  22. }
  23. catch (NotImplementedException)
  24. {
  25. return;
  26. }
  27. m_Process = Process.GetCurrentProcess();
  28. }
  29. protected override bool StatusMetadataExtended
  30. {
  31. get
  32. {
  33. return m_AppDomainMonitoringSupported;
  34. }
  35. }
  36. public override StatusInfoCollection CollectServerStatus(StatusInfoCollection nodeStatus)
  37. {
  38. var statusCollection = base.CollectServerStatus(nodeStatus);
  39. if (!m_AppDomainMonitoringSupported)
  40. return statusCollection;
  41. if (statusCollection != null && m_HostDomain != null)
  42. {
  43. if (m_Process.TotalProcessorTime.TotalMilliseconds > 0)
  44. {
  45. var value = m_HostDomain.MonitoringTotalProcessorTime.TotalMilliseconds * 100 / m_Process.TotalProcessorTime.TotalMilliseconds;
  46. statusCollection[StatusInfoKeys.CpuUsage] = value;
  47. }
  48. if (AppDomain.MonitoringSurvivedProcessMemorySize > 0)
  49. {
  50. var value = (double)m_HostDomain.MonitoringSurvivedMemorySize * 100 / (double)AppDomain.MonitoringSurvivedProcessMemorySize;
  51. statusCollection[StatusInfoKeys.MemoryUsage] = (double)value;
  52. }
  53. }
  54. return statusCollection;
  55. }
  56. }
  57. }