net6.0 Ready to test

This commit is contained in:
Mike Phares 2022-03-29 07:23:13 -07:00
parent 836f70ed7f
commit 289547180a
135 changed files with 3189 additions and 7648 deletions

File diff suppressed because it is too large Load Diff

34
APC Viewer/.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,34 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/net6.0/win-x64/APC Viewer.dll",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)",
"uriFormat": "%s/background"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
}
]
}

41
APC Viewer/.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,41 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/APC Viewer.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/APC Viewer.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/APC Viewer.csproj"
],
"problemMatcher": "$msCompile"
}
]
}

View File

@ -14,6 +14,7 @@
<RootNamespace>APCViewer</RootNamespace> <RootNamespace>APCViewer</RootNamespace>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <RuntimeIdentifier>win-x64</RuntimeIdentifier>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<j>Galaxy123&amp;98765</j>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</IsWindows> <IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</IsWindows>
@ -32,10 +33,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Infineon.Monitoring.MonA" Version="2.0.0" /> <PackageReference Include="Infineon.Monitoring.MonA" Version="2.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="4.1.0" /> <PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
<PackageReference Include="Serilog.AspNetCore.Ingestion" Version="1.0.0-dev-00021" /> <PackageReference Include="Serilog.AspNetCore.Ingestion" Version="1.0.0-dev-00021" />
@ -43,14 +40,6 @@
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" /> <PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\images\" />
<Folder Include="wwwroot\js\html5shiv\3.7.2\" />
<Folder Include="wwwroot\js\respond\1.4.2\" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="appsettings.json"> <None Include="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>

View File

@ -1,16 +0,0 @@
<h3>Counter</h3>
<p>
Current Count: @i
</p>
<button @onclick="IncrementCounter" class="btn btn-primary">Click Me</button>
@code {
int i = 0;
private void IncrementCounter()
{
i += 1;
}
}

View File

