Simple background monitor for tracking memory, CPU usage, and server status
This commit is contained in:
parent
b11eb31c51
commit
629ba9ea05
92
src/DiIiS-NA/Extensions.cs
Normal file
92
src/DiIiS-NA/Extensions.cs
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Configuration;
|
||||||
|
|
||||||
|
namespace DiIiS_NA
|
||||||
|
{
|
||||||
|
public static class Extensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Transforms a timespan to a readable text.
|
||||||
|
/// E.g.:
|
||||||
|
/// 1 day, 2 hours, 3 minutes and 4 seconds
|
||||||
|
/// 5 hours, 6 minutes and 7 seconds
|
||||||
|
///
|
||||||
|
/// If over certain threshold (millennium or more) it will only return the number of days.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="span">The timespan to be converted</param>
|
||||||
|
/// <returns>The readable text</returns>
|
||||||
|
public static string ToText(this TimeSpan span)
|
||||||
|
{
|
||||||
|
List<string> parts = new();
|
||||||
|
|
||||||
|
// if days are divided by 365, we have years, otherwise we have months or days
|
||||||
|
if (span.Days / 365 > 0)
|
||||||
|
{
|
||||||
|
// if days are divided by 365, we have years
|
||||||
|
parts.Add($"{((double)span.Days / 365):F} year{(span.Days / 365 > 1 ? "s" : "")}");
|
||||||
|
// get months from the remaining days
|
||||||
|
int months = span.Days % 365 / 30;
|
||||||
|
if (months > 0)
|
||||||
|
parts.Add($"{months} month{(months > 1 ? "s" : "")}");
|
||||||
|
|
||||||
|
// get remaining days
|
||||||
|
int days = span.Days % 365 % 30;
|
||||||
|
if (days > 0)
|
||||||
|
parts.Add($"{days} day{(days > 1 ? "s" : "")}");
|
||||||
|
}
|
||||||
|
else if (span.Days / 30 > 0)
|
||||||
|
{
|
||||||
|
// if days are divided by 30, we have months
|
||||||
|
parts.Add($"{((double)span.Days / 30):F} month{(span.Days / 30 > 1 ? "s" : "")}");
|
||||||
|
// get remaining days
|
||||||
|
int days = span.Days % 30;
|
||||||
|
if (days > 0)
|
||||||
|
parts.Add($"{days} day{(days > 1 ? "s" : "")}");
|
||||||
|
}
|
||||||
|
else if (span.Days > 0)
|
||||||
|
// if days are not divided by 365 or 30, we have days
|
||||||
|
parts.Add( $"{span.Days} day{(span.Days > 1 ? "s" : "")}");
|
||||||
|
if (span.Hours > 0)
|
||||||
|
parts.Add($"{span.Hours} hour{(span.Hours > 1 ? "s" : "")}");
|
||||||
|
if (span.Minutes > 0)
|
||||||
|
parts.Add($"{span.Minutes} minute{(span.Minutes > 1 ? "s" : "")}");
|
||||||
|
if (span.Seconds > 0)
|
||||||
|
parts.Add($"{span.Seconds} second{(span.Seconds > 1 ? "s" : "")}");
|
||||||
|
|
||||||
|
var result = parts.ToArray();
|
||||||
|
return string.Join(", ", result[..^1]) + (result.Length > 1 ? " and " : "") + parts[^1];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToSmallText(this TimeSpan span)
|
||||||
|
{
|
||||||
|
List<string> parts = new();
|
||||||
|
if (span.Days / 365 > 0)
|
||||||
|
{
|
||||||
|
parts.Add($"{((double)span.Days / 365):F}y");
|
||||||
|
int months = span.Days % 365 / 30;
|
||||||
|
if (months > 0)
|
||||||
|
parts.Add($"{months}m");
|
||||||
|
int days = span.Days % 365 % 30;
|
||||||
|
if (days > 0)
|
||||||
|
parts.Add($"{days}d");
|
||||||
|
}
|
||||||
|
else if (span.Days / 30 > 0)
|
||||||
|
{
|
||||||
|
parts.Add($"{((double)span.Days / 30):F}m");
|
||||||
|
int days = span.Days % 30;
|
||||||
|
if (days > 0)
|
||||||
|
parts.Add($"{days}d");
|
||||||
|
}
|
||||||
|
else if (span.Days > 0)
|
||||||
|
parts.Add($"{span.Days}d");
|
||||||
|
if (span.Hours > 0)
|
||||||
|
parts.Add($"{span.Hours}h");
|
||||||
|
if (span.Minutes > 0)
|
||||||
|
parts.Add($"{span.Minutes}m");
|
||||||
|
if (span.Seconds > 0)
|
||||||
|
parts.Add($"{span.Seconds}s");
|
||||||
|
return string.Join(" ", parts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -47,6 +47,7 @@ using Npgsql;
|
|||||||
using System;
|
using System;
|
||||||
//Blizzless Project 2022
|
//Blizzless Project 2022
|
||||||
using System.Data.Common;
|
using System.Data.Common;
|
||||||
|
using System.Diagnostics;
|
||||||
//Blizzless Project 2022
|
//Blizzless Project 2022
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
//Blizzless Project 2022
|
//Blizzless Project 2022
|
||||||
@ -99,14 +100,50 @@ namespace DiIiS_NA
|
|||||||
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
|
AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
|
||||||
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
|
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
|
||||||
|
|
||||||
string Name = $"Blizzless: Build {Build}, Stage: {Stage} - {TypeBuild}";
|
string name = $"Blizzless: Build {Build}, Stage: {Stage} - {TypeBuild}";
|
||||||
Console.WriteLine(" " + Name);
|
Console.WriteLine(" " + name);
|
||||||
Console.WriteLine("Connected Module: 0x00 - Diablo 3 RoS 2.7.4.84161");
|
Console.WriteLine("Connected Module: 0x00 - Diablo 3 RoS 2.7.4.84161");
|
||||||
Console.WriteLine("------------------------------------------------------------------------");
|
Console.WriteLine("------------------------------------------------------------------------");
|
||||||
Console.ResetColor();
|
Console.ResetColor();
|
||||||
Console.Title = Name;
|
Console.Title = name;
|
||||||
|
|
||||||
InitLoggers();
|
InitLoggers();
|
||||||
|
|
||||||
|
#pragma warning disable CS4014
|
||||||
|
Task.Run(async () =>
|
||||||
|
#pragma warning restore CS4014
|
||||||
|
{
|
||||||
|
Logger.Info("Started Background Monitor!");
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var uptime = (DateTime.Now - StartupTime).ToText();
|
||||||
|
// get total memory from process
|
||||||
|
var totalMemory =
|
||||||
|
(double)((double)Process.GetCurrentProcess().WorkingSet64 / 1024 / 1024 / 1024);
|
||||||
|
// get CPU time
|
||||||
|
using var proc = Process.GetCurrentProcess();
|
||||||
|
var cpuTime = proc.TotalProcessorTime;
|
||||||
|
var text =
|
||||||
|
$"{name} | {PlayerManager.OnlinePlayers.Count()} onlines in {PlayerManager.OnlinePlayers.Count(s => s.InGameClient.Player.World != null)} worlds | Memory: {totalMemory:0.000} GB | CPU Time: {cpuTime.ToSmallText()} | Uptime: {uptime}";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.Title = text;
|
||||||
|
await Task.Delay(1000);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.Info(text);
|
||||||
|
await Task.Delay(60000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
AchievementManager.Initialize();
|
AchievementManager.Initialize();
|
||||||
Core.Storage.AccountDataBase.SessionProvider.RebuildSchema();
|
Core.Storage.AccountDataBase.SessionProvider.RebuildSchema();
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
|||||||
Loading…
Reference in New Issue
user.block.title