Bump
AzureDevOpsRepository Markdown links Ticks bug fix, default to *.wc files and formatting
This commit is contained in:
10
Wafer-Counter/.vscode/tasks.json
vendored
10
Wafer-Counter/.vscode/tasks.json
vendored
@ -1,6 +1,16 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "dotnetRunDebug",
|
||||
"command": "dotnet OI.Metrology.Wafer.Counter.dll",
|
||||
"dependsOn": "build",
|
||||
"problemMatcher": [],
|
||||
"type": "shell",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/bin/Debug/net8.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "build",
|
||||
"command": "dotnet",
|
||||
|
26
Wafer-Counter/ApiControllers/AzureDevOpsController.cs
Normal file
26
Wafer-Counter/ApiControllers/AzureDevOpsController.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using OI.Metrology.Shared.Models;
|
||||
using OI.Metrology.Shared.Models.Stateless;
|
||||
using OI.Metrology.Wafer.Counter.Helper;
|
||||
|
||||
namespace OI.Metrology.Wafer.Counter.ApiControllers;
|
||||
|
||||
[Route("api/v1/ado")]
|
||||
public class AzureDevOpsController : Controller, IAzureDevOpsController<IResult>
|
||||
{
|
||||
|
||||
private readonly IAzureDevOpsRepository _AzureDevOpsRepository;
|
||||
|
||||
public AzureDevOpsController(IAzureDevOpsRepository azureDevOpsRepository) =>
|
||||
_AzureDevOpsRepository = azureDevOpsRepository;
|
||||
|
||||
[HttpPost("save")]
|
||||
public IResult Save()
|
||||
{
|
||||
PollValue? pollValue = ParameterHelper.GetPollValue(Request.HttpContext.Connection?.RemoteIpAddress, Request.Body);
|
||||
ArgumentNullException.ThrowIfNull(pollValue);
|
||||
_AzureDevOpsRepository.Save(pollValue);
|
||||
return Results.Ok();
|
||||
}
|
||||
|
||||
}
|
@ -1,9 +1,9 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using OI.Metrology.Shared.DataModels;
|
||||
using OI.Metrology.Shared.Models;
|
||||
using OI.Metrology.Shared.Models.Stateless;
|
||||
using System.Collections.Specialized;
|
||||
using System.Text.Json;
|
||||
using System.Web;
|
||||
using OI.Metrology.Wafer.Counter.Helper;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace OI.Metrology.Wafer.Counter.ApiControllers;
|
||||
|
||||
@ -37,39 +37,21 @@ public class FileShareController : Controller, IFileShareController<IResult>
|
||||
return Results.Ok();
|
||||
}
|
||||
|
||||
private static Dictionary<string, string?> GetKeyValuePairs(QueryString queryString)
|
||||
{
|
||||
Dictionary<string, string?> results = [];
|
||||
if (queryString.HasValue)
|
||||
{
|
||||
NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(queryString.Value);
|
||||
foreach (string? key in nameValueCollection.AllKeys)
|
||||
{
|
||||
if (key is null)
|
||||
continue;
|
||||
results.Add(key, nameValueCollection[key]);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private static CharacterizationParameters? GetCharacterizationParameters(QueryString queryString)
|
||||
{
|
||||
CharacterizationParameters? result;
|
||||
Dictionary<string, string?> keyValuePairs = GetKeyValuePairs(queryString);
|
||||
string json = JsonSerializer.Serialize(keyValuePairs);
|
||||
result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize(json, CharacterizationParametersSourceGenerationContext.Default.CharacterizationParameters);
|
||||
return result;
|
||||
}
|
||||
|
||||
[HttpGet("archive-data")]
|
||||
public IActionResult ArchiveData()
|
||||
{
|
||||
List<CharacterizationInfo> results;
|
||||
CharacterizationParameters? characterizationParameters = GetCharacterizationParameters(Request.QueryString);
|
||||
ReadOnlyCollection<CharacterizationInfo> results;
|
||||
CharacterizationParameters? characterizationParameters = ParameterHelper.GetCharacterizationParameters(Request.QueryString);
|
||||
ArgumentNullException.ThrowIfNull(characterizationParameters);
|
||||
results = _FileShareRepository.GetArchiveData(characterizationParameters);
|
||||
return Json(results);
|
||||
}
|
||||
|
||||
[HttpGet("equipment-ids")]
|
||||
public IActionResult EquipmentIds()
|
||||
{
|
||||
ReadOnlyCollection<ToolTypeNameId> results = _FileShareRepository.GetEquipmentIds();
|
||||
return Json(results);
|
||||
}
|
||||
|
||||
}
|
82
Wafer-Counter/Helper/ParameterHelper.cs
Normal file
82
Wafer-Counter/Helper/ParameterHelper.cs
Normal file
@ -0,0 +1,82 @@
|
||||
using OI.Metrology.Shared.Models;
|
||||
using System.Collections.Specialized;
|
||||
using System.Net;
|
||||
using System.Text.Json;
|
||||
using System.Web;
|
||||
|
||||
namespace OI.Metrology.Wafer.Counter.Helper;
|
||||
|
||||
public class ParameterHelper
|
||||
{
|
||||
|
||||
private static Dictionary<string, string?> GetKeyValuePairs(QueryString queryString)
|
||||
{
|
||||
Dictionary<string, string?> results = [];
|
||||
if (queryString.HasValue)
|
||||
{
|
||||
NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(queryString.Value);
|
||||
foreach (string? key in nameValueCollection.AllKeys)
|
||||
{
|
||||
if (key is null)
|
||||
continue;
|
||||
results.Add(key, nameValueCollection[key]);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static CharacterizationParameters? GetCharacterizationParameters(QueryString queryString)
|
||||
{
|
||||
CharacterizationParameters? result;
|
||||
Dictionary<string, string?> keyValuePairs = GetKeyValuePairs(queryString);
|
||||
string json = JsonSerializer.Serialize(keyValuePairs, new JsonSerializerOptions() { WriteIndented = true });
|
||||
result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize(json, CharacterizationParametersSourceGenerationContext.Default.CharacterizationParameters);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string? GetQueryString(Stream stream)
|
||||
{
|
||||
string? result;
|
||||
if (!stream.CanRead)
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
Task<string> task = new StreamReader(stream).ReadToEndAsync();
|
||||
result = task.Result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Dictionary<string, string?> GetKeyValuePairs(string? queryString)
|
||||
{
|
||||
Dictionary<string, string?> results = [];
|
||||
if (!string.IsNullOrEmpty(queryString))
|
||||
{
|
||||
NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(queryString);
|
||||
foreach (string? key in nameValueCollection.AllKeys)
|
||||
{
|
||||
if (key is null)
|
||||
continue;
|
||||
results.Add(key, nameValueCollection[key]);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static PollValue? GetPollValue(IPAddress? remoteIpAddress, Stream stream)
|
||||
{
|
||||
PollValue? result;
|
||||
string? queryString = GetQueryString(stream);
|
||||
Dictionary<string, string?> keyValuePairs = GetKeyValuePairs(queryString);
|
||||
string json = JsonSerializer.Serialize(keyValuePairs, new JsonSerializerOptions() { WriteIndented = true });
|
||||
result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize(json, PollValueSourceGenerationContext.Default.PollValue);
|
||||
if (result is not null)
|
||||
{
|
||||
result = new(null, result.Id, result.Page, queryString, remoteIpAddress is null ? string.Empty : remoteIpAddress.ToString(), result.Time, result.Value);
|
||||
json = JsonSerializer.Serialize(result, PollValueSourceGenerationContext.Default.PollValue);
|
||||
result = new(json, result.Id, result.Page, queryString, remoteIpAddress is null ? string.Empty : remoteIpAddress.ToString(), result.Time, result.Value);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace OI.Metrology.Wafer.Counter.Repository;
|
||||
namespace OI.Metrology.Wafer.Counter.Helper;
|
||||
|
||||
public partial class RegexHelper
|
||||
{
|
||||
@ -8,4 +8,4 @@ public partial class RegexHelper
|
||||
[GeneratedRegex(@"[\\,\/,\:,\*,\?,\"",\<,\>,\|]")]
|
||||
internal static partial Regex WindowsFileSystem();
|
||||
|
||||
}
|
||||
}
|
@ -1,8 +1,10 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace OI.Metrology.Wafer.Counter.Models;
|
||||
|
||||
public record AppSettings(string BuildNumber,
|
||||
public record AppSettings(string AzureDevOpsDestinationDirectory,
|
||||
string BuildNumber,
|
||||
string Company,
|
||||
string EcCharacterizationSi,
|
||||
string EcMesaFileShareCharacterizationSi,
|
||||
@ -20,8 +22,14 @@ public record AppSettings(string BuildNumber,
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
|
||||
string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(AppSettings))]
|
||||
public partial class AppSettingsSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
@ -6,6 +6,7 @@ namespace OI.Metrology.Wafer.Counter.Models.Binder;
|
||||
public class AppSettings
|
||||
{
|
||||
|
||||
public string? AzureDevOpsDestinationDirectory { get; set; }
|
||||
public string? BuildNumber { get; set; }
|
||||
public string? Company { get; set; }
|
||||
public string? EcCharacterizationSi { get; set; }
|
||||
@ -23,7 +24,7 @@ public class AppSettings
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
|
||||
string result = JsonSerializer.Serialize(this, BinderAppSettingsSourceGenerationContext.Default.AppSettings);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -48,6 +49,7 @@ public class AppSettings
|
||||
{
|
||||
Models.AppSettings result;
|
||||
if (appSettings is null) throw new NullReferenceException(nameof(appSettings));
|
||||
if (appSettings.AzureDevOpsDestinationDirectory is null) throw new NullReferenceException(nameof(AzureDevOpsDestinationDirectory));
|
||||
if (appSettings.BuildNumber is null) throw new NullReferenceException(nameof(BuildNumber));
|
||||
if (appSettings.Company is null) throw new NullReferenceException(nameof(Company));
|
||||
if (appSettings.EcCharacterizationSi is null) throw new NullReferenceException(nameof(EcCharacterizationSi));
|
||||
@ -62,7 +64,8 @@ public class AppSettings
|
||||
if (appSettings.WaferCounterDestinationDirectory is null) throw new NullReferenceException(nameof(WaferCounterDestinationDirectory));
|
||||
if (appSettings.WaferCounterTwoFileSecondsWait is null) throw new NullReferenceException(nameof(WaferCounterTwoFileSecondsWait));
|
||||
if (appSettings.WorkingDirectoryName is null) throw new NullReferenceException(nameof(WorkingDirectoryName));
|
||||
result = new(appSettings.BuildNumber,
|
||||
result = new(appSettings.AzureDevOpsDestinationDirectory,
|
||||
appSettings.BuildNumber,
|
||||
appSettings.Company,
|
||||
appSettings.EcCharacterizationSi,
|
||||
appSettings.EcMesaFileShareCharacterizationSi,
|
||||
|
@ -19,17 +19,17 @@
|
||||
<PackageReference Include="Dapper" Version="2.1.44" />
|
||||
<PackageReference Include="EntityFramework" Version="6.5.1" />
|
||||
<PackageReference Include="jQuery" Version="3.7.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.10" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="8.0.1" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.7.3" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
|
||||
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -31,6 +31,7 @@ public class Program
|
||||
_ = webApplicationBuilder.Services.AddHttpClient();
|
||||
_ = webApplicationBuilder.Services.AddSingleton(_ => appSettings);
|
||||
_ = webApplicationBuilder.Services.AddSingleton<IFileShareRepository, FileShareRepository>();
|
||||
_ = webApplicationBuilder.Services.AddSingleton<IAzureDevOpsRepository, AzureDevOpsRepository>();
|
||||
_ = webApplicationBuilder.Services.AddSingleton<IWaferCounterRepository, WaferCounterRepository>();
|
||||
_ = webApplicationBuilder.Services.AddSingleton<IAppSettingsRepository<Models.Binder.AppSettings>>(_ => appSettingsRepository);
|
||||
|
||||
|
25
Wafer-Counter/Repositories/AzureDevOpsRepository.cs
Normal file
25
Wafer-Counter/Repositories/AzureDevOpsRepository.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using OI.Metrology.Shared.Models;
|
||||
using OI.Metrology.Shared.Models.Stateless;
|
||||
using OI.Metrology.Wafer.Counter.Models;
|
||||
|
||||
namespace OI.Metrology.Wafer.Counter.Repository;
|
||||
|
||||
public class AzureDevOpsRepository : IAzureDevOpsRepository
|
||||
{
|
||||
|
||||
private readonly AppSettings _AppSettings;
|
||||
|
||||
public AzureDevOpsRepository(AppSettings appSettings) =>
|
||||
_AppSettings = appSettings;
|
||||
|
||||
void IAzureDevOpsRepository.Save(PollValue pollValue)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(pollValue.Id);
|
||||
ArgumentNullException.ThrowIfNull(pollValue.Page);
|
||||
string directory = Path.Combine(_AppSettings.AzureDevOpsDestinationDirectory, pollValue.Page, pollValue.Id.Value.ToString());
|
||||
if (!Directory.Exists(directory))
|
||||
_ = Directory.CreateDirectory(directory);
|
||||
File.WriteAllText(Path.Combine(directory, $"{pollValue.Time}.json"), pollValue.Json is null ? string.Empty : pollValue.Json);
|
||||
}
|
||||
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
using OI.Metrology.Shared.DataModels;
|
||||
using OI.Metrology.Shared.Models;
|
||||
using OI.Metrology.Shared.Models.Stateless;
|
||||
using OI.Metrology.Wafer.Counter.Models;
|
||||
@ -82,7 +83,7 @@ public class FileShareRepository : IFileShareRepository
|
||||
return result;
|
||||
}
|
||||
|
||||
List<NginxFileSystemSortable> IFileShareRepository.GetNginxFileSystemSortableCollection(HttpClient httpClient, Uri uri, string? endsWith)
|
||||
ReadOnlyCollection<NginxFileSystemSortable> IFileShareRepository.GetNginxFileSystemSortableCollection(HttpClient httpClient, Uri uri, string? endsWith)
|
||||
{
|
||||
List<NginxFileSystemSortable> results = new();
|
||||
Task<HttpResponseMessage> httpResponseMessage = httpClient.GetAsync(uri);
|
||||
@ -101,12 +102,12 @@ public class FileShareRepository : IFileShareRepository
|
||||
results.Add(nginxFileSystemSortable);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
return new(results);
|
||||
}
|
||||
|
||||
private static ReadOnlyCollection<string> GetValidDirectories(string equipmentDirectory, DateTime startDateTime, DateTime endDateTime)
|
||||
{
|
||||
List<string> results = [equipmentDirectory];
|
||||
List<string> results = [];
|
||||
DateTime dateTime;
|
||||
string weekOfYear;
|
||||
Calendar calendar = new CultureInfo("en-US").Calendar;
|
||||
@ -121,27 +122,37 @@ public class FileShareRepository : IFileShareRepository
|
||||
return new(results);
|
||||
}
|
||||
|
||||
private static ReadOnlyCollection<FileInfo> GetCollection(CharacterizationParameters characterizationParameters, string searchPattern, DateTime startDateTime, DateTime endDateTime, ReadOnlyCollection<string> validDirectories)
|
||||
private static ReadOnlyCollection<string> GetFiles(CharacterizationParameters characterizationParameters, string equipmentDirectory, string searchPattern, DateTime startDateTime, DateTime endDateTime, ReadOnlyCollection<string> validDirectories)
|
||||
{
|
||||
FileInfo[] results;
|
||||
List<string> results = [];
|
||||
string[] directories;
|
||||
List<FileInfo> collection = [];
|
||||
string startDateTimeTicks = startDateTime.Ticks.ToString();
|
||||
string delta = (endDateTime.Ticks - startDateTime.Ticks).ToString();
|
||||
string ticksSearchPattern = $"{startDateTime.Ticks.ToString()[..(startDateTimeTicks.Length - delta.Length + 1)]}*";
|
||||
string ticksSearchPattern = $"{startDateTime.Ticks.ToString()[..(startDateTimeTicks.Length - delta.Length - 1)]}*";
|
||||
bool check = characterizationParameters.SearchPattern is null || searchPattern == characterizationParameters.SearchPattern;
|
||||
if (check)
|
||||
results.AddRange(Directory.GetFiles(equipmentDirectory, searchPattern, SearchOption.AllDirectories));
|
||||
foreach (string validDirectory in validDirectories)
|
||||
{
|
||||
if (string.IsNullOrEmpty(validDirectory) || !Directory.Exists(validDirectory))
|
||||
continue;
|
||||
if (characterizationParameters.SearchPattern is null || searchPattern == characterizationParameters.SearchPattern)
|
||||
collection.AddRange(Directory.GetFiles(validDirectory, searchPattern, SearchOption.AllDirectories).Select(l => new FileInfo(l)));
|
||||
if (check)
|
||||
results.AddRange(Directory.GetFiles(validDirectory, searchPattern, SearchOption.AllDirectories));
|
||||
else
|
||||
{
|
||||
directories = Directory.GetDirectories(validDirectory, ticksSearchPattern, SearchOption.AllDirectories);
|
||||
foreach (string directory in directories)
|
||||
collection.AddRange(Directory.GetFiles(directory, searchPattern, SearchOption.TopDirectoryOnly).Select(l => new FileInfo(l)));
|
||||
results.AddRange(Directory.GetFiles(directory, searchPattern, SearchOption.TopDirectoryOnly));
|
||||
}
|
||||
}
|
||||
return new(results);
|
||||
}
|
||||
|
||||
private static ReadOnlyCollection<FileInfo> GetCollection(CharacterizationParameters characterizationParameters, string equipmentDirectory, string searchPattern, DateTime startDateTime, DateTime endDateTime, ReadOnlyCollection<string> validDirectories)
|
||||
{
|
||||
FileInfo[] results;
|
||||
ReadOnlyCollection<string> files = GetFiles(characterizationParameters, equipmentDirectory, searchPattern, startDateTime, endDateTime, validDirectories);
|
||||
FileInfo[] collection = files.Select(l => new FileInfo(l)).ToArray();
|
||||
results = (from l in collection where l.LastWriteTime >= startDateTime && l.LastWriteTime <= endDateTime orderby l.LastWriteTime descending select l).ToArray();
|
||||
return new(results);
|
||||
}
|
||||
@ -193,7 +204,7 @@ public class FileShareRepository : IFileShareRepository
|
||||
DateTime endDateTime = characterizationParameters.EndTime is null ? DateTime.Now : DateTime.Parse(characterizationParameters.EndTime).ToLocalTime();
|
||||
DateTime startDateTime = characterizationParameters.StartTime is null ? DateTime.Now.AddHours(-6) : DateTime.Parse(characterizationParameters.StartTime).ToLocalTime();
|
||||
ReadOnlyCollection<string> validDirectories = GetValidDirectories(equipmentDirectory, startDateTime, endDateTime);
|
||||
ReadOnlyCollection<FileInfo> collection = GetCollection(characterizationParameters, searchPattern, startDateTime, endDateTime, validDirectories);
|
||||
ReadOnlyCollection<FileInfo> collection = GetCollection(characterizationParameters, equipmentDirectory, searchPattern, startDateTime, endDateTime, validDirectories);
|
||||
foreach (FileInfo fileInfo in collection)
|
||||
{
|
||||
if (string.IsNullOrEmpty(fileInfo.DirectoryName))
|
||||
@ -218,7 +229,7 @@ public class FileShareRepository : IFileShareRepository
|
||||
return new(results);
|
||||
}
|
||||
|
||||
List<CharacterizationInfo> IFileShareRepository.GetArchiveData(CharacterizationParameters characterizationParameters)
|
||||
ReadOnlyCollection<CharacterizationInfo> IFileShareRepository.GetArchiveData(CharacterizationParameters characterizationParameters)
|
||||
{
|
||||
List<CharacterizationInfo> results = [];
|
||||
string searchPattern;
|
||||
@ -240,4 +251,23 @@ public class FileShareRepository : IFileShareRepository
|
||||
return new(results);
|
||||
}
|
||||
|
||||
ReadOnlyCollection<ToolTypeNameId> IFileShareRepository.GetEquipmentIds()
|
||||
{
|
||||
List<ToolTypeNameId> results = [];
|
||||
string directoryName;
|
||||
ToolTypeNameId toolTypeNameId;
|
||||
string archiveDirectory = Path.Combine(_AppSettings.EcCharacterizationSi, "Archive");
|
||||
string[] directories = Directory.GetDirectories(archiveDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
string[] fileNames = Directory.GetFiles(archiveDirectory, "*.json", SearchOption.TopDirectoryOnly).Select(l => Path.GetFileNameWithoutExtension(l)).ToArray();
|
||||
for (int i = 0; i < directories.Length; i++)
|
||||
{
|
||||
directoryName = Path.GetFileName(directories[i]);
|
||||
if (!fileNames.Contains(directoryName))
|
||||
continue;
|
||||
toolTypeNameId = new() { ID = i, ToolTypeName = directoryName };
|
||||
results.Add(toolTypeNameId);
|
||||
}
|
||||
return new(results);
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,9 @@
|
||||
using OI.Metrology.Shared.DataModels;
|
||||
using OI.Metrology.Shared.Models;
|
||||
using OI.Metrology.Shared.Models.Stateless;
|
||||
using OI.Metrology.Wafer.Counter.Helper;
|
||||
using OI.Metrology.Wafer.Counter.Models;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Text.RegularExpressions;
|
||||
@ -32,17 +34,25 @@ public class WaferCounterRepository : IWaferCounterRepository
|
||||
_RepositoryName = nameof(WaferCounterRepository)[..^10];
|
||||
}
|
||||
|
||||
private void MoveFile(string area, string waferSize, string windowsFileSystemSafeText, string waferSizeDirectory, NginxFileSystemSortable nginxFileSystemSortable)
|
||||
private void MoveFile(string area, string waferSize, WaferCounter? waferCounter, string windowsFileSystemSafeText, string waferSizeDirectory, NginxFileSystemSortable nginxFileSystemSortable)
|
||||
{
|
||||
string equipmentId = $"{area}-{waferSize}";
|
||||
WaferCounterArchive waferCounterArchive = new()
|
||||
{
|
||||
Date = nginxFileSystemSortable.DateTime,
|
||||
MesEntity = equipmentId,
|
||||
RDS = windowsFileSystemSafeText,
|
||||
SlotMap = waferCounter?.SlotMap,
|
||||
Text = waferCounter?.Text,
|
||||
Total = waferCounter?.Total,
|
||||
};
|
||||
Calendar calendar = new CultureInfo("en-US").Calendar;
|
||||
string from = Path.Combine(waferSizeDirectory, nginxFileSystemSortable.Name);
|
||||
string archive = Path.Combine(_AppSettings.EcCharacterizationSi, "Archive", equipmentId);
|
||||
HeaderCommon headerCommon = new() { RDS = windowsFileSystemSafeText, MesEntity = equipmentId };
|
||||
string weekOfYear = $"{nginxFileSystemSortable.DateTime:yyyy}_Week_{calendar.GetWeekOfYear(nginxFileSystemSortable.DateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday):00}";
|
||||
string directory = Path.Combine(archive, weekOfYear, nginxFileSystemSortable.DateTime.ToString("yyyy-MM-dd"), windowsFileSystemSafeText);
|
||||
string file = Path.Combine(directory, nginxFileSystemSortable.DateTime.Ticks.ToString(), $"{nginxFileSystemSortable.Name}.json");
|
||||
string json = JsonSerializer.Serialize(headerCommon, new JsonSerializerOptions() { WriteIndented = true });
|
||||
string json = JsonSerializer.Serialize(waferCounterArchive, WaferCounterArchiveSourceGenerationContext.Default.WaferCounterArchive);
|
||||
_FileShareRepository.FileWrite(file, json);
|
||||
string to = Path.Combine(directory, nginxFileSystemSortable.Name);
|
||||
_FileShareRepository.MoveFile(from, to);
|
||||
@ -145,10 +155,12 @@ public class WaferCounterRepository : IWaferCounterRepository
|
||||
{
|
||||
List<NginxFileSystemSortable> results = new();
|
||||
DateTime dateTime = DateTime.Now;
|
||||
ReadOnlyCollection<NginxFileSystemSortable> collection;
|
||||
long ticks = dateTime.AddSeconds(_AppSettings.WaferCounterTwoFileSecondsWait).Ticks;
|
||||
for (int i = 0; i < int.MaxValue; i++)
|
||||
{
|
||||
results = _FileShareRepository.GetNginxFileSystemSortableCollection(httpClient, waferSizeUri, ".wc");
|
||||
collection = _FileShareRepository.GetNginxFileSystemSortableCollection(httpClient, waferSizeUri, ".wc");
|
||||
results.AddRange(collection);
|
||||
if (results.Count > 0 || DateTime.Now.Ticks > ticks)
|
||||
break;
|
||||
Thread.Sleep(250);
|
||||
@ -197,7 +209,7 @@ public class WaferCounterRepository : IWaferCounterRepository
|
||||
string windowsFileSystemSafeText = _Regex.Replace(text, ".");
|
||||
result = GetLastQuantityAndSlotMap(waferSize, httpClient, nginxFileSystemSortableCollection[0]);
|
||||
for (int i = 0; i < nginxFileSystemSortableCollection.Count; i++)
|
||||
MoveFile(area, waferSize, windowsFileSystemSafeText, waferSizeDirectory, nginxFileSystemSortableCollection[i]);
|
||||
MoveFile(area, waferSize, result, windowsFileSystemSafeText, waferSizeDirectory, nginxFileSystemSortableCollection[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
Reference in New Issue
Block a user