@ -1,300 +0,0 @@
using APCViewer.Models;
using APCViewer.Models.Methods;
using APCViewer.Singleton;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Web;
namespace APCViewer.Controllers;
public class HomeController : Controller, IHomeController
{
private readonly Serilog.ILogger _Log;
private readonly Background _Background;
private readonly IBackground _BackgroundMethods;
public HomeController(Background background)
{
_Background = background;
_BackgroundMethods = background;
_Log = Serilog.Log.ForContext<HomeController>();
}
public ActionResult Index() => View();
public ActionResult Privacy() => View();
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public ActionResult Error() => View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
public ActionResult Encode(string value = "")
{
string result = string.Empty;
if (!string.IsNullOrEmpty(value))
result = HttpUtility.UrlEncode(value);
return Content(result, "text/plain");
}
public ActionResult TestTry()
{
ActionResult result;
try
{
throw new Exception("This is a test");
}
catch (Exception ex)
{
result = Content(string.Concat(ex.Message, Environment.NewLine, Environment.NewLine, ex.StackTrace));
}
return result;
}
public ActionResult PDSF(string? directory = null, string? filter = null, bool is_gaN = false, bool is_Si = false)
{
Tuple<int, object, object, string?> tuple = _Background.SetViewBag(directory, filter, isGaN: is_gaN, isSi: is_Si, forPDSF: true);
ViewBag.Files = tuple.Item1;
ViewBag.Grouped = tuple.Item2;
ViewBag.Sorted = tuple.Item3;
ViewBag.Directory = tuple.Item4;
return View();
}
private static StringBuilder GetPDSFHtml(string? pdsfFile)
{
StringBuilder result = new();
_ = result.AppendLine("<html><body><table border = '1'>");
if (string.IsNullOrEmpty(pdsfFile))
throw new Exception("<tr><td>Invalid input</td></tr>");
else if (!System.IO.File.Exists(pdsfFile))
_ = result.AppendLine("<tr><td>File doesn't exist!</td></tr>");
else
{
bool header = true;
bool body = false;
bool footer = false;
string logisticsSegment;
List<string> logistics = new();
string[] pdsfLines = System.IO.File.ReadAllLines(pdsfFile);
foreach (string pdsfLine in pdsfLines)
{
if (pdsfLine.StartsWith("LOGISTICS_"))
{
logisticsSegment = pdsfLine.Split('\t')[0];
if (!logistics.Contains(logisticsSegment))
{
logistics.Add(logisticsSegment);
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
}
if (pdsfLine.StartsWith("NUM_DATA_ROWS") || pdsfLine.StartsWith("END_HEADER"))
{
body = false;
footer = true;
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
if (header)
_ = result.Append("<tr><td>").Append(pdsfLine.Replace("\t", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else if (body)
_ = result.Append("<tr><td>").Append(pdsfLine.Replace("\t", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else if (footer)
{
if (pdsfLine.StartsWith("DELIMITER"))
_ = result.Append("<tr><td>").Append(pdsfLine.Replace(";", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else
_ = result.Append("<tr><td>").Append(pdsfLine.Replace("\t", "</td><td>").Replace("=", "</td><td>").Replace(";", "</td><td>")).AppendLine("&nbsp;</td></tr>");
}
else
throw new Exception();
if (pdsfLine.StartsWith("END_OFFSET"))
{
header = false;
body = true;
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
}
}
_ = result.AppendLine("</table></body>");
return result;
}
public ContentResult ViewPDSF(string? id = null)
{
string pdsfFile;
StringBuilder result = new();
if (string.IsNullOrEmpty(id) || !id.Contains('_'))
_ = result.AppendLine("<html><body><table border = '1'><tr><td>A) Error: Invalid input</td></tr></table></body>");
else
{
if (!long.TryParse(id.Split('_')[1], out long sequence))
_ = result.AppendLine("<html><body><table border = '1'><tr><td>B) Error: Invalid input</td></tr></table></body>");
else
{
pdsfFile = _Background.GetPDSF(sequence);
result = GetPDSFHtml(pdsfFile);
}
}
return Content(result.ToString(), "text/html");
}
public ActionResult DownloadPDSF(string? id = null)
{
string pdsfFile;
if (string.IsNullOrEmpty(id) || !id.Contains('_'))
throw new Exception("A) Error: Invalid input");
else
{
if (!long.TryParse(id.Split('_')[1], out long sequence))
throw new Exception("B) Error: Invalid input");
else
pdsfFile = _Background.GetPDSF(sequence);
}
return File(pdsfFile, "text/plain", Path.GetFileName(pdsfFile));
}
public ContentResult ViewCustomPDSF(string? pdsf_file = null)
{
StringBuilder result = GetPDSFHtml(pdsf_file);
return Content(result.ToString(), "text/html");
}
public ActionResult DownloadCustomPDSF(string? pdsf_file = null)
{
if (string.IsNullOrEmpty(pdsf_file))
throw new Exception("Error: Invalid input");
else if (!System.IO.File.Exists(pdsf_file))
throw new Exception("Error: file does not exist");
return File(pdsf_file, "text/plain", Path.GetFileName(pdsf_file));
}
public ActionResult IPDSF(string? directory = null, string? filter = null, bool is_gaN = false, bool is_Si = false)
{
Tuple<int, object, object, string?> tuple = _Background.SetViewBag(directory, filter, isGaN: is_gaN, isSi: is_Si, forIPDSF: true);
ViewBag.Files = tuple.Item1;
ViewBag.Grouped = tuple.Item2;
ViewBag.Sorted = tuple.Item3;
ViewBag.Directory = tuple.Item4;
return View();
}
private static StringBuilder GetIPDSFHtml(string? ipdsfFile)
{
StringBuilder result = new();
_ = result.AppendLine("<html><body><table border = '1'>");
if (string.IsNullOrEmpty(ipdsfFile))
throw new Exception("<tr><td>Invalid input</td></tr>");
else if (!System.IO.File.Exists(ipdsfFile))
_ = result.AppendLine("<tr><td>File doesn't exist!</td></tr>");
else
{
bool header = true;
bool body = false;
bool footer = false;
string logisticsSegment;
List<string> logistics = new();
string[] ipdsfLines = System.IO.File.ReadAllLines(ipdsfFile);
foreach (string ipdsfLine in ipdsfLines)
{
if (ipdsfLine.StartsWith("LOGISTICS_"))
{
logisticsSegment = ipdsfLine.Split('\t')[0];
if (!logistics.Contains(logisticsSegment))
{
logistics.Add(logisticsSegment);
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
}
if (ipdsfLine.StartsWith("NUM_DATA_ROWS") || ipdsfLine.StartsWith("END_HEADER"))
{
body = false;
footer = true;
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
if (header)
_ = result.Append("<tr><td>").Append(ipdsfLine.Replace("\t", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else if (body)
_ = result.Append("<tr><td>").Append(ipdsfLine.Replace("\t", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else if (footer)
{
if (ipdsfLine.StartsWith("DELIMITER"))
_ = result.Append("<tr><td>").Append(ipdsfLine.Replace(";", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else
_ = result.Append("<tr><td>").Append(ipdsfLine.Replace("\t", "</td><td>").Replace("=", "</td><td>").Replace(";", "</td><td>")).AppendLine("&nbsp;</td></tr>");
}
else
throw new Exception();
if (ipdsfLine.StartsWith("END_OFFSET"))
{
header = false;
body = true;
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
}
}
_ = result.AppendLine("</table></body>");
return result;
}
public ContentResult ViewIPDSF(string? id = null)
{
string ipdsfFile;
StringBuilder result = new();
if (string.IsNullOrEmpty(id) || !id.Contains('_'))
_ = result.AppendLine("<html><body><table border = '1'><tr><td>A) Error: Invalid input</td></tr></table></body>");
else
{
if (!long.TryParse(id.Split('_')[1], out long sequence))
_ = result.AppendLine("<html><body><table border = '1'><tr><td>B) Error: Invalid input</td></tr></table></body>");
else
{
ipdsfFile = _Background.GetIPDSF(sequence);
result = GetIPDSFHtml(ipdsfFile);
}
}
return Content(result.ToString(), "text/html");
}
public ActionResult DownloadIPDSF(string? id = null)
{
string ipdsfFile;
if (string.IsNullOrEmpty(id) || !id.Contains('_'))
throw new Exception("A) Error: Invalid input");
else
{
if (!long.TryParse(id.Split('_')[1], out long sequence))
throw new Exception("B) Error: Invalid input");
else
ipdsfFile = _Background.GetIPDSF(sequence);
}
return File(ipdsfFile, "text/plain", Path.GetFileName(ipdsfFile));
}
public ContentResult ViewCustomIPDSF(string? ipdsf_file = null)
{
StringBuilder result = GetIPDSFHtml(ipdsf_file);
return Content(result.ToString(), "text/html");
}
public ActionResult DownloadCustomIPDSF(string? ipdsf_file = null)
{
if (string.IsNullOrEmpty(ipdsf_file))
throw new Exception("Error: Invalid input");
else if (!System.IO.File.Exists(ipdsf_file))
throw new Exception("Error: file does not exist");
return File(ipdsf_file, "text/plain", Path.GetFileName(ipdsf_file));
}
public ActionResult TimePivot(bool is_gaN = false, bool is_Si = false)
{
Tuple<List<string[]>, List<string[]>> tuple = _Background.GetTimePivot(isGaN: is_gaN, isSi: is_Si);
ViewBag.forIPDSF = tuple.Item1;
ViewBag.forPDSF = tuple.Item2;
return View();
}
}

View File

@ -11,27 +11,32 @@ namespace APCViewer.HostedService;
public class TimedHostedService : IHostedService public class TimedHostedService : IHostedService
{ {
private readonly Timer _APCDataTimer;
private readonly Timer _EDADataTimer;
private readonly Timer _EAFLogDataTimer;
private readonly int _ExecutionCount; private readonly int _ExecutionCount;
private readonly List<Timer> _Timers; private readonly List<Timer> _Timers;
private readonly Timer _APCDataTimer;
private readonly Timer _EDADataTimer;
private readonly Serilog.ILogger _Log; private readonly Serilog.ILogger _Log;
private readonly Background _Background; private readonly Background _Background;
private readonly Timer _EAFLogDataTimer;
private readonly IsEnvironment _IsEnvironment; private readonly IsEnvironment _IsEnvironment;
private readonly IBackground _BackgroundMethods; private readonly IBackground _BackgroundMethods;
public TimedHostedService(IsEnvironment isEnvironment, Background background) public TimedHostedService(IsEnvironment isEnvironment, Background background)
{ {
_Timers = new();
_ExecutionCount = 0; _ExecutionCount = 0;
_Background = background; _Background = background;
_IsEnvironment = isEnvironment; _IsEnvironment = isEnvironment;
_BackgroundMethods = background; _BackgroundMethods = background;
_Log = Serilog.Log.ForContext<TimedHostedService>(); _Log = Serilog.Log.ForContext<TimedHostedService>();
_APCDataTimer = new Timer(APCDataCallback, null, Timeout.Infinite, Timeout.Infinite); _APCDataTimer = new Timer(APCDataCallback, null, Timeout.Infinite, Timeout.Infinite);
_EAFLogDataTimer = new Timer(EAFLogDataCallback, null, Timeout.Infinite, Timeout.Infinite);
_EDADataTimer = new Timer(EDADataCallback, null, Timeout.Infinite, Timeout.Infinite); _EDADataTimer = new Timer(EDADataCallback, null, Timeout.Infinite, Timeout.Infinite);
_EAFLogDataTimer = new Timer(EAFLogDataCallback, null, Timeout.Infinite, Timeout.Infinite);
_Timers = new()
{
_APCDataTimer,
_EDADataTimer,
_EAFLogDataTimer
};
} }
public Task StartAsync(CancellationToken stoppingToken) public Task StartAsync(CancellationToken stoppingToken)
@ -49,25 +54,19 @@ public class TimedHostedService : IHostedService
else if (_IsEnvironment.Staging) else if (_IsEnvironment.Staging)
{ {
_ = _APCDataTimer.Change(milliSeconds, Timeout.Infinite); _ = _APCDataTimer.Change(milliSeconds, Timeout.Infinite);
_Timers.Add(_APCDataTimer);
milliSeconds += 2000; milliSeconds += 2000;
_ = _EAFLogDataTimer.Change(milliSeconds, Timeout.Infinite); _ = _EAFLogDataTimer.Change(milliSeconds, Timeout.Infinite);
_Timers.Add(_EAFLogDataTimer);
milliSeconds += 2000; milliSeconds += 2000;
_ = _EDADataTimer.Change(milliSeconds, Timeout.Infinite); _ = _EDADataTimer.Change(milliSeconds, Timeout.Infinite);
_Timers.Add(_EDADataTimer);
milliSeconds += 2000; milliSeconds += 2000;
} }
else if (_IsEnvironment.Production) else if (_IsEnvironment.Production)
{ {
_ = _APCDataTimer.Change(milliSeconds, Timeout.Infinite); _ = _APCDataTimer.Change(milliSeconds, Timeout.Infinite);
_Timers.Add(_APCDataTimer);
milliSeconds += 2000; milliSeconds += 2000;
_ = _EAFLogDataTimer.Change(milliSeconds, Timeout.Infinite); _ = _EAFLogDataTimer.Change(milliSeconds, Timeout.Infinite);
_Timers.Add(_EAFLogDataTimer);
milliSeconds += 2000; milliSeconds += 2000;
_ = _EDADataTimer.Change(milliSeconds, Timeout.Infinite); _ = _EDADataTimer.Change(milliSeconds, Timeout.Infinite);
_Timers.Add(_EDADataTimer);
milliSeconds += 2000; milliSeconds += 2000;
} }
else else
@ -82,6 +81,8 @@ public class TimedHostedService : IHostedService
using (LogContext.PushProperty("MethodName", methodName)) using (LogContext.PushProperty("MethodName", methodName))
{ {
_Log.Info(string.Concat("Timed Hosted Service: ", _IsEnvironment.Profile, ":", Environment.ProcessId, " is stopping.")); _Log.Info(string.Concat("Timed Hosted Service: ", _IsEnvironment.Profile, ":", Environment.ProcessId, " is stopping."));
foreach (Timer timer in _Timers)
_ = timer.Change(Timeout.Infinite, 0);
_BackgroundMethods.Stop(immediate: true); _BackgroundMethods.Stop(immediate: true);
for (short i = 0; i < short.MaxValue; i++) for (short i = 0; i < short.MaxValue; i++)
{ {

View File

@ -2,4 +2,4 @@
public class BackboneComponent public class BackboneComponent
{ {
} }

View File

@ -2,4 +2,4 @@
public class BackboneStatusCache public class BackboneStatusCache
{ {
} }

View File

@ -2,4 +2,4 @@
public interface ILoggingSetupManager public interface ILoggingSetupManager
{ {
} }

View File

@ -2,4 +2,4 @@
public class StatusItem public class StatusItem
{ {
} }

View File

@ -15,7 +15,7 @@ public class Backbone
protected Backbone() { } protected Backbone() { }
[NotNull] [NotNull]
public static Backbone Instance { get; } public static Backbone? Instance { get; }
[NotNull] [NotNull]
public ILoggingSetupManager LoggingConfigurationManager { get; set; } public ILoggingSetupManager LoggingConfigurationManager { get; set; }
public BackboneStatusCache Status { get; } public BackboneStatusCache Status { get; }
@ -44,4 +44,4 @@ public class Backbone
protected void CloseConnectionOfComponents(List<BackboneComponent> components) { } protected void CloseConnectionOfComponents(List<BackboneComponent> components) { }
protected virtual void StopAllComponents() { } protected virtual void StopAllComponents() { }
protected void StopComponents(List<BackboneComponent> components) { } protected void StopComponents(List<BackboneComponent> components) { }
} }

View File

@ -18,4 +18,4 @@ public class EmailMessage
public EmailMessage SetPriority(MailPriority priority) => throw new NotImplementedException(); public EmailMessage SetPriority(MailPriority priority) => throw new NotImplementedException();
public EmailMessage SetSubject(string subject) => throw new NotImplementedException(); public EmailMessage SetSubject(string subject) => throw new NotImplementedException();
} }

View File

@ -3,4 +3,4 @@
public interface ISmtp public interface ISmtp
{ {
void Send(EmailMessage message); void Send(EmailMessage message);
} }

View File

@ -5,4 +5,4 @@ public enum MailPriority
Low = 0, Low = 0,
Normal = 1, Normal = 1,
High = 2 High = 2
} }

View File

@ -2,4 +2,4 @@
public class ChangeDataCollectionHandler public class ChangeDataCollectionHandler
{ {
} }

View File

@ -2,4 +2,4 @@
public class DataCollectionRequest public class DataCollectionRequest
{ {
} }

View File

@ -2,4 +2,4 @@
public class EquipmentEvent public class EquipmentEvent
{ {
} }

View File

@ -2,4 +2,4 @@
public class EquipmentException public class EquipmentException
{ {
} }

View File

@ -2,4 +2,4 @@
public class EquipmentSelfDescription public class EquipmentSelfDescription
{ {
} }

View File

@ -2,4 +2,4 @@
public class GetParameterValuesHandler public class GetParameterValuesHandler
{ {
} }

View File

@ -2,4 +2,4 @@
public interface IConnectionControl public interface IConnectionControl
{ {
} }

View File

@ -2,4 +2,4 @@
public interface IDataTracingHandler public interface IDataTracingHandler
{ {
} }

View File

@ -2,4 +2,4 @@
public interface IEquipmentCommandService public interface IEquipmentCommandService
{ {
} }

View File

@ -12,4 +12,4 @@ public interface IEquipmentControl : IPackageSource
IEquipmentCommandService Commands { get; } IEquipmentCommandService Commands { get; }
[NotNull] [NotNull]
IConnectionControl Connection { get; } IConnectionControl Connection { get; }
} }

View File

@ -2,4 +2,4 @@
public interface IEquipmentSelfDescriptionBuilder public interface IEquipmentSelfDescriptionBuilder
{ {
} }

View File

@ -2,4 +2,4 @@
public interface IPackage public interface IPackage
{ {
} }

View File

@ -2,4 +2,4 @@
public interface ISelfDescriptionLookup public interface ISelfDescriptionLookup
{ {
} }

View File

@ -2,4 +2,4 @@
public interface IVirtualParameterValuesHandler public interface IVirtualParameterValuesHandler
{ {
} }

View File

@ -2,4 +2,4 @@
public class SetParameterValuesHandler public class SetParameterValuesHandler
{ {
} }

View File

@ -2,4 +2,4 @@
public class TraceRequest public class TraceRequest
{ {
} }

View File

@ -35,4 +35,4 @@ public interface IEquipmentDataCollection
void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters); void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters);
void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters, IPackage sourcePackage); void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters, IPackage sourcePackage);
void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters, DateTime equipmentTimeStamp); void TriggerTraceSample(TraceRequest traceRequest, long sampleId, IEnumerable<ParameterValue> parameters, DateTime equipmentTimeStamp);
} }

View File

@ -2,4 +2,4 @@
public interface IPackageSource public interface IPackageSource
{ {
} }

View File

@ -16,4 +16,4 @@ public class ParameterValue
public virtual ParameterValue Clone(EquipmentParameter newDefinition) => throw new NotImplementedException(); public virtual ParameterValue Clone(EquipmentParameter newDefinition) => throw new NotImplementedException();
public override string ToString() => base.ToString(); public override string ToString() => base.ToString();
} }

View File

@ -19,4 +19,4 @@ public class EquipmentParameter
public override string ToString() => base.ToString(); public override string ToString() => base.ToString();
public string ToStringWithDetails() => base.ToString(); public string ToStringWithDetails() => base.ToString();
} }

View File

@ -8,4 +8,4 @@ public class Field
public string Description { get; } public string Description { get; }
public ParameterTypeDefinition TypeDefinition { get; } public ParameterTypeDefinition TypeDefinition { get; }
public bool CanBeNull { get; } public bool CanBeNull { get; }
} }

View File

@ -8,4 +8,4 @@ public abstract class ParameterTypeDefinition
public string Description { get; } public string Description { get; }
public override string ToString() => base.ToString(); public override string ToString() => base.ToString();
} }

View File

@ -8,4 +8,4 @@ public class StructuredType : ParameterTypeDefinition
public StructuredType(string name, string description, IList<Field> fields) : base(name, description) { } public StructuredType(string name, string description, IList<Field> fields) : base(name, description) { }
public IList<Field> Fields { get; } public IList<Field> Fields { get; }
} }

