292 lines · 10.0 KB · C#
RawDownload
//******************************************************************************************************//  CompletenessReportingProcess.cs - Gbtc////  Copyright © 2014, Grid Protection Alliance.  All Rights Reserved.////  Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See//  the NOTICE file distributed with this work for additional information regarding copyright ownership.//  The GPA licenses this file to you under the MIT License (MIT), the "License"; you may//  not use this file except in compliance with the License. You may obtain a copy of the License at:////      http://www.opensource.org/licenses/MIT////  Unless agreed to in writing, the subject software distributed under the License is distributed on an//  "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the//  License for the specific language governing permissions and limitations.////  Code Modification History://  ----------------------------------------------------------------------------------------------------//  03/05/2014 - Stephen C. Wills//       Generated original version of source code.//  04/29/2015 - J. Ritchie Carroll//       Added report e-mail parameters.//  06/08/2015 - J. Ritchie Carroll//       Modified class to derive from ReportingProcessBase.//  10/27/2017 - Stephen Jenks//      Added GenerateCsvReport property//////****************************************************************************************************** using System.Text;using GSF.Configuration;using GSF.Console;using System.Text.RegularExpressions;using System; namespace GSF.TimeSeries.Reports{    /// <summary>    /// Represents the process that generates completeness reports for the time-series service.    /// </summary>    public class CompletenessReportingProcess : ReportingProcessBase    {        #region [ Members ]         // Fields        private double m_level4Threshold;        private double m_level3Threshold;        private string m_level4Alias;        private string m_level3Alias;        private bool m_generateCsvReport;         #endregion         #region [ Constructors ]         /// <summary>        /// Creates a new instance of the <see cref="CompletenessReportingProcess"/> class.        /// </summary>        public CompletenessReportingProcess()            : base("Completeness")        {            m_level4Threshold = 99.0D;            m_level3Threshold = 90.0D;            m_level4Alias = "Good";            m_level3Alias = "Fair";            m_generateCsvReport = false;        }         #endregion         #region [ Properties ]         /// <summary>        /// Gets or sets the minimum percentage of measurements received from devices in level 4.        /// </summary>        public double Level4Threshold        {            get            {                return m_level4Threshold;            }            set            {                m_level4Threshold = value;            }        }         /// <summary>        /// Gets or sets the minimum percentage of measurements received from devices in level 3.        /// </summary>        public double Level3Threshold        {            get            {                return m_level3Threshold;            }            set            {                m_level3Threshold = value;            }        }         /// <summary>        /// Gets or sets the alias for the level 4 category.        /// </summary>        public string Level4Alias        {            get            {                return m_level4Alias;            }            set            {                m_level4Alias = value;            }        }         /// <summary>        /// Gets or sets the alias for the level 3 category.        /// </summary>        public string Level3Alias        {            get            {                return m_level3Alias;            }            set            {                m_level3Alias = value;            }        }         /// <summary>        /// Gets or sets the option to generate a csv report along with pdf report.        /// </summary>        public bool GenerateCsvReport        {            get            {                return m_generateCsvReport;            }            set            {                m_generateCsvReport = value;            }        }         /// <summary>        /// Gets the current status details about reporting process.        /// </summary>        public override string Status        {            get            {                StringBuilder status = new StringBuilder(base.Status);                 status.AppendFormat("         Level 4 threshold: {0:N2}%", Level4Threshold);                status.AppendLine();                status.AppendFormat("         Level 3 threshold: {0:N2}%", Level3Threshold);                status.AppendLine();                status.AppendFormat("             Level 4 alias: {0}", Level4Alias ?? "undefined");                status.AppendLine();                status.AppendFormat("             Level 3 alias: {0}", Level3Alias ?? "undefined");                status.AppendLine();                 return status.ToString();            }        }         #endregion         #region [ Methods ]         /// <summary>        /// Loads saved settings from the config file.        /// </summary>        public override void LoadSettings()        {            base.LoadSettings();             // Load settings from the specified category.            ConfigurationFile config = ConfigurationFile.Current;            CategorizedSettingsElementCollection settings = config.Settings[SettingsCategory];             settings.Add("Level4Threshold", m_level4Threshold, "Minimum percentage of measurements received from devices in level 4.");            settings.Add("Level3Threshold", m_level3Threshold, "Minimum percentage of measurements received from devices in level 3.");            settings.Add("Level4Alias", m_level4Alias, "Alias for the level 4 category.");            settings.Add("Level3Alias", m_level3Alias, "Alias for the level 3 category.");            settings.Add("GenerateCsvReport", m_generateCsvReport, "Generate a csv version of the pdf report");             Level4Threshold = settings["Level4Threshold"].ValueAs(m_level4Threshold);            Level3Threshold = settings["Level3Threshold"].ValueAs(m_level3Threshold);            Level4Alias = settings["Level4Alias"].ValueAs(m_level4Alias);            Level3Alias = settings["Level3Alias"].ValueAs(m_level3Alias);            GenerateCsvReport = settings["GenerateCsvReport"].ValueAs(m_generateCsvReport);        }         /// <summary>        /// Saves settings to the config file.        /// </summary>        public override void SaveSettings()        {            base.SaveSettings();             // Save settings under the specified category.            ConfigurationFile config = ConfigurationFile.Current;            CategorizedSettingsElementCollection settings = config.Settings[SettingsCategory];             settings["Level4Threshold", true].Update(m_level4Threshold);            settings["Level3Threshold", true].Update(m_level3Threshold);            settings["Level4Alias", true].Update(m_level4Alias);            settings["Level3Alias", true].Update(m_level3Alias);            settings["GenerateCsvReport"].Update(m_generateCsvReport);            config.Save();        }         /// <summary>        /// Gets the command line arguments for the reporting process.        /// </summary>        public override string GetArguments()        {            // Because we may have a archive location like "C:\Program Files\MyPath" with quotes,            // the arguments below have an extra leading and trailing space around quoted values            // for proper parsing.            return string.Format(                 "{0} " +                 "--level4threshold=\" {1} \" " +                 "--level3threshold=\" {2} \" " +                 "--level4alias=\" {3} \" " +                 "--level3alias=\" {4} \" " +                 "--GenerateCsvReport=\" {5} \"",                 base.GetArguments(),                 Level4Threshold,                 Level3Threshold,                 Level4Alias.Replace("\"", "\\\""),                 Level3Alias.Replace("\"", "\\\""),                 GenerateCsvReport);        }         /// <summary>        /// Applies any received command line arguments for the reporting process.        /// </summary>        /// <param name="args">Received command line arguments.</param>        public override void SetArguments(Arguments args)        {            base.SetArguments(args);             double value;            string arg = args["level4Threshold"];             if ((object)arg != null && double.TryParse(arg.Trim(), out value))                Level4Threshold = value;             arg = args["level3Threshold"];             if ((object)arg != null && double.TryParse(arg.Trim(), out value))                Level3Threshold = value;             arg = args["level4Alias"];             if ((object)arg != null)                Level4Alias = arg.Trim();             arg = args["level3Alias"];             if ((object)arg != null)                Level3Alias = arg.Trim();             bool value2;            arg = args["GenerateCsvReport"];             if ((object)arg != null && bool.TryParse(arg.Trim(), out value2))                GenerateCsvReport = value2;        }         /// <summary>        /// Determines whether the given path is a path to a report, based on the file name.        /// </summary>        public override bool IsReportFileName(string fileName)        {            string regex = string.Format(@"{0} (?<Date>[^.]+)\.csv", Title);            Match match = Regex.Match(fileName, regex);            DateTime reportDate;              return base.IsReportFileName(fileName) || match.Success && DateTime.TryParse(match.Groups["Date"].Value, out reportDate);        }         #endregion    }}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t