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