View File

@ -2,4 +2,4 @@
public interface IConfigurationObject public interface IConfigurationObject
{ {
} }

View File

@ -22,4 +22,4 @@ public class ModelObjectParameterDefinition : IConfigurationObject
public virtual ModelObjectParameterDefinition? Clone() => null; public virtual ModelObjectParameterDefinition? Clone() => null;
public virtual bool IsValidValue(string value) => false; public virtual bool IsValidValue(string value) => false;
} }

View File

@ -13,4 +13,4 @@ public enum ModelObjectParameterType
Double = 8, Double = 8,
Float = 9, Float = 9,
Enum = 10 Enum = 10
} }

View File

@ -40,4 +40,4 @@ public class SecsConnectionConfiguration
public virtual TimeSpan T7ConnectionIdle { get; set; } public virtual TimeSpan T7ConnectionIdle { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public virtual TimeSpan T8NetworkIntercharacter { get; set; } public virtual TimeSpan T8NetworkIntercharacter { get; set; }
} }

View File

@ -9,4 +9,4 @@ public class ConnectionSetting
public string Name { get; set; } public string Name { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string Value { get; set; } public string Value { get; set; }
} }

View File

@ -15,4 +15,4 @@ public class File
public File UpdateContentParameters(Dictionary<string, string> contentParameters) => throw new NotImplementedException(); public File UpdateContentParameters(Dictionary<string, string> contentParameters) => throw new NotImplementedException();
public File UpdateParsingStatus(bool isErrorFile) => throw new NotImplementedException(); public File UpdateParsingStatus(bool isErrorFile) => throw new NotImplementedException();
} }

View File

@ -31,4 +31,4 @@ public class FilePathGenerator
protected virtual string GetSubFolder(string folderPattern, string subFolderPath) => throw new NotImplementedException(); protected virtual string GetSubFolder(string folderPattern, string subFolderPath) => throw new NotImplementedException();
protected virtual string PrepareFolderPath(string targetFolderPath, string subFolderPath) => throw new NotImplementedException(); protected virtual string PrepareFolderPath(string targetFolderPath, string subFolderPath) => throw new NotImplementedException();
protected string ReplacePlaceholder(string inputPath) => throw new NotImplementedException(); protected string ReplacePlaceholder(string inputPath) => throw new NotImplementedException();
} }

View File

