From 562efc7ddae097a44dee6021004f6713a3bdc09a Mon Sep 17 00:00:00 2001 From: Niko Ehrenfeuchter <nikolaus.ehrenfeuchter@unibas.ch> Date: Thu, 25 Apr 2019 15:17:10 +0200 Subject: [PATCH] Add DirectoryDetails class to investigate dirs in the grace location Refers to #20 --- ATxCommon/ATxCommon.csproj | 1 + ATxCommon/DirectoryDetails.cs | 69 +++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 ATxCommon/DirectoryDetails.cs diff --git a/ATxCommon/ATxCommon.csproj b/ATxCommon/ATxCommon.csproj index 7e3dffd..e75369b 100644 --- a/ATxCommon/ATxCommon.csproj +++ b/ATxCommon/ATxCommon.csproj @@ -46,6 +46,7 @@ <Compile Include="ActiveDirectory.cs" /> <Compile Include="BuildDetails.cs" /> <Compile Include="Conv.cs" /> + <Compile Include="DirectoryDetails.cs" /> <Compile Include="FsUtils.cs" /> <Compile Include="Monitoring\Cpu.cs" /> <Compile Include="Monitoring\MonitorBase.cs" /> diff --git a/ATxCommon/DirectoryDetails.cs b/ATxCommon/DirectoryDetails.cs new file mode 100644 index 0000000..df0f582 --- /dev/null +++ b/ATxCommon/DirectoryDetails.cs @@ -0,0 +1,69 @@ +using System; +using System.IO; +using NLog; + +namespace ATxCommon +{ + public class DirectoryDetails + { + private static readonly Logger Log = LogManager.GetCurrentClassLogger(); + + private long _size = -1; + private int _age = -1; + + /// <summary> + /// Initialize the DirectoryDetails object from the given DirectoryInfo. + /// </summary> + /// <param name="dirInfo">The DirectoryInfo object of the directory to investigate.</param> + public DirectoryDetails(DirectoryInfo dirInfo) { + Dir = dirInfo; + } + + /// <summary> + /// The underlying DirectoryInfo object. + /// </summary> + public DirectoryInfo Dir { get; } + + /// <summary> + /// The age defined by the directory's NAME in days. + /// </summary> + public int AgeFromName { + get { + if (_age < 0) + _age = FsUtils.DirNameToAge(Dir, DateTime.Now); + + return _age; + } + } + + /// <summary> + /// The full size of the directory tree in bytes. + /// </summary> + public long Size { + get { + if (_size >= 0) + return _size; + + try { + _size = FsUtils.GetDirectorySize(Dir.FullName); + } + catch (Exception ex) { + Log.Error("ERROR getting directory size of [{0}]: {1}", + Dir.FullName, ex.Message); + } + + return _size; + } + } + + /// <summary> + /// Human friendly description of the directory's age, derived from its NAME. + /// </summary> + public string HumanAgeFromName => TimeUtils.DaysToHuman(AgeFromName, false); + + /// <summary> + /// Human friendly description of the directory tree size (recursively). + /// </summary> + public string HumanSize => Conv.BytesToString(Size); + } +} -- GitLab