From 1698c59a7309e3430ed02aa1931bea7a1177073a Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Tue, 22 Feb 2022 18:53:22 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- .../Controllers/ServerStateController.cs | 167 ++++++++++++++++++ 2 files changed, 168 insertions(+), 1 deletion(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 5b4df3ba..12035907 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -48,7 +48,7 @@ "AYANOVA_DATA_PATH": "c:\\temp\\ravendata", "AYANOVA_USE_URLS": "http://*:7575;", //"AYANOVA_PERMANENTLY_ERASE_DATABASE":"true", - "AYANOVA_SERVER_TEST_MODE": "true", + "AYANOVA_SERVER_TEST_MODE": "false", //"AYANOVA_REPORT_RENDERING_TIMEOUT":"1", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin" diff --git a/server/AyaNova/Controllers/ServerStateController.cs b/server/AyaNova/Controllers/ServerStateController.cs index 38d6a484..ce293fa2 100644 --- a/server/AyaNova/Controllers/ServerStateController.cs +++ b/server/AyaNova/Controllers/ServerStateController.cs @@ -10,6 +10,8 @@ using AyaNova.Models; using System.ComponentModel.DataAnnotations; using Microsoft.Extensions.Hosting; using AyaNova.Util; +using System.Linq; +using System.IO; namespace AyaNova.Api.Controllers @@ -196,6 +198,171 @@ namespace AyaNova.Api.Controllers })); } + // /// + // /// Download all logs and server configuration setting in one zip package for technical support purposes + // /// + // /// download token + // /// A single zip file + // [AllowAnonymous] + // [HttpGet("tech-support-info")] + // public async Task DownloadSupportInfo([FromQuery] string t) + // { + // //NOTE: this route deliberately open even when server closed as a troubleshooting measure + + // if (!ModelState.IsValid) + // return BadRequest(new ApiErrorResponse(ModelState)); + + // var user = await UserBiz.ValidateDownloadTokenAndReturnUserAsync(t, ct); + // if (user == null) + // { + // await Task.Delay(AyaNova.Util.ServerBootConfig.FAILED_AUTH_DELAY);//DOS protection + // return StatusCode(401, new ApiErrorResponse(ApiErrorCode.AUTHENTICATION_FAILED)); + // } + + // if (!Authorized.HasReadFullRole(user.Roles, AyaType.LogFile) || !Authorized.HasReadFullRole(user.Roles, AyaType.ServerState)) + // return StatusCode(403, new ApiNotAuthorizedResponse()); + + + // System.Text.StringBuilder sbRet = new System.Text.StringBuilder(); + // sbRet.AppendLine("#########################################################"); + // sbRet.AppendLine("SERVER CONFIGURATION"); + // sbRet.AppendLine($"AYANOVA_USE_URLS: {ServerBootConfig.AYANOVA_USE_URLS}"); + // sbRet.AppendLine($"AYANOVA_DB_CONNECTION: {DbUtil.PasswordRedactedConnectionString(ServerBootConfig.AYANOVA_DB_CONNECTION)}"); + // sbRet.AppendLine($"AYANOVA_REPORT_RENDERING_TIMEOUT: {ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT}"); + // sbRet.AppendLine($"AYANOVA_DEFAULT_TRANSLATION: {ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION}"); + // sbRet.AppendLine($"AYANOVA_ATTACHMENT_FILES_PATH: {ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH}"); + // sbRet.AppendLine($"AYANOVA_BACKUP_FILES_PATH: {ServerBootConfig.AYANOVA_BACKUP_FILES_PATH}"); + // sbRet.AppendLine($"AYANOVA_TEMP_FILES_PATH: {ServerBootConfig.AYANOVA_TEMP_FILES_PATH}"); + // sbRet.AppendLine($"AYANOVA_BACKUP_PG_DUMP_PATH: {ServerBootConfig.AYANOVA_BACKUP_PG_DUMP_PATH}"); + // sbRet.AppendLine($"AYANOVA_LOG_PATH: {ServerBootConfig.AYANOVA_LOG_PATH}"); + // sbRet.AppendLine($"AYANOVA_LOG_LEVEL: {ServerBootConfig.AYANOVA_LOG_LEVEL}"); + // sbRet.AppendLine($"AYANOVA_LOG_ENABLE_LOGGER_DIAGNOSTIC_LOG: {ServerBootConfig.AYANOVA_LOG_ENABLE_LOGGER_DIAGNOSTIC_LOG}"); + + // sbRet.AppendLine("#########################################################"); + // sbRet.AppendLine("SERVER DIAGNOSTICS"); + // foreach (var di in ServerBootConfig.BOOT_DIAGNOSTIC_INFO) + // { + // sbRet.AppendLine($"{di.Key}: {di.Value}"); + // } + + // sbRet.AppendLine("#########################################################"); + // sbRet.AppendLine("DB SERVER DIAGNOSTICS"); + // foreach (var di in ServerBootConfig.DBSERVER_DIAGNOSTIC_INFO) + // { + // sbRet.AppendLine($"{di.Key}: {di.Value}"); + // } + + + + + // //System.IO.Compression.ZipFile.CreateFromDirectory(ServerBootConfig.AYANOVA_LOG_PATH, AttachmentsBackupFile); + + + // var files = System.IO.Directory.GetFiles(ServerBootConfig.AYANOVA_LOG_PATH, "*.txt").OrderBy(z => new FileInfo(z).LastWriteTime).Select(z => System.IO.Path.GetFileName(z)).ToList(); + + // //Directory.GetFiles(@“C:\RPA\Vector Reports”,“IW28*”).OrderByAscending(d => new FileInfo(d).GetLastWriteTime) + + // sbRet.AppendLine("#########################################################"); + // sbRet.AppendLine($"SERVER LOGS"); + + // foreach (string logfilename in files) + // { + // var logFilePath = System.IO.Path.Combine(ServerBootConfig.AYANOVA_LOG_PATH, logfilename); + // FileStreamOptions fso = new FileStreamOptions(); + // fso.Access = FileAccess.Read; + // fso.Mode = FileMode.Open; + // fso.Share = FileShare.ReadWrite; + + // using (StreamReader sr = new StreamReader(logFilePath, fso)) + // { + // sbRet.AppendLine(sr.ReadToEnd()); + // } + + // } + // sbRet.AppendLine("#########################################################"); + // return Content(sbRet.ToString()); + + + // } + + + /// + /// Fetch all logs and server configuration setting for technical support purposes + /// + /// text result + [HttpGet("tech-support-info")] + public ActionResult GetTechSupportInfo() + { + + if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.LogFile) || !Authorized.HasReadFullRole(HttpContext.Items, AyaType.ServerState)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + + System.Text.StringBuilder sbRet = new System.Text.StringBuilder(); + sbRet.AppendLine("#########################################################"); + sbRet.AppendLine("SERVER CONFIGURATION"); + sbRet.AppendLine($"AYANOVA_USE_URLS: {ServerBootConfig.AYANOVA_USE_URLS}"); + sbRet.AppendLine($"AYANOVA_DB_CONNECTION: {DbUtil.PasswordRedactedConnectionString(ServerBootConfig.AYANOVA_DB_CONNECTION)}"); + sbRet.AppendLine($"AYANOVA_REPORT_RENDERING_TIMEOUT: {ServerBootConfig.AYANOVA_REPORT_RENDERING_TIMEOUT}"); + sbRet.AppendLine($"AYANOVA_DEFAULT_TRANSLATION: {ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION}"); + sbRet.AppendLine($"AYANOVA_ATTACHMENT_FILES_PATH: {ServerBootConfig.AYANOVA_ATTACHMENT_FILES_PATH}"); + sbRet.AppendLine($"AYANOVA_BACKUP_FILES_PATH: {ServerBootConfig.AYANOVA_BACKUP_FILES_PATH}"); + sbRet.AppendLine($"AYANOVA_TEMP_FILES_PATH: {ServerBootConfig.AYANOVA_TEMP_FILES_PATH}"); + sbRet.AppendLine($"AYANOVA_BACKUP_PG_DUMP_PATH: {ServerBootConfig.AYANOVA_BACKUP_PG_DUMP_PATH}"); + sbRet.AppendLine($"AYANOVA_LOG_PATH: {ServerBootConfig.AYANOVA_LOG_PATH}"); + sbRet.AppendLine($"AYANOVA_LOG_LEVEL: {ServerBootConfig.AYANOVA_LOG_LEVEL}"); + sbRet.AppendLine($"AYANOVA_LOG_ENABLE_LOGGER_DIAGNOSTIC_LOG: {ServerBootConfig.AYANOVA_LOG_ENABLE_LOGGER_DIAGNOSTIC_LOG}"); + + sbRet.AppendLine("#########################################################"); + sbRet.AppendLine("SERVER DIAGNOSTICS"); + foreach (var di in ServerBootConfig.BOOT_DIAGNOSTIC_INFO) + { + sbRet.AppendLine($"{di.Key}: {di.Value}"); + } + + sbRet.AppendLine("#########################################################"); + sbRet.AppendLine("DB SERVER DIAGNOSTICS"); + foreach (var di in ServerBootConfig.DBSERVER_DIAGNOSTIC_INFO) + { + sbRet.AppendLine($"{di.Key}: {di.Value}"); + } + + + + + //System.IO.Compression.ZipFile.CreateFromDirectory(ServerBootConfig.AYANOVA_LOG_PATH, AttachmentsBackupFile); + + + var files = System.IO.Directory.GetFiles(ServerBootConfig.AYANOVA_LOG_PATH, "*.txt").OrderBy(z => new FileInfo(z).LastWriteTime).Select(z => System.IO.Path.GetFileName(z)).ToList(); + + //Directory.GetFiles(@“C:\RPA\Vector Reports”,“IW28*”).OrderByAscending(d => new FileInfo(d).GetLastWriteTime) + + sbRet.AppendLine("#########################################################"); + sbRet.AppendLine($"ALL SERVER LOGS"); + + foreach (string logfilename in files) + { + var logFilePath = System.IO.Path.Combine(ServerBootConfig.AYANOVA_LOG_PATH, logfilename); + FileStreamOptions fso = new FileStreamOptions(); + fso.Access = FileAccess.Read; + fso.Mode = FileMode.Open; + fso.Share = FileShare.ReadWrite; + + using (StreamReader sr = new StreamReader(logFilePath, fso)) + { + sbRet.AppendLine(sr.ReadToEnd()); + } + + } + sbRet.AppendLine("#########################################################"); + + return Ok(ApiOkResponse.Response(sbRet.ToString())); + + + } //------------