@ -19,7 +19,7 @@ public class FileConnectorConfiguration
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public IfPostProcessingFailsEnum? IfPostProcessingFailsAction { get; set; } public IfPostProcessingFailsEnum? IfPostProcessingFailsAction { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string AlternateTargetFolder { get; set; } public string? AlternateTargetFolder { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public long? FileHandleTimeout { get; set; } public long? FileHandleTimeout { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
@ -27,26 +27,26 @@ public class FileConnectorConfiguration
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public long? IdleEventWaitTimeInSeconds { get; set; } public long? IdleEventWaitTimeInSeconds { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string FileAgeThreshold { get; set; } public string? FileAgeThreshold { get; set; }
public bool? FolderAgeCheckIndividualSubFolders { get; set; } public bool? FolderAgeCheckIndividualSubFolders { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public virtual ZipModeEnum? ZipMode { get; set; } public virtual ZipModeEnum? ZipMode { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public FileAgeFilterEnum? FileAgeFilterMode { get; set; } public FileAgeFilterEnum? FileAgeFilterMode { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string ZipTargetFileName { get; set; } public string? ZipTargetFileName { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string ZipErrorTargetFileName { get; set; } public string? ZipErrorTargetFileName { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public long? ZipFileSubFolderLevel { get; set; } public long? ZipFileSubFolderLevel { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string DefaultPlaceHolderValue { get; set; } public string? DefaultPlaceHolderValue { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public bool? UseZip64Mode { get; set; } public bool? UseZip64Mode { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public List<ConnectionSetting> ConnectionSettings { get; set; } public List<ConnectionSetting>? ConnectionSettings { get; set; }
public string SourceDirectoryCloaking { get; set; } public string? SourceDirectoryCloaking { get; set; }
public string FolderAgeThreshold { get; set; } public string? FolderAgeThreshold { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public virtual long? FileScanningIntervalInSeconds { get; set; } public virtual long? FileScanningIntervalInSeconds { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
@ -54,20 +54,20 @@ public class FileConnectorConfiguration
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public virtual long? ZipFileTime { get; set; } public virtual long? ZipFileTime { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string SourceFileLocation { get; set; } public string? SourceFileLocation { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string SourceFileFilter { get; set; } public string? SourceFileFilter { get; set; }
public List<string> SourceFileFilters { get; set; } public List<string>? SourceFileFilters { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public virtual bool? IncludeSubDirectories { get; set; } public virtual bool? IncludeSubDirectories { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public virtual FileScanningOptionEnum? FileScanningOption { get; set; } public virtual FileScanningOptionEnum? FileScanningOption { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string TargetFileLocation { get; set; } public string? TargetFileLocation { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string ErrorTargetFileLocation { get; set; } public string? ErrorTargetFileLocation { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string TargetFileName { get; set; } public string? TargetFileName { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public virtual long? FileHandleWaitTime { get; set; } public virtual long? FileHandleWaitTime { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
@ -83,7 +83,7 @@ public class FileConnectorConfiguration
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public virtual long? ZipFileAmount { get; set; } public virtual long? ZipFileAmount { get; set; }
[System.Runtime.Serialization.DataMemberAttribute] [System.Runtime.Serialization.DataMemberAttribute]
public string ErrorTargetFileName { get; set; } public string? ErrorTargetFileName { get; set; }
public void Initialize() => throw new NotImplementedException(); public void Initialize() => throw new NotImplementedException();
@ -131,4 +131,4 @@ public class FileConnectorConfiguration
IgnoreNewer = 0, IgnoreNewer = 0,
IgnoreOlder = 1 IgnoreOlder = 1
} }
} }

View File

@ -10,4 +10,4 @@ public class FileConnectorParameterTypeDefinitionProvider
public IEnumerable<ParameterTypeDefinition>? GetAllParameterTypeDefinition() => null; public IEnumerable<ParameterTypeDefinition>? GetAllParameterTypeDefinition() => null;
public ParameterTypeDefinition? GetParameterTypeDefinition(string name) => null; public ParameterTypeDefinition? GetParameterTypeDefinition(string name) => null;
} }

View File

@ -6,4 +6,4 @@ namespace Library.PeerGroup.GCL.Annotations;
public sealed class NotNullAttribute : Attribute public sealed class NotNullAttribute : Attribute
{ {
public NotNullAttribute() { } public NotNullAttribute() { }
} }

View File

@ -4,4 +4,4 @@ public enum HsmsConnectionMode
{ {
Active = 0, Active = 0,
Passive = 1 Passive = 1
} }

View File

@ -4,4 +4,4 @@ public enum HsmsSessionMode
{ {
MultiSession = 0, MultiSession = 0,
SingleSession = 1 SingleSession = 1
} }

View File

@ -4,4 +4,4 @@ public enum SecsTransportType
{ {
HSMS = 0, HSMS = 0,
Serial = 1 Serial = 1
} }

View File

@ -12,4 +12,4 @@ public enum SerialBaudRate
Baud38400 = 7, Baud38400 = 7,
Baud57600 = 8, Baud57600 = 8,
Baud115200 = 9 Baud115200 = 9
} }

View File

@ -1,3 +1,5 @@
using Shared;
namespace APCViewer.Models.Methods; namespace APCViewer.Models.Methods;
public interface IBackground public interface IBackground
@ -14,6 +16,6 @@ public interface IBackground
string GetIPDSF(long Sequence); string GetIPDSF(long Sequence);
void Catch(Exception exception); void Catch(Exception exception);
Tuple<List<string[]>, List<string[]>> GetTimePivot(bool isGaN = false, bool isSi = false); Tuple<List<string[]>, List<string[]>> GetTimePivot(bool isGaN = false, bool isSi = false);
Tuple<int, object, object, string> SetViewBag(string directory, string filter, bool isGaN = false, bool isSi = false, bool forPDSF = false, bool forIPDSF = false); Tuple<int, Dictionary<string, Dictionary<string, List<Logistics>>>, List<Tuple<string[], Logistics>>, string?> SetViewBag(string? directory, string? filter, bool isGaN = false, bool isSi = false, bool forPDSF = false, bool forIPDSF = false);
} }

View File

@ -1,6 +1,6 @@
namespace APCViewer.Models.Properties; namespace APCViewer.Models.Properties;
public interface IBackgroundController public interface IBackgroundPage
{ {
public List<Exception> Exceptions { get; } public List<Exception> Exceptions { get; }

View File

@ -0,0 +1,11 @@
namespace APCViewer.Models.Properties;
public interface IIPDSFPage
{
string? Directory { get; }
int Files { get; }
Dictionary<string, Dictionary<string, List<Shared.Logistics>>> Grouped { get; }
List<Tuple<string[], Shared.Logistics>> Sorted { get; }
}

View File

@ -0,0 +1,11 @@
namespace APCViewer.Models.Properties;
public interface IPDSFPage
{
string? Directory { get; }
int Files { get; }
Dictionary<string, Dictionary<string, List<Shared.Logistics>>> Grouped { get; }
List<Tuple<string[], Shared.Logistics>> Sorted { get; }
}

View File

@ -0,0 +1,9 @@
namespace APCViewer.Models.Properties;
public interface ITimePivotPage
{
List<string[]> ForIPDSF { get; }
List<string[]> ForPDSF { get; }
}

View File

@ -1,12 +0,0 @@
using Microsoft.AspNetCore.Mvc;
namespace APCViewer.Models.Stateless.Methods;
public interface IBackgroundController
{
ActionResult Index(bool? message_clear = null, bool? exceptions_clear = null, bool? set_is_primary_instance = null);
static string GetRouteName() => nameof(IBackgroundController).Replace("Controller", string.Empty)[1..];
}

View File

@ -0,0 +1,10 @@
namespace APCViewer.Models.Stateless.Methods;
public interface IBackgroundPage
{
void OnGet(bool? message_clear = null, bool? exceptions_clear = null, bool? set_is_primary_instance = null);
static string GetRouteName() => nameof(IBackgroundPage).Replace("Page", string.Empty)[1..];
}

View File

@ -0,0 +1,14 @@
namespace APCViewer.Models.Stateless.Methods;
public interface IIPDSFPage
{
void OnGet(string? directory = null, string? filter = null, bool is_gaN = false, bool is_Si = false);
// ContentResult OnGetView(string? id = null);
// FileResult OnGetDownloadFile(string? id = null);
// ContentResult OnGetViewCustom(string? ipdsf_file = null);
// FileResult OnGetDownloadFileCustom(string? ipdsf_file = null);
static string GetRouteName() => nameof(IIPDSFPage).Replace("Page", string.Empty)[1..];
}

View File

@ -0,0 +1,14 @@
namespace APCViewer.Models.Stateless.Methods;
public interface IPDSFPage
{
void OnGet(string? directory = null, string? filter = null, bool is_gaN = false, bool is_Si = false);
// ContentResult OnGetView(string? id = null);
// FileResult OnGetDownloadFile(string? id = null);
// ContentResult OnGetViewCustom(string? pdsf_file = null);
// FileResult OnGetDownloadFileCustom(string? pdsf_file = null);
static string GetRouteName() => nameof(IPDSFPage).Replace("Page", string.Empty)[1..];
}

View File

@ -0,0 +1,10 @@
namespace APCViewer.Models.Stateless.Methods;
public interface ITimePivotPage
{
void OnGet(bool is_gaN = false, bool is_Si = false);
static string GetRouteName() => nameof(ITimePivotPage).Replace("Page", string.Empty)[1..];
}

View File

@ -0,0 +1,67 @@
@page
@model APCViewer.Pages.BackgroundPage
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Background</title>
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="~/css/app.css" rel="stylesheet" />
</head>
<body>
<div class="main">
<div class="content px-4">
<div class="jumbotron">
<h1>@(nameof(APCViewer)) -
@(Model.IsPrimaryInstance) -
@(Model.IsEnvironmentProfile) -
@(Model.AppSettingsURLs) -
020</h1>
<p class="lead">@(Model.WorkingDirectory)</p>
<p class="lead">@(Model.Message)</p>
<h1>@(string.Concat("Exception(s) - ", Model.Exceptions.Count))</h1>
</div>
<div>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/Background">Background Message</a></li>
<li><a href="/Background/?message_clear=true">Background Message Clear</a></li>
<li><a href="/Background/?exceptions_clear=true">Background Exceptions Clear</a></li>
<li><a href="/Background/?set_is_primary_instance=true">Background Set Is Primary Instance</a></li>
<li><a href="/Background/?set_is_primary_instance=false">Background Clear Primary Instance</a></li>
</ul>
</div>
<p>&nbsp;</p>
<hr />
<div>
<form action="">
@if (Model.Exceptions.Any())
{
int i = 0;
@foreach (Exception exception in Model.Exceptions)
{
<p>
@Html.Raw(string.Concat("<textarea name=\"message_", i, "\" rows='1' cols='400'>",
exception.Message, "</textarea>"));
</p>
<p>
@Html.Raw(string.Concat("<textarea name=\"stackTrace_", i, "\" rows='4' cols='400'>",
exception.StackTrace, "</textarea>"));
</p>
<hr />
@(i += 1)
;
}
}
</form>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,12 +1,12 @@
using APCViewer.Models.Stateless.Methods; using APCViewer.Models.Stateless.Methods;
using IFX.Shared; using IFX.Shared;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages;
using Serilog.Context; using Serilog.Context;
using System.Text.Json; using System.Text.Json;
namespace APCViewer.Controllers; namespace APCViewer.Pages;
public class BackgroundController : Controller, Models.Properties.IBackgroundController, IBackgroundController public class BackgroundPage : PageModel, Models.Properties.IBackgroundPage, IBackgroundPage
{ {
protected readonly List<Exception> _Exceptions; protected readonly List<Exception> _Exceptions;
@ -25,15 +25,15 @@ public class BackgroundController : Controller, Models.Properties.IBackgroundCon
private readonly Serilog.ILogger _Log; private readonly Serilog.ILogger _Log;
private readonly Models.Methods.IBackground _BackgroundMethods; private readonly Models.Methods.IBackground _BackgroundMethods;
public BackgroundController(IsEnvironment isEnvironment, Models.AppSettings appSettings, Singleton.Background background) public BackgroundPage(IsEnvironment isEnvironment, Models.AppSettings appSettings, Singleton.Background background)
{ {
_Message = background.Message;
_BackgroundMethods = background; _BackgroundMethods = background;
_Message = background.Message;
_AppSettingsURLs = appSettings.URLs; _AppSettingsURLs = appSettings.URLs;
_Exceptions = background.Exceptions; _Exceptions = background.Exceptions;
_Log = Serilog.Log.ForContext<BackgroundPage>();
_IsEnvironmentProfile = isEnvironment.Profile; _IsEnvironmentProfile = isEnvironment.Profile;
_WorkingDirectory = background.WorkingDirectory; _WorkingDirectory = background.WorkingDirectory;
_Log = Serilog.Log.ForContext<BackgroundController>();
Models.Methods.IBackground backgroundMethods = background; Models.Methods.IBackground backgroundMethods = background;
_IsPrimaryInstance = backgroundMethods.IsPrimaryInstance().ToString(); _IsPrimaryInstance = backgroundMethods.IsPrimaryInstance().ToString();
} }
@ -44,7 +44,7 @@ public class BackgroundController : Controller, Models.Properties.IBackgroundCon
return result; return result;
} }
public ActionResult Index(bool? message_clear = null, bool? exceptions_clear = null, bool? set_is_primary_instance = null) public void OnGet(bool? message_clear = null, bool? exceptions_clear = null, bool? set_is_primary_instance = null)
{ {
string? methodName = IMethodName.GetActualAsyncMethodName(); string? methodName = IMethodName.GetActualAsyncMethodName();
using (LogContext.PushProperty("MethodName", methodName)) using (LogContext.PushProperty("MethodName", methodName))
@ -61,22 +61,6 @@ public class BackgroundController : Controller, Models.Properties.IBackgroundCon
else else
_BackgroundMethods.ClearIsPrimaryInstance(); _BackgroundMethods.ClearIsPrimaryInstance();
} }
string message;
if (string.IsNullOrWhiteSpace(_Message))
message = "N/A";
else
message = _Message;
List<Exception> exceptions = new();
foreach (Exception exception in _Exceptions)
exceptions.Add(exception);
ViewBag.Message = message;
ViewBag.Exceptions = exceptions;
ViewBag.URLs = _AppSettingsURLs;
ViewBag.Profile = _IsEnvironmentProfile;
ViewBag.WorkingDirectory = _WorkingDirectory;
ViewBag.IsPrimaryInstance = _IsPrimaryInstance;
ViewBag.ExceptionsCount = string.Concat("Exception(s) - ", exceptions.Count);
return View();
} }
} }

View File

@ -0,0 +1,42 @@
@page
@model APCViewer.Pages.ErrorModel
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Error</title>
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="~/css/app.css" rel="stylesheet" asp-append-version="true" />
</head>
<body>
<div class="main">
<div class="content px-4">
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,20 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Diagnostics;
namespace APCViewer.Pages;
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
[IgnoreAntiforgeryToken]
public class ErrorModel : PageModel
{
public string? RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
private readonly ILogger<ErrorModel> _Logger;
public ErrorModel(ILogger<ErrorModel> logger) => _Logger = logger;
public void OnGet() => RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
}

View File

@ -0,0 +1,114 @@
@page
@using APCViewer.Pages
@model IPDSFPage
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
string viewLink;
string downloadLink;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>IPDSF</title>
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="~/css/app.css" rel="stylesheet" />
</head>
<body>
<div class="main">
<h3>@(Model.Files) File(s)</h3>
<p>
<table id="records" border="1">
<tr>
<th><a href="#b" id="a">Technology - Environment</a></th>
<th>Equipment Type</th>
<th>Sequence</th>
<th>Reactor</th>
<th>RDS</th>
<th>Part Number</th>
<th>File Name</th>
<th>Date</th>
</tr>
@foreach (var item in Model.Sorted)
{
if (!string.IsNullOrEmpty(Model.Directory) && item.Item2.ReportFullPath.Contains(Model.Directory))
{
viewLink = string.Concat("/", nameof(PDSFPage.OnGetViewCustom), "/?iipdsf_file=",
Html.Encode(item.Item2.ReportFullPath));
downloadLink = string.Concat("/", nameof(PDSFPage.OnGetDownloadFileCustom), "/?ipdsf_file=",
Html.Encode(item.Item2.ReportFullPath));
}
else
{
viewLink = string.Concat("/", nameof(PDSFPage.OnGetView), "/sequence_",
item.Item2.Sequence);
downloadLink = string.Concat("/", nameof(PDSFPage.OnGetDownloadFile), "/sequence_",
item.Item2.Sequence);
}
<tr>
<td>@item.Item1[0]</td>
<td>@item.Item1[1]</td>
<td><a href="@Url.Content(viewLink)">@item.Item2.Sequence</a></td>
<td>@item.Item2.ProcessJobID</td>
<td>@item.Item2.MID</td>
<td>@item.Item2.Logistics2[0].PartNumber</td>
<td>@System.IO.Path.GetFileNameWithoutExtension(item.Item2.ReportFullPath)</td>
<td><a href="@Url.Content(downloadLink)">@item.Item2.DateTimeFromSequence</a></td>
</tr>
}
</table>
@if (string.IsNullOrEmpty(Model.Directory))
{
<hr />
<table id="records" border="1">
<tr>
<th><a href="#a" id="b">Technology - Environment</a></th>
<th>Equipment Type</th>
<th>Sequence</th>
<th>Reactor</th>
<th>RDS</th>
<th>Part Number</th>
<th>File Name</th>
<th>Date</th>
</tr>
@foreach (var element in Model.Grouped)
{
foreach (var innerElement in element.Value)
{
foreach (var item in innerElement.Value)
{
viewLink = string.Concat("/", nameof(PDSFPage.OnGetView), "/sequence_", item.Sequence);
downloadLink = string.Concat("/", nameof(PDSFPage.OnGetDownloadFile), "/sequence_",
item.Sequence);
<tr>
<td>@element.Key</td>
<td>@innerElement.Key</td>
<td><a href="@Url.Content(viewLink)">@item.Sequence</a></td>
<td>@item.ProcessJobID</td>
<td>@item.MID</td>
<td>@item.Logistics2[0].PartNumber</td>
<td>@System.IO.Path.GetFileNameWithoutExtension(item.ReportFullPath)</td>
<td><a href="@Url.Content(downloadLink)">@item.DateTimeFromSequence</a></td>
</tr>
}
}
}
</table>
}
</p>
</div>
</body>
</html>
@section scripts {
<script>
$(function () {
console.log("ready!");
});
</script>
}

View File

@ -0,0 +1,164 @@
using APCViewer.Models.Stateless.Methods;
using IFX.Shared;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Serilog.Context;
using Shared;
using System.Text;
using System.Text.Json;
namespace APCViewer.Pages;
public class IPDSFPage : PageModel, Models.Properties.IIPDSFPage, IIPDSFPage
{
protected string? _Directory;
protected int _Files;
protected Dictionary<string, Dictionary<string, List<Shared.Logistics>>> _Grouped;
protected List<Tuple<string[], Shared.Logistics>> _Sorted;
public string? Directory => _Directory;
public int Files => _Files;
public Dictionary<string, Dictionary<string, List<Shared.Logistics>>> Grouped => _Grouped;
public List<Tuple<string[], Shared.Logistics>> Sorted => _Sorted;
private readonly Serilog.ILogger _Log;
private readonly Singleton.Background _Background;
private readonly Models.Methods.IBackground _BackgroundMethods;
#nullable disable
public IPDSFPage(Singleton.Background background)
{
_Background = background;
_BackgroundMethods = background;
_Log = Serilog.Log.ForContext<IPDSFPage>();
}
#nullable enable
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
return result;
}
public void OnGet(string? directory = null, string? filter = null, bool is_gaN = false, bool is_Si = false)
{
string? methodName = IMethodName.GetActualAsyncMethodName();
using (LogContext.PushProperty("MethodName", methodName))
{
_Log.Debug("() => ...");
Tuple<int, Dictionary<string, Dictionary<string, List<Logistics>>>, List<Tuple<string[], Logistics>>, string?> tuple = _BackgroundMethods.SetViewBag(directory, filter, isGaN: is_gaN, isSi: is_Si, forIPDSF: true);
_Files = tuple.Item1;
_Grouped = tuple.Item2;
_Sorted = tuple.Item3;
_Directory = tuple.Item4;
}
}
private static StringBuilder GetIPDSFHtml(string? ipdsfFile)
{
StringBuilder result = new();
_ = result.AppendLine("<html><body><table border = '1'>");
if (string.IsNullOrEmpty(ipdsfFile))
throw new Exception("<tr><td>Invalid input</td></tr>");
else if (!System.IO.File.Exists(ipdsfFile))
_ = result.AppendLine("<tr><td>File doesn't exist!</td></tr>");
else
{
bool header = true;
bool body = false;
bool footer = false;
string logisticsSegment;
List<string> logistics = new();
string[] ipdsfLines = System.IO.File.ReadAllLines(ipdsfFile);
foreach (string ipdsfLine in ipdsfLines)
{
if (ipdsfLine.StartsWith("LOGISTICS_"))
{
logisticsSegment = ipdsfLine.Split('\t')[0];
if (!logistics.Contains(logisticsSegment))
{
logistics.Add(logisticsSegment);
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
}
if (ipdsfLine.StartsWith("NUM_DATA_ROWS") || ipdsfLine.StartsWith("END_HEADER"))
{
body = false;
footer = true;
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
if (header)
_ = result.Append("<tr><td>").Append(ipdsfLine.Replace("\t", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else if (body)
_ = result.Append("<tr><td>").Append(ipdsfLine.Replace("\t", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else if (footer)
{
if (ipdsfLine.StartsWith("DELIMITER"))
_ = result.Append("<tr><td>").Append(ipdsfLine.Replace(";", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else
_ = result.Append("<tr><td>").Append(ipdsfLine.Replace("\t", "</td><td>").Replace("=", "</td><td>").Replace(";", "</td><td>")).AppendLine("&nbsp;</td></tr>");
}
else
throw new Exception();
if (ipdsfLine.StartsWith("END_OFFSET"))
{
header = false;
body = true;
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
}
}
_ = result.AppendLine("</table></body>");
return result;
}
public ContentResult OnGetView(string? id = null)
{
string ipdsfFile;
StringBuilder result = new();
if (string.IsNullOrEmpty(id) || !id.Contains('_'))
_ = result.AppendLine("<html><body><table border = '1'><tr><td>A) Error: Invalid input</td></tr></table></body>");
else
{
if (!long.TryParse(id.Split('_')[1], out long sequence))
_ = result.AppendLine("<html><body><table border = '1'><tr><td>B) Error: Invalid input</td></tr></table></body>");
else
{
ipdsfFile = _Background.GetIPDSF(sequence);
result = GetIPDSFHtml(ipdsfFile);
}
}
return Content(result.ToString(), "text/html");
}
public FileResult OnGetDownloadFile(string? id = null)
{
string ipdsfFile;
if (string.IsNullOrEmpty(id) || !id.Contains('_'))
throw new Exception("A) Error: Invalid input");
else
{
if (!long.TryParse(id.Split('_')[1], out long sequence))
throw new Exception("B) Error: Invalid input");
else
ipdsfFile = _Background.GetIPDSF(sequence);
}
return File(ipdsfFile, "text/plain", Path.GetFileName(ipdsfFile));
}
public ContentResult OnGetViewCustom(string? ipdsf_file = null)
{
StringBuilder result = GetIPDSFHtml(ipdsf_file);
return Content(result.ToString(), "text/html");
}
public FileResult OnGetDownloadFileCustom(string? ipdsf_file = null)
{
if (string.IsNullOrEmpty(ipdsf_file))
throw new Exception("Error: Invalid input");
else if (!System.IO.File.Exists(ipdsf_file))
throw new Exception("Error: file does not exist");
return File(ipdsf_file, "text/plain", Path.GetFileName(ipdsf_file));
}
}

View File

@ -0,0 +1,114 @@
@page
@using APCViewer.Pages
@model PDSFPage
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
string viewLink;
string downloadLink;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>PDSF</title>
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="~/css/app.css" rel="stylesheet" />
</head>
<body>
<div class="main">
<h3>@(Model.Files) File(s)</h3>
<p>
<table id="records" border="1">
<tr>
<th><a href="#b" id="a">Technology - Environment</a></th>
<th>Equipment Type</th>
<th>Sequence</th>
<th>Reactor</th>
<th>RDS</th>
<th>Part Number</th>
<th>File Name</th>
<th>Date</th>
</tr>
@foreach (var item in Model.Sorted)
{
if (!string.IsNullOrEmpty(Model.Directory) && item.Item2.ReportFullPath.Contains(Model.Directory))
{
viewLink = string.Concat("/", nameof(PDSFPage.OnGetViewCustom), "/?pdsf_file=",
Html.Encode(item.Item2.ReportFullPath));
downloadLink = string.Concat("/", nameof(PDSFPage.OnGetDownloadFileCustom), "/?pdsf_file=",
Html.Encode(item.Item2.ReportFullPath));
}
else
{
viewLink = string.Concat("/", nameof(PDSFPage.OnGetView), "/sequence_",
item.Item2.Sequence);
downloadLink = string.Concat("/", nameof(PDSFPage.OnGetDownloadFile), "/sequence_",
item.Item2.Sequence);
}
<tr>
<td>@item.Item1[0]</td>
<td>@item.Item1[1]</td>
<td><a href="@Url.Content(viewLink)">@item.Item2.Sequence</a></td>
<td>@item.Item2.ProcessJobID</td>
<td>@item.Item2.MID</td>
<td>@item.Item2.Logistics2[0].PartNumber</td>
<td>@System.IO.Path.GetFileNameWithoutExtension(item.Item2.ReportFullPath)</td>
<td><a href="@Url.Content(downloadLink)">@item.Item2.DateTimeFromSequence</a></td>
</tr>
}
</table>
@if (string.IsNullOrEmpty(Model.Directory))
{
<hr />
<table id="records" border="1">
<tr>
<th><a href="#a" id="b">Technology - Environment</a></th>
<th>Equipment Type</th>
<th>Sequence</th>
<th>Reactor</th>
<th>RDS</th>
<th>Part Number</th>
<th>File Name</th>
<th>Date</th>
</tr>
@foreach (var element in Model.Grouped)
{
foreach (var innerElement in element.Value)
{
foreach (var item in innerElement.Value)
{
viewLink = string.Concat("/", nameof(PDSFPage.OnGetView), "/sequence_", item.Sequence);
downloadLink = string.Concat("/", nameof(PDSFPage.OnGetDownloadFile), "/sequence_",
item.Sequence);
<tr>
<td>@element.Key</td>
<td>@innerElement.Key</td>
<td><a href="@Url.Content(viewLink)">@item.Sequence</a></td>
<td>@item.ProcessJobID</td>
<td>@item.MID</td>
<td>@item.Logistics2[0].PartNumber</td>
<td>@System.IO.Path.GetFileNameWithoutExtension(item.ReportFullPath)</td>
<td><a href="@Url.Content(downloadLink)">@item.DateTimeFromSequence</a></td>
</tr>
}
}
}
</table>
}
</p>
</div>
</body>
</html>
@section scripts {
<script>
$(function () {
console.log("ready!");
});
</script>
}

View File

@ -0,0 +1,164 @@
using APCViewer.Models.Stateless.Methods;
using IFX.Shared;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Serilog.Context;
using Shared;
using System.Text;
using System.Text.Json;
namespace APCViewer.Pages;
public class PDSFPage : PageModel, Models.Properties.IPDSFPage, Models.Stateless.Methods.IPDSFPage
{
protected string? _Directory;
protected int _Files;
protected Dictionary<string, Dictionary<string, List<Shared.Logistics>>> _Grouped;
protected List<Tuple<string[], Shared.Logistics>> _Sorted;
public string? Directory => _Directory;
public int Files => _Files;
public Dictionary<string, Dictionary<string, List<Shared.Logistics>>> Grouped => _Grouped;
public List<Tuple<string[], Shared.Logistics>> Sorted => _Sorted;
private readonly Serilog.ILogger _Log;
private readonly Singleton.Background _Background;
private readonly Models.Methods.IBackground _BackgroundMethods;
#nullable disable
public PDSFPage(Singleton.Background background)
{
_Background = background;
_BackgroundMethods = background;
_Log = Serilog.Log.ForContext<PDSFPage>();
}
#nullable enable
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
return result;
}
public void OnGet(string? directory = null, string? filter = null, bool is_gaN = false, bool is_Si = false)
{
string? methodName = IMethodName.GetActualAsyncMethodName();
using (LogContext.PushProperty("MethodName", methodName))
{
_Log.Debug("() => ...");
Tuple<int, Dictionary<string, Dictionary<string, List<Logistics>>>, List<Tuple<string[], Logistics>>, string?> tuple = _BackgroundMethods.SetViewBag(directory, filter, isGaN: is_gaN, isSi: is_Si, forPDSF: true);
_Files = tuple.Item1;
_Grouped = tuple.Item2;
_Sorted = tuple.Item3;
_Directory = tuple.Item4;
}
}
private static StringBuilder GetPDSFHtml(string? pdsfFile)
{
StringBuilder result = new();
_ = result.AppendLine("<html><body><table border = '1'>");
if (string.IsNullOrEmpty(pdsfFile))
throw new Exception("<tr><td>Invalid input</td></tr>");
else if (!System.IO.File.Exists(pdsfFile))
_ = result.AppendLine("<tr><td>File doesn't exist!</td></tr>");
else
{
bool header = true;
bool body = false;
bool footer = false;
string logisticsSegment;
List<string> logistics = new();
string[] pdsfLines = System.IO.File.ReadAllLines(pdsfFile);
foreach (string pdsfLine in pdsfLines)
{
if (pdsfLine.StartsWith("LOGISTICS_"))
{
logisticsSegment = pdsfLine.Split('\t')[0];
if (!logistics.Contains(logisticsSegment))
{
logistics.Add(logisticsSegment);
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
}
if (pdsfLine.StartsWith("NUM_DATA_ROWS") || pdsfLine.StartsWith("END_HEADER"))
{
body = false;
footer = true;
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
if (header)
_ = result.Append("<tr><td>").Append(pdsfLine.Replace("\t", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else if (body)
_ = result.Append("<tr><td>").Append(pdsfLine.Replace("\t", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else if (footer)
{
if (pdsfLine.StartsWith("DELIMITER"))
_ = result.Append("<tr><td>").Append(pdsfLine.Replace(";", "</td><td>")).AppendLine("&nbsp;</td></tr>");
else
_ = result.Append("<tr><td>").Append(pdsfLine.Replace("\t", "</td><td>").Replace("=", "</td><td>").Replace(";", "</td><td>")).AppendLine("&nbsp;</td></tr>");
}
else
throw new Exception();
if (pdsfLine.StartsWith("END_OFFSET"))
{
header = false;
body = true;
_ = result.AppendLine("</table><hr /><table border = '1'>");
}
}
}
_ = result.AppendLine("</table></body>");
return result;
}
public ContentResult OnGetView(string? id = null)
{
string pdsfFile;
StringBuilder result = new();
if (string.IsNullOrEmpty(id) || !id.Contains('_'))
_ = result.AppendLine("<html><body><table border = '1'><tr><td>A) Error: Invalid input</td></tr></table></body>");
else
{
if (!long.TryParse(id.Split('_')[1], out long sequence))
_ = result.AppendLine("<html><body><table border = '1'><tr><td>B) Error: Invalid input</td></tr></table></body>");
else
{
pdsfFile = _Background.GetPDSF(sequence);
result = GetPDSFHtml(pdsfFile);
}
}
return Content(result.ToString(), "text/html");
}
public FileResult OnGetDownloadFile(string? id = null)
{
string pdsfFile;
if (string.IsNullOrEmpty(id) || !id.Contains('_'))
throw new Exception("A) Error: Invalid input");
else
{
if (!long.TryParse(id.Split('_')[1], out long sequence))
throw new Exception("B) Error: Invalid input");
else
pdsfFile = _Background.GetPDSF(sequence);
}
return File(pdsfFile, "text/plain", Path.GetFileName(pdsfFile));
}
public ContentResult OnGetViewCustom(string? pdsf_file = null)
{
StringBuilder result = GetPDSFHtml(pdsf_file);
return Content(result.ToString(), "text/html");
}
public FileResult OnGetDownloadFileCustom(string? pdsf_file = null)
{
if (string.IsNullOrEmpty(pdsf_file))
throw new Exception("Error: Invalid input");
else if (!System.IO.File.Exists(pdsf_file))
throw new Exception("Error: file does not exist");
return File(pdsf_file, "text/plain", Path.GetFileName(pdsf_file));
}
}

View File

@ -0,0 +1,53 @@
@page
@model APCViewer.Pages.TimePivotPage
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>TimePivot</title>
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="~/css/app.css" rel="stylesheet" />
</head>
<body>
<div class="main">
<h3>*.ipdsf</h3>
<table id="forIPDSF" border="1">
@foreach (var segments in Model.ForIPDSF)
{
<tr>
@for (int i = 0; i < segments.Length; i++)
{
<td>@(segments[i])</td>
}
</tr>
}
</table>
<hr />
<h3>*.pdsf</h3>
<table id="forPDSF" border="1">
@foreach (var segments in Model.ForPDSF)
{
<tr>
@for (int i = 0; i < segments.Length; i++)
{
<td>@(segments[i])</td>
}
</tr>
}
</table>
</div>
</body>
</html>
@section scripts {
<script>
$(function () {
console.log("ready!");
});
</script>
}

View File

@ -0,0 +1,49 @@
using APCViewer.Models.Stateless.Methods;
using IFX.Shared;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Serilog.Context;
using Shared;
using System.Text.Json;
namespace APCViewer.Pages;
public class TimePivotPage : PageModel, Models.Properties.ITimePivotPage, ITimePivotPage
{
protected List<string[]> _ForIPDSF;
protected List<string[]> _ForPDSF;
public List<string[]> ForIPDSF => _ForIPDSF;
public List<string[]> ForPDSF => _ForPDSF;
private readonly Serilog.ILogger _Log;
private readonly Singleton.Background _Background;
private readonly Models.Methods.IBackground _BackgroundMethods;
#nullable disable
public TimePivotPage(Singleton.Background background)
{
_Background = background;
_BackgroundMethods = background;
_Log = Serilog.Log.ForContext<TimePivotPage>();
}
#nullable enable
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
return result;
}
public void OnGet(bool is_gaN = false, bool is_Si = false)
{
string? methodName = IMethodName.GetActualAsyncMethodName();
using (LogContext.PushProperty("MethodName", methodName))
{
_Log.Debug("() => ...");
Tuple<List<string[]>, List<string[]>> tuple = _BackgroundMethods.GetTimePivot(isGaN: is_gaN, isSi: is_Si);
_ForIPDSF = tuple.Item1;
_ForPDSF = tuple.Item2;
}
}
}

View File

@ -13,7 +13,6 @@ public class Program
public static int Main(string[] args) public static int Main(string[] args)
{ {
LoggerConfiguration loggerConfiguration = new(); LoggerConfiguration loggerConfiguration = new();
// ConsoleLoggerConfigurationExtensions.Console(loggerConfiguration.WriteTo);
Assembly assembly = Assembly.GetExecutingAssembly(); Assembly assembly = Assembly.GetExecutingAssembly();
string? assemblyName = assembly.GetName()?.Name; string? assemblyName = assembly.GetName()?.Name;
if (string.IsNullOrEmpty(assemblyName)) if (string.IsNullOrEmpty(assemblyName))
@ -24,6 +23,7 @@ public class Program
throw new Exception("Working directory name must have a value!"); throw new Exception("Working directory name must have a value!");
string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, appSettings.WorkingDirectoryName); string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, appSettings.WorkingDirectoryName);
Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory);
_ = ConsoleLoggerConfigurationExtensions.Console(loggerConfiguration.WriteTo);
_ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration); _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration);
_ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host); _ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host);
Log.Logger = loggerConfiguration.CreateLogger(); Log.Logger = loggerConfiguration.CreateLogger();
@ -32,27 +32,21 @@ public class Program
{ {
IsEnvironment isEnvironment = new(webApplicationBuilder.Environment.IsDevelopment(), webApplicationBuilder.Environment.IsStaging(), webApplicationBuilder.Environment.IsProduction()); IsEnvironment isEnvironment = new(webApplicationBuilder.Environment.IsDevelopment(), webApplicationBuilder.Environment.IsStaging(), webApplicationBuilder.Environment.IsProduction());
Singleton.Background background = new(isEnvironment, appSettings, workingDirectory); Singleton.Background background = new(isEnvironment, appSettings, workingDirectory);
if (isEnvironment.Development && !string.IsNullOrEmpty("storage.UrlRoot")) if (isEnvironment.Development && string.IsNullOrEmpty(appSettings.URLs))
throw new Exception(); throw new Exception();
_ = webApplicationBuilder.Services.AddControllersWithViews();
// _ = webApplicationBuilder.Services.AddRazorPages(configure => configure.Conventions.AuthorizeFolder("/Admin").AddPageRoute("/index", "{*url}"));
_ = webApplicationBuilder.Services.AddRazorPages(); _ = webApplicationBuilder.Services.AddRazorPages();
_ = webApplicationBuilder.Services.AddSingleton<AppSettings, AppSettings>(_ => appSettings); _ = webApplicationBuilder.Services.AddSingleton<AppSettings, AppSettings>(_ => appSettings);
_ = webApplicationBuilder.Services.AddSingleton<IsEnvironment, IsEnvironment>(_ => isEnvironment); _ = webApplicationBuilder.Services.AddSingleton<IsEnvironment, IsEnvironment>(_ => isEnvironment);
_ = webApplicationBuilder.Services.AddSingleton<Singleton.Background, Singleton.Background>(_ => background); _ = webApplicationBuilder.Services.AddSingleton<Singleton.Background, Singleton.Background>(_ => background);
_ = webApplicationBuilder.Services.AddHostedService(t => new TimedHostedService(isEnvironment, background)); _ = webApplicationBuilder.Services.AddHostedService(t => new TimedHostedService(isEnvironment, background));
_ = webApplicationBuilder.Services.AddSwaggerGen();
WebApplication webApplication = webApplicationBuilder.Build(); WebApplication webApplication = webApplicationBuilder.Build();
if (isEnvironment.Development) if (isEnvironment.Development)
{ {
webApplication.UseWebAssemblyDebugging(); if (appSettings.URLs == "Exit")
if (!string.IsNullOrEmpty("storage.UrlRoot"))
{ {
Environment.ExitCode = -1; Environment.ExitCode = -1;
webApplication.Lifetime.StopApplication(); webApplication.Lifetime.StopApplication();
} }
_ = webApplication.UseSwagger();
_ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "APC Viewer API V1"));
} }
else else
{ {
@ -65,12 +59,9 @@ public class Program
_ = SerilogApplicationBuilderExtensions.UseSerilogRequestLogging(webApplication); _ = SerilogApplicationBuilderExtensions.UseSerilogRequestLogging(webApplication);
_ = webApplication.UseDeveloperExceptionPage(); _ = webApplication.UseDeveloperExceptionPage();
_ = webApplication.UseHttpsRedirection(); _ = webApplication.UseHttpsRedirection();
_ = webApplication.UseBlazorFrameworkFiles();
_ = webApplication.UseStaticFiles(); _ = webApplication.UseStaticFiles();
_ = webApplication.UseRouting(); _ = webApplication.UseRouting();
_ = webApplication.MapRazorPages(); _ = webApplication.MapRazorPages();
_ = webApplication.MapControllers();
_ = webApplication.MapFallbackToFile("index.html");
log.Information("Starting Web Application"); log.Information("Starting Web Application");
webApplication.Run(); webApplication.Run();

View File

@ -174,4 +174,4 @@ public class Description
return result; return result;
} }
} }

View File

@ -47,4 +47,4 @@ public enum EquipmentType
MET08XRDXPERTPROMRDXL_Monthly, MET08XRDXPERTPROMRDXL_Monthly,
MET08XRDXPERTPROMRDXL_Weekly, MET08XRDXPERTPROMRDXL_Weekly,
METBRXRAYJV7300L METBRXRAYJV7300L
} }

View File

@ -11,4 +11,4 @@ public interface IProcessData
Tuple<string, JsonElement?, List<FileInfo>> GetResults(ILogic logic, ConfigDataBase configData, List<FileInfo> fileInfoCollection); Tuple<string, JsonElement?, List<FileInfo>> GetResults(ILogic logic, ConfigDataBase configData, List<FileInfo> fileInfoCollection);
} }

View File

@ -20,4 +20,4 @@ public interface IProcessDataDescription
List<string> GetParameterNames(ILogic logic, ConfigDataBase configDataBase); List<string> GetParameterNames(ILogic logic, ConfigDataBase configDataBase);
string GetEventDescription(); string GetEventDescription();
} }

View File

@ -15,4 +15,4 @@ public interface IScopeInfo
string FileNameWithoutExtension { get; } string FileNameWithoutExtension { get; }
EquipmentType EquipmentType { get; } EquipmentType EquipmentType { get; }
} }

View File

@ -165,4 +165,4 @@ public class IsEnvironment
return result; return result;
} }
} }

View File

@ -227,4 +227,4 @@ public class Logistics
Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList(); Logistics1 = new string[] { string.Concat("LOGISTICS_1", '\t', "A_JOBID=", JobID, ";A_MES_ENTITY=", MesEntity, ";") }.ToList();
Logistics2 = new List<Logistics2>(); Logistics2 = new List<Logistics2>();
} }
} }

