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()));
+
+
+ }
//------------