static void Main(string[] args) { var settingsFileName = "settings.json"; var ignoredIssuesFileName = "ignored-issues.json"; var app = ShellHelper.CreateConsoleApp("cv4pve-diag", "Diagnostic for Proxmox VE"); var optSettingsFile = app.Option("--settings-file", "File settings (generated from create-settings)", CommandOptionType.SingleValue); optSettingsFile.Accepts().ExistingFile(); var optIgnoredIssuesFile = app.Option("--ignored-issues-file", "File ignored issues (generated from create-ignored-issues)", CommandOptionType.SingleValue); optIgnoredIssuesFile.Accepts().ExistingFile(); var optShowIgnoredIssues = app.Option("--ignored-issues-show", "Show second table with ignored issue", CommandOptionType.NoValue); var optOutput = app.OutputTypeArgument(); app.Command("create-settings", cmd => { cmd.Description = $"Create file settings ({settingsFileName})"; cmd.AddFullNameLogo(); cmd.OnExecute(() => { File.WriteAllText(settingsFileName, JsonConvert.SerializeObject(new Settings(), Formatting.Indented)); app.Out.WriteLine(PrintEnum("SeriesType", typeof(SettingsTimeSeriesType))); app.Out.WriteLine($"Create file: {settingsFileName}"); }); }); app.Command("create-ignored-issues", cmd => { cmd.Description = $"Create File ignored issues ({ignoredIssuesFileName})"; cmd.AddFullNameLogo(); cmd.OnExecute(() => { File.WriteAllText(ignoredIssuesFileName, JsonConvert.SerializeObject(new[] { new DiagnosticResult() }, Formatting.Indented)); app.Out.WriteLine(PrintEnum("Context", typeof(DiagnosticResultContext))); app.Out.WriteLine(PrintEnum("Gravity", typeof(DiagnosticResultGravity))); app.Out.WriteLine($"Create file: {ignoredIssuesFileName}"); }); }); var fileExport = "data.json"; app.Command("export-collect", cmd => { cmd.ShowInHelpText = false; cmd.Description = $"Export collect data collect to {fileExport}"; cmd.AddFullNameLogo(); cmd.OnExecute(() => { var ci = new ClusterInfo(); ci.Collect(app.ClientTryLogin()); File.WriteAllText(fileExport, JsonConvert.SerializeObject(ci, Formatting.Indented)); app.Out.WriteLine($"Exported {fileExport}!"); }); }); app.Command("examine-collect", cmd => { cmd.ShowInHelpText = false; cmd.Description = $"Examine collect data collect from {fileExport}"; cmd.AddFullNameLogo(); cmd.OnExecute(() => { var ci = JsonConvert.DeserializeObject <ClusterInfo>(File.ReadAllText(fileExport)); Print(app, ci, optSettingsFile, optIgnoredIssuesFile, optShowIgnoredIssues, optOutput); }); }); app.OnExecute(() => { var ci = new ClusterInfo(); ci.Collect(app.ClientTryLogin()); ci = JsonConvert.DeserializeObject <ClusterInfo>(JsonConvert.SerializeObject(ci)); Print(app, ci, optSettingsFile, optIgnoredIssuesFile, optShowIgnoredIssues, optOutput); }); app.ExecuteConsoleApp(args); }