View File

@ -75,4 +75,4 @@ public class Logistics2
} }
} }
} }

View File

@ -272,7 +272,7 @@ public static class ColumnGet
public static Description.Param GetParam(this Column column) public static Description.Param GetParam(this Column column)
{ {
var results = column switch Description.Param results = column switch
{ {
//case Column._8in_Total_Warp_Verification: results = Description.Param.String; break; //case Column._8in_Total_Warp_Verification: results = Description.Param.String; break;
//case Column.AFM_Monthly_Y: results = Description.Param.String; break; //case Column.AFM_Monthly_Y: results = Description.Param.String; break;
@ -795,4 +795,4 @@ public enum Column
W, W,
Y, Y,
Zn Zn
} }

View File

@ -383,4 +383,4 @@ public class ConfigDataBase
return results; return results;
} }
} }

View File

@ -7,4 +7,4 @@ public enum EventName
FileReadMonthly, FileReadMonthly,
FileReadVerification, FileReadVerification,
FileReadWeekly FileReadWeekly
} }

View File

@ -42,4 +42,4 @@ public interface ILogic
void SetPlaceHolder(string reportFullPath, string key, string value); void SetPlaceHolder(string reportFullPath, string key, string value);
void SetTarget2FileLocation(string value); void SetTarget2FileLocation(string value);
} }

