WMPerfMonPluginNetwork.Mod 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. MODULE WMPerfMonPluginNetwork; (** AUTHOR "staubesv"; PURPOSE "Performance Monitor network performance plugin"; *)
  2. IMPORT
  3. WMPerfMonPlugins, Network, Plugins, Modules;
  4. CONST
  5. PluginName = "NetworkSpeed";
  6. ModuleName = "WMPerfMonPluginNetwork";
  7. TYPE
  8. NetParameter* = POINTER TO RECORD (WMPerfMonPlugins.Parameter);
  9. device* : Network.LinkDevice;
  10. END;
  11. TYPE
  12. NetworkSpeed* = OBJECT(WMPerfMonPlugins.Plugin)
  13. VAR
  14. l : Network.LinkDevice;
  15. PROCEDURE Init*(p : WMPerfMonPlugins.Parameter);
  16. VAR ds : WMPerfMonPlugins.DatasetDescriptor;
  17. BEGIN
  18. p.name := PluginName; p.description := "Network Send Performance";
  19. SELF.l := p(NetParameter).device;
  20. WMPerfMonPlugins.GetNameDesc(l, p.devicename);
  21. p.modulename := ModuleName;
  22. p.autoMax := TRUE; p.perSecond := TRUE; p.showSum := TRUE; p.minDigits := 5;
  23. NEW(ds, 3);
  24. ds[0].name := "Total"; INCL(ds[0].flags, WMPerfMonPlugins.Sum); ds[0].unit := "KB";
  25. ds[1].name := "Send"; ds[1].unit := "KB";
  26. ds[2].name := "Receive"; ds[2].unit := "KB";
  27. p.datasetDescriptor := ds;
  28. END Init;
  29. PROCEDURE UpdateDataset*;
  30. VAR sentKB, receivedKB : REAL;
  31. BEGIN
  32. sentKB := l.sendCount / 1024;
  33. receivedKB := l.recvCount / 1024;
  34. dataset[0] := sentKB + receivedKB;
  35. dataset[1] := sentKB;
  36. dataset[2] := receivedKB;
  37. END UpdateDataset;
  38. END NetworkSpeed;
  39. PROCEDURE AddPlugin(dev :Network.LinkDevice);
  40. VAR ns : NetworkSpeed; npar : NetParameter;
  41. BEGIN {EXCLUSIVE}
  42. NEW(npar); npar.device := dev; NEW(ns, npar);
  43. END AddPlugin;
  44. PROCEDURE RemovePlugin(dev : Network.LinkDevice);
  45. VAR devicename : WMPerfMonPlugins.DeviceName;
  46. BEGIN {EXCLUSIVE}
  47. WMPerfMonPlugins.GetNameDesc(dev, devicename);
  48. WMPerfMonPlugins.updater.RemoveByName(PluginName, devicename);
  49. END RemovePlugin;
  50. PROCEDURE EventHandler(event : WORD; plugin : Plugins.Plugin);
  51. BEGIN
  52. IF event = Plugins.EventAdd THEN
  53. AddPlugin(plugin (Network.LinkDevice))
  54. ELSIF event = Plugins.EventRemove THEN
  55. RemovePlugin(plugin (Network.LinkDevice));
  56. END;
  57. END EventHandler;
  58. PROCEDURE InitPlugins;
  59. VAR table : Plugins.Table; i : LONGINT;
  60. BEGIN
  61. Network.registry.AddEventHandler(EventHandler, i);
  62. Network.registry.GetAll(table);
  63. IF table # NIL THEN FOR i := 0 TO LEN(table)-1 DO AddPlugin(table[i] (Network.LinkDevice)); END; END;
  64. END InitPlugins;
  65. PROCEDURE Install*;
  66. END Install;
  67. PROCEDURE Cleanup;
  68. VAR ignore : LONGINT;
  69. BEGIN
  70. Network.registry.RemoveEventHandler(EventHandler, ignore);
  71. WMPerfMonPlugins.updater.RemoveByModuleName(ModuleName);
  72. END Cleanup;
  73. BEGIN
  74. Modules.InstallTermHandler(Cleanup);
  75. InitPlugins;
  76. END WMPerfMonPluginNetwork.
  77. WMPerfMonPluginNetwork.Install ~ System.Free WMPerfMonPluginNetwork ~