WMPerfMonPluginDisks.Mod 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. MODULE WMPerfMonPluginDisks; (** AUTHOR "staubesv"; PURPOSE "Performance Monitor disk transfer rate plugin"; *)
  2. (**
  3. * History:
  4. *
  5. * 16.02.2006 First Release (staubesv)
  6. * 23.06.2006 Adapted to WMPerfMonPlugins (staubesv)
  7. * 27.02.2007 Remove plugins when unloading module, distinct bytesRead/bytesWritten (staubesv)
  8. * 26.03.2007 Added NnofReads, NnofWrites, NnofOthers, NnofErrors, AvgBlockSize (staubesv)
  9. *)
  10. IMPORT
  11. WMPerfMonPlugins,
  12. KernelLog, Disks, Plugins, Modules;
  13. CONST
  14. PluginName = "DiskDevice";
  15. ModuleName = "WMPerfMonPluginDisks";
  16. TYPE
  17. DiskParameter = POINTER TO RECORD(WMPerfMonPlugins.Parameter)
  18. dev : Disks.Device;
  19. END;
  20. DiskPlugin = OBJECT(WMPerfMonPlugins.Plugin)
  21. VAR
  22. dev : Disks.Device;
  23. PROCEDURE Init*(p : WMPerfMonPlugins.Parameter);
  24. VAR ds : WMPerfMonPlugins.DatasetDescriptor;
  25. BEGIN
  26. p.name := PluginName; p.description := "Disk device statistics";
  27. SELF.dev := p(DiskParameter).dev;
  28. WMPerfMonPlugins.GetNameDesc(dev, p.devicename);
  29. p.modulename := ModuleName;
  30. p.autoMax := TRUE; p.unit := "KB"; p.perSecond := TRUE; p.minDigits := 5; p.showSum := TRUE;
  31. NEW(ds, 8);
  32. ds[0].name := "TotalKB";
  33. ds[1].name := "ReadKB";
  34. ds[2].name := "WrittenKB";
  35. ds[3].name := "AvgBlockSizeBytes";
  36. ds[4].name := "NnofReads";
  37. ds[5].name := "NnofWrites";
  38. ds[6].name := "NnofOthers";
  39. ds[7].name := "NnofErrors";
  40. p.datasetDescriptor := ds;
  41. END Init;
  42. PROCEDURE UpdateDataset*;
  43. VAR read, written, nofReads, nofWrites, nofTot, nofErrors : HUGEINT; total : REAL;
  44. BEGIN
  45. read := dev.NbytesRead; nofReads := dev.NnofReads;
  46. written := dev.NbytesWritten; nofWrites := dev.NnofWrites;
  47. total := read + written;
  48. nofErrors := dev.NnofErrors;
  49. nofTot := nofReads + nofWrites - nofErrors;
  50. dataset[0] := total / 1024;
  51. dataset[1] := read / 1024;
  52. dataset[2] := written / 1024;
  53. dataset[3] := total / nofTot;
  54. dataset[4] := nofReads;
  55. dataset[5] := nofWrites;
  56. dataset[6] := dev.NnofOthers;
  57. dataset[7] := nofErrors;
  58. END UpdateDataset;
  59. END DiskPlugin;
  60. PROCEDURE AddPlugin(disk : Disks.Device);
  61. VAR par : DiskParameter; plugin : DiskPlugin;
  62. BEGIN {EXCLUSIVE}
  63. NEW(par); par.dev := disk; NEW(plugin, par);
  64. END AddPlugin;
  65. PROCEDURE RemovePlugin(disk : Disks.Device);
  66. VAR devicename : WMPerfMonPlugins.DeviceName;
  67. BEGIN {EXCLUSIVE}
  68. WMPerfMonPlugins.GetNameDesc(disk, devicename);
  69. WMPerfMonPlugins.updater.RemoveByName(PluginName, devicename);
  70. END RemovePlugin;
  71. PROCEDURE EventHandler(event : WORD; plugin : Plugins.Plugin);
  72. BEGIN
  73. IF event = Plugins.EventAdd THEN
  74. AddPlugin(plugin (Disks.Device))
  75. ELSIF event = Plugins.EventRemove THEN
  76. RemovePlugin(plugin (Disks.Device));
  77. END;
  78. END EventHandler;
  79. PROCEDURE InitPlugins;
  80. VAR table : Plugins.Table; i : LONGINT;
  81. BEGIN
  82. IF Disks.Stats THEN
  83. Disks.registry.AddEventHandler(EventHandler, i); (* ignore res *)
  84. Disks.registry.GetAll(table);
  85. IF table # NIL THEN FOR i := 0 TO LEN(table)-1 DO AddPlugin(table[i] (Disks.Device)); END; END;
  86. ELSE KernelLog.String("WMPerfMonPluginDisks: Disks.PerformanceMonitoring is FALSE."); KernelLog.Ln;
  87. END;
  88. END InitPlugins;
  89. PROCEDURE Install*;
  90. END Install;
  91. PROCEDURE Cleanup;
  92. VAR ignore : LONGINT;
  93. BEGIN
  94. IF Disks.Stats THEN
  95. Disks.registry.RemoveEventHandler(EventHandler, ignore);
  96. WMPerfMonPlugins.updater.RemoveByModuleName(ModuleName);
  97. END;
  98. END Cleanup;
  99. BEGIN
  100. Modules.InstallTermHandler(Cleanup);
  101. InitPlugins;
  102. END WMPerfMonPluginDisks.
  103. WMPerfMonPluginDisks.Install ~ System.Free WMPerfMonPluginDisks ~