View File

@ -8,4 +8,4 @@ public class MET08AFMD3100
AFMRoughness = Metrology.Test.AFMRoughness AFMRoughness = Metrology.Test.AFMRoughness
} }
} }

View File

@ -10,4 +10,4 @@ public class MET08BVHGPROBE
BreakdownVoltageMiddle8in = Metrology.Test.BreakdownVoltageMiddle8in BreakdownVoltageMiddle8in = Metrology.Test.BreakdownVoltageMiddle8in
} }
} }

View File

@ -10,4 +10,4 @@ public class MET08CVHGPROBE802B150
WeeklyCV = Metrology.Test.WeeklyCV WeeklyCV = Metrology.Test.WeeklyCV
} }
} }

View File

@ -12,4 +12,4 @@ public class MET08DDINCAN8620
CandelaProdU = Metrology.Test.CandelaProdU CandelaProdU = Metrology.Test.CandelaProdU
} }
} }

View File

@ -8,4 +8,4 @@ public class MET08DDUPSFS6420
Tencor = Metrology.Test.Tencor Tencor = Metrology.Test.Tencor
} }
} }

View File

@ -8,4 +8,4 @@ public class MET08DDUPSP1TBI
SP1 = Metrology.Test.SP1 SP1 = Metrology.Test.SP1
} }
} }

