Skip to content
Snippets Groups Projects
Select Git revision
  • aa083a63ad160fbd4c0249de68df6d56462b9533
  • main default protected
  • dev protected
  • Issue/3142-kpiGenerator
  • Hotfix/3115-userReportingEmpty2
  • Hotfix/3115-userReportingEmpty
  • Issue/3073-kpi
  • Issue/2492-respOrg
  • Issue/3005-kpiReportingBroken
  • Issue/2982-kpiDataPub
  • gitkeep
  • Issue/2847-reporting
  • Issue/2850-removeGrantId
  • Issue/2432-publicationKpi
  • Hotfix/xxxx-rors
  • Issue/2666-adminCronjobs-theSequal
  • Issue/2666-adminCronjobs
  • Issue/2568-betterLogging
  • Issue/2518-docs
  • Hotfix/2388-sensitive
  • Issue/2330-fixNaNQuotainAdmin
  • v1.2.10
  • v1.2.9
  • v1.2.8
  • v1.2.7
  • v1.2.6
  • v1.2.5
  • v1.2.4
  • v1.2.3
  • v1.2.2
  • v1.2.1
  • v1.2.0
  • v1.1.1
  • v1.1.0
  • v1.0.9
  • v1.0.8
  • v1.0.7
  • v1.0.6
  • v1.0.5
  • v1.0.4
  • v1.0.3
41 results

Program.cs

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Program.cs 5.33 KiB
    using CommandLine;
    using Coscine.KpiGenerator.Logging;
    using Coscine.KpiGenerator.Reportings.ApplicationProfile;
    using Coscine.KpiGenerator.Reportings.Complete;
    using Coscine.KpiGenerator.Reportings.Project;
    using Coscine.KpiGenerator.Reportings.Resource;
    using Coscine.KpiGenerator.Reportings.System;
    using Coscine.KpiGenerator.Reportings.User;
    using Microsoft.Extensions.Logging;
    using NLog.Config;
    using NLog.Extensions.Logging;
    using static KPIGenerator.Utils.CommandLineOptions;
    
    namespace Coscine.KpiGenerator;
    
    public class Program
    {
        private static ILogger _logger = null!;
    
        public static int Main(string[] args)
        {
            ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("assembly-name", typeof(AssemblyNameLayoutRenderer));
            ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("assembly-version", typeof(AssemblyVersionLayoutRenderer));
            _logger = LoggerFactory.Create(builder => builder.AddNLog()).CreateLogger<Program>();
    
            try
            {
                bool result = Parser.Default.ParseArguments<
                    CompleteReportingOptions,
                    ProjectReportingOptions,
                    ResourceReportingOptions,
                    UserReportingOptions,
                    ApplicationProfileReportingOptions,
                    SystemReportingOptions
                    >(args)
                .MapResult(
                  (CompleteReportingOptions options) => new CompleteReporting(SanitizeOptions(options), _logger).Run(),
                  (ProjectReportingOptions options) => new ProjectReporting(SanitizeOptions(options), _logger).Run(),
                  (ResourceReportingOptions options) => new ResourceReporting(SanitizeOptions(options), _logger).Run(),
                  (UserReportingOptions options) => new UserReporting(SanitizeOptions(options), _logger).Run(),
                  (ApplicationProfileReportingOptions options) => new ApplicationProfileReporting(SanitizeOptions(options), _logger).Run(),
                  (SystemReportingOptions options) => new SystemReporting(SanitizeOptions(options), _logger).Run(),
                  _ => false);
                if (result)
                {
                    Console.WriteLine("\nFinished.\n");
                    _logger.LogInformation("Finished.");
                    return 0; // Exit Code 0 for Success
                }
                else
                {
                    Console.WriteLine("Program execution was interrupted.\n");
                    _logger.LogInformation("Program execution was interrupted.");
                    return -1; // Exit Code -1 for Failure
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                _logger.LogWarning(e, e.Message);
                return -1; // Exit Code -1 for Failure
            }
        }
    
        public static TResult SanitizeOptions<TResult>(TResult unsanitizedOptions)
        {
            // Sanitize all input that accepts an array or is a list of inputs.
            if (unsanitizedOptions is not null)
            {
                var type = unsanitizedOptions.GetType();
                if (type == typeof(CompleteReportingOptions))
                {
                    var options = unsanitizedOptions as CompleteReportingOptions;
                    if (options is not null)
                    {
                        // Sanitize options here
                        return (TResult)(object)options;
                    }
                }
                else if (type == typeof(ProjectReportingOptions))
                {
                    var options = unsanitizedOptions as ProjectReportingOptions;
                    if (options is not null)
                    {
                        // Sanitize options here
                        return (TResult)(object)options;
                    }
                }
                else if (type == typeof(ResourceReportingOptions))
                {
                    var options = unsanitizedOptions as ResourceReportingOptions;
                    if (options is not null)
                    {
                        // Sanitize options here
                        return (TResult)(object)options;
                    }
                }
                else if (type == typeof(UserReportingOptions))
                {
                    var options = unsanitizedOptions as UserReportingOptions;
                    if (options is not null)
                    {
                        // Sanitize options here
                        return (TResult)(object)options;
                    }
                }
                else if (type == typeof(ApplicationProfileReportingOptions))
                {
                    var options = unsanitizedOptions as ApplicationProfileReportingOptions;
                    if (options is not null)
                    {
                        // Sanitize options here
                        return (TResult)(object)options;
                    }
                }
                else if (type == typeof(SystemReportingOptions))
                {
                    var options = unsanitizedOptions as SystemReportingOptions;
                    if (options is not null)
                    {
                        // Sanitize options here
                        return (TResult)(object)options;
                    }
                }
            }
            return unsanitizedOptions;
        }
        private static void LogInnerException(Exception ex)
        {
            if (ex.InnerException is not null)
            {
                _logger.LogWarning(ex.InnerException, "InnerException: {innerException}", ex.InnerException.Message);
                LogInnerException(ex.InnerException);
            }
        }
    }