Files
abysmal-isle/Server/Persistence/SaveMetrics.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

140 lines
5.0 KiB
C#

using System;
using System.Diagnostics;
namespace Server
{
public sealed class SaveMetrics : IDisposable
{
private const string PerformanceCategoryName = "ServUO";
private const string PerformanceCategoryDesc = "Performance counters for ServUO";
private readonly PerformanceCounter numberOfWorldSaves;
private readonly PerformanceCounter itemsPerSecond;
private readonly PerformanceCounter mobilesPerSecond;
private readonly PerformanceCounter dataPerSecond;
private readonly PerformanceCounter serializedBytesPerSecond;
private readonly PerformanceCounter writtenBytesPerSecond;
public SaveMetrics()
{
if (!PerformanceCounterCategory.Exists(PerformanceCategoryName))
{
CounterCreationDataCollection counters = new CounterCreationDataCollection();
counters.Add(new CounterCreationData(
"Save - Count",
"Number of world saves.",
PerformanceCounterType.NumberOfItems32));
counters.Add(new CounterCreationData(
"Save - Items/sec",
"Number of items saved per second.",
PerformanceCounterType.RateOfCountsPerSecond32));
counters.Add(new CounterCreationData(
"Save - Mobiles/sec",
"Number of mobiles saved per second.",
PerformanceCounterType.RateOfCountsPerSecond32));
counters.Add(new CounterCreationData(
"Save - Customs/sec",
"Number of cores saved per second.",
PerformanceCounterType.RateOfCountsPerSecond32));
counters.Add(new CounterCreationData(
"Save - Serialized bytes/sec",
"Amount of world-save bytes serialized per second.",
PerformanceCounterType.RateOfCountsPerSecond32));
counters.Add(new CounterCreationData(
"Save - Written bytes/sec",
"Amount of world-save bytes written to disk per second.",
PerformanceCounterType.RateOfCountsPerSecond32));
if (!Core.Unix)
{
try
{
PerformanceCounterCategory.Create(PerformanceCategoryName, PerformanceCategoryDesc, PerformanceCounterCategoryType.SingleInstance, counters);
}
catch
{
if (Core.Debug)
Console.WriteLine("Metrics: Metrics enabled. Performance counters creation requires ServUO to be run as Administrator once!");
}
}
else
{
Utility.PushColor(ConsoleColor.Yellow);
Console.WriteLine("WARNING: You've enabled SaveMetrics. This is currently not supported on Unix based operating systems. Please disable this option to hide this message.");
Utility.PopColor();
}
}
this.numberOfWorldSaves = new PerformanceCounter(PerformanceCategoryName, "Save - Count", false);
this.itemsPerSecond = new PerformanceCounter(PerformanceCategoryName, "Save - Items/sec", false);
this.mobilesPerSecond = new PerformanceCounter(PerformanceCategoryName, "Save - Mobiles/sec", false);
this.dataPerSecond = new PerformanceCounter(PerformanceCategoryName, "Save - Customs/sec", false);
this.serializedBytesPerSecond = new PerformanceCounter(PerformanceCategoryName, "Save - Serialized bytes/sec", false);
this.writtenBytesPerSecond = new PerformanceCounter(PerformanceCategoryName, "Save - Written bytes/sec", false);
// increment number of world saves
this.numberOfWorldSaves.Increment();
}
public void OnItemSaved(int numberOfBytes)
{
this.itemsPerSecond.Increment();
this.serializedBytesPerSecond.IncrementBy(numberOfBytes);
}
public void OnMobileSaved(int numberOfBytes)
{
this.mobilesPerSecond.Increment();
this.serializedBytesPerSecond.IncrementBy(numberOfBytes);
}
public void OnGuildSaved(int numberOfBytes)
{
this.serializedBytesPerSecond.IncrementBy(numberOfBytes);
}
public void OnDataSaved(int numberOfBytes)
{
this.dataPerSecond.Increment();
this.serializedBytesPerSecond.IncrementBy(numberOfBytes);
}
public void OnFileWritten(int numberOfBytes)
{
this.writtenBytesPerSecond.IncrementBy(numberOfBytes);
}
private bool isDisposed;
public void Dispose()
{
if (!this.isDisposed)
{
this.isDisposed = true;
this.numberOfWorldSaves.Dispose();
this.itemsPerSecond.Dispose();
this.mobilesPerSecond.Dispose();
this.dataPerSecond.Dispose();
this.serializedBytesPerSecond.Dispose();
this.writtenBytesPerSecond.Dispose();
}
}
}
}