View File

@ -8,4 +8,4 @@ public class MET08EBEAMINTEGRITY26
Denton = Metrology.Test.Denton Denton = Metrology.Test.Denton
} }
} }

View File

@ -10,4 +10,4 @@ public class MET08HALLHL5580
WeeklyHall = Metrology.Test.WeeklyHall WeeklyHall = Metrology.Test.WeeklyHall
} }
} }

View File

@ -8,4 +8,4 @@ public class MET08MESMICROSCOPE
Microscope = Metrology.Test.Microscope Microscope = Metrology.Test.Microscope
} }
} }

View File

@ -9,4 +9,4 @@ public class MET08NDFRESIMAP151C
VerificationLehighton = Metrology.Test.VerificationLehighton VerificationLehighton = Metrology.Test.VerificationLehighton
} }
} }

View File

@ -14,4 +14,4 @@ public class MET08PLMAPRPM
VerificationRPM = Metrology.Test.VerificationRPM VerificationRPM = Metrology.Test.VerificationRPM
} }
} }

View File

@ -8,4 +8,4 @@ public class MET08PRFUSB4000
Photoreflectance = Metrology.Test.Photoreflectance Photoreflectance = Metrology.Test.Photoreflectance
} }
} }

View File

@ -8,4 +8,4 @@ public class MET08RESIHGCV
HgCV = Metrology.Test.HgCV HgCV = Metrology.Test.HgCV
} }
} }

View File

@ -8,4 +8,4 @@ public class MET08RESIMAPCDE
CDE = Metrology.Test.CDE CDE = Metrology.Test.CDE
} }
} }

View File

@ -8,4 +8,4 @@ public class MET08THFTIRQS408M
BioRadQS408M = Metrology.Test.BioRadQS408M BioRadQS408M = Metrology.Test.BioRadQS408M
} }
} }

Some files were not shown because too many files have changed in this diff Show More