diff --git a/CHANGELOG.md b/CHANGELOG.md index e99f693..194332d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] - ### Added - Added Shim to read a list from xml with no root element - Added a URI query builder @@ -15,7 +14,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fixed JSON DateTime parsing in .Net Standard - Fixed threading exception in TypeExtensions - ## [9.4.0] - 2019-05-10 ### Added - Added extension method for peeking queues @@ -69,6 +67,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Better VC-4 support for IcdConsole - JSON refactoring for simpler deserialization +## [8.4.1] - 2019-06-05 +### Changed + - Caching the program/processor start time and calculating the uptime from those values instead of polling the crestron processor + ## [8.4.0] - 2019-05-15 ### Added - Added GUID utils for generating seeded GUIDs diff --git a/ICD.Common.Utils/ProcessorUtils.SimplSharp.cs b/ICD.Common.Utils/ProcessorUtils.SimplSharp.cs index f2ac4f7..8a09ee7 100644 --- a/ICD.Common.Utils/ProcessorUtils.SimplSharp.cs +++ b/ICD.Common.Utils/ProcessorUtils.SimplSharp.cs @@ -14,13 +14,16 @@ namespace ICD.Common.Utils private const string UPTIME_COMMAND = "uptime"; private const string PROGUPTIME_COMMAND_ROOT = "proguptime:{0}"; - private const string UPTIME_REGEX = @".*(?'uptime'\d+ days \d{2}:\d{2}:\d{2}\.\d+)"; + private const string UPTIME_REGEX = @".*(?'uptime'(?'days'\d+) days (?'hours'\d{2}):(?'minutes'\d{2}):(?'seconds'\d{2})\.(?'milliseconds'\d+))"; private const string RAMFREE_COMMAND = "ramfree"; private const string RAMFREE_DIGITS_REGEX = @"^(\d*)"; private static string s_VersionResult; + private static DateTime? s_SystemUptimeStartTime; + private static DateTime? s_ProgramUptimeStartTime; + #region Properties /// @@ -232,24 +235,53 @@ namespace ICD.Common.Utils /// /// [PublicAPI] - public static string GetSystemUptime() + public static TimeSpan GetSystemUptime() { - string uptime = GetUptime(); - Match match = Regex.Match(uptime, UPTIME_REGEX); - return match.Groups["uptime"].Value; + if (s_SystemUptimeStartTime == null) + { + string uptime = GetSystemUptimeFeedback(); + Match match = Regex.Match(uptime, UPTIME_REGEX); + if (!match.Success) + return default(TimeSpan); + + int days = int.Parse(match.Groups["days"].Value); + int hours = int.Parse(match.Groups["hours"].Value); + int minutes = int.Parse(match.Groups["minutes"].Value); + int seconds = int.Parse(match.Groups["seconds"].Value); + int milliseconds = int.Parse(match.Groups["milliseconds"].Value); + + TimeSpan span = new TimeSpan(days, hours, minutes, seconds, milliseconds); + s_SystemUptimeStartTime = IcdEnvironment.GetLocalTime() - span; + } + + return IcdEnvironment.GetLocalTime() - s_SystemUptimeStartTime.Value; } /// - /// Gets the uptime + /// Gets the uptime of the current program. /// - /// /// [PublicAPI] - public static string GetProgramUptime(int progslot) + public static TimeSpan GetProgramUptime() { - string uptime = GetUptime(progslot); - Match match = Regex.Match(uptime, UPTIME_REGEX); - return match.Groups["uptime"].Value; + if (s_ProgramUptimeStartTime == null) + { + string uptime = GetProgramUptimeFeedback((int)ProgramUtils.ProgramNumber); + Match match = Regex.Match(uptime, UPTIME_REGEX); + if (!match.Success) + return default(TimeSpan); + + int days = int.Parse(match.Groups["days"].Value); + int hours = int.Parse(match.Groups["hours"].Value); + int minutes = int.Parse(match.Groups["minutes"].Value); + int seconds = int.Parse(match.Groups["seconds"].Value); + int milliseconds = int.Parse(match.Groups["milliseconds"].Value); + + TimeSpan span = new TimeSpan(days, hours, minutes, seconds, milliseconds); + s_ProgramUptimeStartTime = IcdEnvironment.GetLocalTime() - span; + } + + return IcdEnvironment.GetLocalTime() - s_ProgramUptimeStartTime.Value; } #endregion @@ -270,7 +302,7 @@ namespace ICD.Common.Utils return ramfree; } - private static string GetUptime() + private static string GetSystemUptimeFeedback() { string uptime = null; if (!IcdConsole.SendControlSystemCommand(UPTIME_COMMAND, ref uptime)) @@ -282,7 +314,7 @@ namespace ICD.Common.Utils return uptime; } - private static string GetUptime(int programSlot) + private static string GetProgramUptimeFeedback(int programSlot) { string uptime = null; if (!IcdConsole.SendControlSystemCommand(string.Format(PROGUPTIME_COMMAND_ROOT, programSlot), ref uptime)) diff --git a/ICD.Common.Utils/ProcessorUtils.Standard.cs b/ICD.Common.Utils/ProcessorUtils.Standard.cs index 619dc75..5755431 100644 --- a/ICD.Common.Utils/ProcessorUtils.Standard.cs +++ b/ICD.Common.Utils/ProcessorUtils.Standard.cs @@ -140,22 +140,21 @@ namespace ICD.Common.Utils /// /// [PublicAPI] - public static string GetSystemUptime() + public static TimeSpan GetSystemUptime() { // TODO - return null; + return default(TimeSpan); } /// /// Gets the uptime /// - /// /// [PublicAPI] - public static string GetProgramUptime(int progslot) + public static TimeSpan GetProgramUptime() { // TODO - return null; + return default(TimeSpan); } #endregion