|
|
|
@ -33,8 +33,6 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
protected readonly bool _IsDuplicator;
|
|
|
|
|
protected readonly Calendar _Calendar;
|
|
|
|
|
protected readonly bool _IsSourceTimer;
|
|
|
|
|
protected readonly string _VillachPath;
|
|
|
|
|
protected readonly string _ProgressPath;
|
|
|
|
|
protected readonly string _EquipmentType;
|
|
|
|
|
protected readonly long _BreakAfterSeconds;
|
|
|
|
|
protected readonly string _ExceptionSubject;
|
|
|
|
@ -46,6 +44,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
protected readonly string _CellInstanceConnectionNameBase;
|
|
|
|
|
protected readonly Dictionary<string, List<long>> _DummyRuns;
|
|
|
|
|
protected readonly Dictionary<string, string> _FileParameter;
|
|
|
|
|
protected readonly Dictionary<long, List<string>> _StaticRuns;
|
|
|
|
|
protected readonly string _ParameterizedModelObjectDefinitionType;
|
|
|
|
|
protected readonly FileConnectorConfiguration _FileConnectorConfiguration;
|
|
|
|
|
protected readonly IList<ModelObjectParameterDefinition> _ModelObjectParameterDefinitions;
|
|
|
|
@ -63,12 +62,13 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
string Properties.IFileRead.CellInstanceConnectionName => _CellInstanceConnectionName;
|
|
|
|
|
string Properties.IFileRead.ParameterizedModelObjectDefinitionType => _ParameterizedModelObjectDefinitionType;
|
|
|
|
|
|
|
|
|
|
public FileRead(IDescription description, bool isEvent, ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted)
|
|
|
|
|
public FileRead(IDescription description, bool isEvent, ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<string>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted)
|
|
|
|
|
{
|
|
|
|
|
_SMTP = smtp;
|
|
|
|
|
_IsEvent = isEvent;
|
|
|
|
|
_DummyRuns = dummyRuns;
|
|
|
|
|
_LastTicksDuration = 0;
|
|
|
|
|
_StaticRuns = staticRuns;
|
|
|
|
|
_IsEAFHosted = isEAFHosted;
|
|
|
|
|
_Description = description;
|
|
|
|
|
_FileParameter = fileParameter;
|
|
|
|
@ -84,6 +84,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
_IsSourceTimer = fileConnectorConfiguration.SourceFileFilter.StartsWith("*Timer.txt");
|
|
|
|
|
string cellInstanceConnectionNameBase = cellInstanceConnectionName.Replace("-", string.Empty);
|
|
|
|
|
_Hyphens = cellInstanceConnectionName.Length - cellInstanceConnectionNameBase.Length;
|
|
|
|
|
_TracePath = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Path.Trace");
|
|
|
|
|
_ExceptionSubject = string.Concat("Exception:", _CellInstanceConnectionName, _FileConnectorConfiguration?.SourceDirectoryCloaking);
|
|
|
|
|
string suffix;
|
|
|
|
|
string[] segments = _ParameterizedModelObjectDefinitionType.Split('.');
|
|
|
|
@ -111,16 +112,10 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
// if (!string.IsNullOrEmpty(equipmentDictionaryName) && isEvent)
|
|
|
|
|
// throw new Exception(cellInstanceConnectionName);
|
|
|
|
|
}
|
|
|
|
|
ModelObjectParameterDefinition[] paths = GetProperties(cellInstanceConnectionName, modelObjectParameters, "Path.");
|
|
|
|
|
if (paths.Length < 4)
|
|
|
|
|
throw new Exception(cellInstanceConnectionName);
|
|
|
|
|
if (isDuplicator)
|
|
|
|
|
_MesEntity = string.Empty;
|
|
|
|
|
else
|
|
|
|
|
_MesEntity = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, string.Concat("CellInstance.", cellInstanceName, ".Alias"));
|
|
|
|
|
_TracePath = (from l in paths where l.Name.EndsWith("Trace") select l.Value).FirstOrDefault();
|
|
|
|
|
_VillachPath = (from l in paths where l.Name.EndsWith("Villach") select l.Value).FirstOrDefault();
|
|
|
|
|
_ProgressPath = (from l in paths where l.Name.EndsWith("Progress") select l.Value).FirstOrDefault();
|
|
|
|
|
_EventName = eventName;
|
|
|
|
|
_EventNameFileRead = eventNameFileRead;
|
|
|
|
|
_EquipmentType = parameterizedModelObjectDefinitionTypeAppended;
|
|
|
|
@ -130,9 +125,11 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (_FileConnectorConfiguration.FileScanningOption == FileConnectorConfiguration.FileScanningOptionEnum.TimeBased)
|
|
|
|
|
breakAfterSeconds = 360;
|
|
|
|
|
else
|
|
|
|
|
breakAfterSeconds = Math.Abs(_FileConnectorConfiguration.FileHandleTimeout.Value);
|
|
|
|
|
else if (_FileConnectorConfiguration.FileScanningOption == FileConnectorConfiguration.FileScanningOptionEnum.FileWatcher)
|
|
|
|
|
breakAfterSeconds = Math.Abs(_FileConnectorConfiguration.FileScanningIntervalInSeconds.Value);
|
|
|
|
|
else
|
|
|
|
|
throw new Exception();
|
|
|
|
|
}
|
|
|
|
|
_BreakAfterSeconds = breakAfterSeconds;
|
|
|
|
|
UpdateLastTicksDuration(breakAfterSeconds * 10000000);
|
|
|
|
@ -142,13 +139,13 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
throw new Exception("_Configuration is empty?");
|
|
|
|
|
if (_FileConnectorConfiguration.TargetFileLocation.Contains('%') || _FileConnectorConfiguration.ErrorTargetFileLocation.Contains('%'))
|
|
|
|
|
throw new Exception("_Configuration is incorrect for a duplicator!");
|
|
|
|
|
if (_FileConnectorConfiguration is not null)
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(_FileConnectorConfiguration.SourceDirectoryCloaking))
|
|
|
|
|
throw new Exception("SourceDirectoryCloaking is empty?");
|
|
|
|
|
if (!_FileConnectorConfiguration.SourceDirectoryCloaking.StartsWith("~"))
|
|
|
|
|
throw new Exception("SourceDirectoryCloaking is incorrect for a duplicator!");
|
|
|
|
|
}
|
|
|
|
|
// if (_FileConnectorConfiguration is not null)
|
|
|
|
|
// {
|
|
|
|
|
// if (string.IsNullOrEmpty(_FileConnectorConfiguration.SourceDirectoryCloaking))
|
|
|
|
|
// throw new Exception("SourceDirectoryCloaking is empty?");
|
|
|
|
|
// if (!_FileConnectorConfiguration.SourceDirectoryCloaking.StartsWith("~"))
|
|
|
|
|
// throw new Exception("SourceDirectoryCloaking is incorrect for a duplicator!");
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -216,35 +213,16 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void CreateProgressDirectory(string[] exceptionLines)
|
|
|
|
|
private void WriteAllLines(string to, string[] exceptionLines)
|
|
|
|
|
{
|
|
|
|
|
string progressDirectory;
|
|
|
|
|
StringBuilder stringBuilder = new();
|
|
|
|
|
if (_Hyphens == 0)
|
|
|
|
|
progressDirectory = Path.Combine(_ProgressPath, _CellInstanceConnectionName);
|
|
|
|
|
else
|
|
|
|
|
string fileName = string.Concat(to, @"\readme.txt");
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
_ = stringBuilder.Clear();
|
|
|
|
|
for (int i = 0; i < _Hyphens; i++)
|
|
|
|
|
{
|
|
|
|
|
if (i > 0 && (i % 2) == 0)
|
|
|
|
|
_ = stringBuilder.Append(' ');
|
|
|
|
|
_ = stringBuilder.Append('-');
|
|
|
|
|
}
|
|
|
|
|
progressDirectory = string.Concat(_ProgressPath, @"\", (_Hyphens + 1).ToString().PadLeft(2, '0'), " ", stringBuilder).Trim();
|
|
|
|
|
}
|
|
|
|
|
DateTime dateTime = DateTime.Now;
|
|
|
|
|
string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
|
|
|
|
|
progressDirectory = string.Concat(progressDirectory, @"\", dateTime.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.MID, "_", _Logistics.Sequence, "_", DateTime.Now.Ticks - _Logistics.Sequence);
|
|
|
|
|
if (!Directory.Exists(progressDirectory))
|
|
|
|
|
_ = Directory.CreateDirectory(progressDirectory);
|
|
|
|
|
if (exceptionLines is not null)
|
|
|
|
|
{
|
|
|
|
|
string fileName = string.Concat(progressDirectory, @"\readme.txt");
|
|
|
|
|
try
|
|
|
|
|
{ File.WriteAllLines(fileName, exceptionLines); }
|
|
|
|
|
catch (Exception) { }
|
|
|
|
|
if (!Directory.Exists(to))
|
|
|
|
|
_ = Directory.CreateDirectory(to);
|
|
|
|
|
File.WriteAllLines(fileName, exceptionLines);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex) { _Log.Error(ex.Message); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected string[] Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, string to, string from, string resolvedFileLocation, Exception exception)
|
|
|
|
@ -258,7 +236,8 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
results = new string[] { _Logistics.Sequence.ToString(), _Logistics.ReportFullPath, from, resolvedFileLocation, to, string.Empty, string.Empty, exception.Message, string.Empty, string.Empty, exception.StackTrace };
|
|
|
|
|
Shared0449(to, results);
|
|
|
|
|
if (!_IsDuplicator)
|
|
|
|
|
WriteAllLines(to, results);
|
|
|
|
|
}
|
|
|
|
|
if (extractResults is not null && extractResults.Item4 is not null && extractResults.Item4.Any())
|
|
|
|
|
{
|
|
|
|
@ -279,64 +258,6 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static IEnumerable<string> GetDirectoriesRecursively(string path, string directoryNameSegment = null)
|
|
|
|
|
{
|
|
|
|
|
Queue<string> queue = new();
|
|
|
|
|
queue.Enqueue(path);
|
|
|
|
|
while (queue.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
path = queue.Dequeue();
|
|
|
|
|
foreach (string subDirectory in Directory.GetDirectories(path))
|
|
|
|
|
{
|
|
|
|
|
queue.Enqueue(subDirectory);
|
|
|
|
|
if (string.IsNullOrEmpty(directoryNameSegment) || Path.GetFileName(subDirectory).Contains(directoryNameSegment))
|
|
|
|
|
yield return subDirectory;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected string GetProcessedDirectory(string progressPath, Logistics logistics, DateTime dateTime, string duplicateDirectory)
|
|
|
|
|
{
|
|
|
|
|
string result = duplicateDirectory;
|
|
|
|
|
string logisticsSequence = logistics.Sequence.ToString();
|
|
|
|
|
string[] matchDirectories;
|
|
|
|
|
if (!_IsEAFHosted)
|
|
|
|
|
matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(logistics.ReportFullPath)) };
|
|
|
|
|
else
|
|
|
|
|
matchDirectories = new string[] { GetDirectoriesRecursively(Path.GetDirectoryName(progressPath), logisticsSequence).FirstOrDefault() };
|
|
|
|
|
if (matchDirectories.Length == 0 || string.IsNullOrEmpty(matchDirectories[0]))
|
|
|
|
|
matchDirectories = Directory.GetDirectories(duplicateDirectory, string.Concat('*', logisticsSequence, '*'), SearchOption.AllDirectories);
|
|
|
|
|
if ((matchDirectories is null) || matchDirectories.Length != 1)
|
|
|
|
|
throw new Exception("Didn't find directory by logistics sequence");
|
|
|
|
|
if (!matchDirectories[0].Contains("_processed"))
|
|
|
|
|
{
|
|
|
|
|
result = string.Concat(matchDirectories[0].Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0], logistics.DateTimeFromSequence.ToString("yyyy-MM-dd_hh;mm_tt_"), dateTime.Ticks - logistics.Sequence, "_processed");
|
|
|
|
|
Directory.Move(matchDirectories[0], result);
|
|
|
|
|
result = string.Concat(result, @"\", logistics.Sequence);
|
|
|
|
|
if (!Directory.Exists(result))
|
|
|
|
|
_ = Directory.CreateDirectory(result);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected string WriteScopeInfo(string progressPath, Logistics logistics, DateTime dateTime, string duplicateDirectory, List<Tuple<Properties.IScopeInfo, string>> tuples)
|
|
|
|
|
{
|
|
|
|
|
string result = GetProcessedDirectory(progressPath, logistics, dateTime, duplicateDirectory);
|
|
|
|
|
string tupleFile;
|
|
|
|
|
string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath);
|
|
|
|
|
string duplicateFile = string.Concat(result, @"\", fileName, ".pdsf");
|
|
|
|
|
foreach (Tuple<Properties.IScopeInfo, string> tuple in tuples)
|
|
|
|
|
{
|
|
|
|
|
if (tuple.Item1.FileName.StartsWith(@"\"))
|
|
|
|
|
tupleFile = tuple.Item1.FileName;
|
|
|
|
|
else
|
|
|
|
|
tupleFile = string.Concat(result, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc");
|
|
|
|
|
File.WriteAllText(tupleFile, tuple.Item2);
|
|
|
|
|
}
|
|
|
|
|
File.Copy(logistics.ReportFullPath, duplicateFile, overwrite: true);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static string GetTupleFile(Logistics logistics, Properties.IScopeInfo scopeInfo, string duplicateDirectory)
|
|
|
|
|
{
|
|
|
|
|
string result;
|
|
|
|
@ -369,15 +290,15 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void WaitForFileConsumption(string sourceDirectoryCloaking, Logistics logistics, DateTime dateTime, string successDirectory, string duplicateDirectory, string duplicateFile, List<Tuple<Properties.IScopeInfo, string>> tuples)
|
|
|
|
|
protected void WaitForFileConsumption(string sourceDirectoryCloaking, Logistics logistics, DateTime dateTime, string successDirectory, string duplicateDirectory, string duplicateFile, List<(Properties.IScopeInfo, string)> tuples)
|
|
|
|
|
{
|
|
|
|
|
bool check;
|
|
|
|
|
long preWait;
|
|
|
|
|
string tupleFile;
|
|
|
|
|
List<int> consumedFileIndices = new();
|
|
|
|
|
List<string> duplicateFiles = new();
|
|
|
|
|
bool moreThanAnHour = (_BreakAfterSeconds > 3600);
|
|
|
|
|
StringBuilder stringBuilder = new();
|
|
|
|
|
List<int> consumedFileIndices = new();
|
|
|
|
|
bool moreThanAnHour = _BreakAfterSeconds > 3600;
|
|
|
|
|
long breakAfter = dateTime.AddSeconds(_BreakAfterSeconds).Ticks;
|
|
|
|
|
if (moreThanAnHour)
|
|
|
|
|
preWait = dateTime.AddSeconds(30).Ticks;
|
|
|
|
@ -387,16 +308,16 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
duplicateFiles.Add(duplicateFile);
|
|
|
|
|
string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath);
|
|
|
|
|
string successFile = string.Concat(successDirectory, @"\", Path.GetFileName(logistics.ReportFullPath));
|
|
|
|
|
foreach (Tuple<Properties.IScopeInfo, string> tuple in tuples)
|
|
|
|
|
foreach ((Properties.IScopeInfo scopeInfo, string text) in tuples)
|
|
|
|
|
{
|
|
|
|
|
if (tuple.Item1.FileName.StartsWith(@"\"))
|
|
|
|
|
tupleFile = tuple.Item1.FileName;
|
|
|
|
|
else if (!tuple.Item1.FileName.Contains('%'))
|
|
|
|
|
tupleFile = string.Concat(duplicateDirectory, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc");
|
|
|
|
|
if (scopeInfo.FileName.StartsWith(@"\"))
|
|
|
|
|
tupleFile = scopeInfo.FileName;
|
|
|
|
|
else if (!scopeInfo.FileName.Contains('%'))
|
|
|
|
|
tupleFile = string.Concat(duplicateDirectory, @"\", fileName, "_", scopeInfo.FileNameWithoutExtension, ".pdsfc");
|
|
|
|
|
else
|
|
|
|
|
tupleFile = GetTupleFile(logistics, tuple.Item1, duplicateDirectory);
|
|
|
|
|
tupleFile = GetTupleFile(logistics, scopeInfo, duplicateDirectory);
|
|
|
|
|
duplicateFiles.Add(tupleFile);
|
|
|
|
|
File.WriteAllText(tupleFile, tuple.Item2);
|
|
|
|
|
File.WriteAllText(tupleFile, text);
|
|
|
|
|
}
|
|
|
|
|
for (short i = 0; i < short.MaxValue; i++)
|
|
|
|
|
{
|
|
|
|
@ -410,7 +331,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
check = (string.IsNullOrEmpty(successDirectory) || File.Exists(successFile));
|
|
|
|
|
check = string.IsNullOrEmpty(successDirectory) || File.Exists(successFile);
|
|
|
|
|
if (check)
|
|
|
|
|
{
|
|
|
|
|
consumedFileIndices.Clear();
|
|
|
|
@ -482,7 +403,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
{
|
|
|
|
|
string directory;
|
|
|
|
|
if (!_CellInstanceConnectionName.StartsWith(_CellInstanceName) && _CellInstanceConnectionNameBase == _EquipmentType)
|
|
|
|
|
directory = Path.Combine(_VillachPath, _EquipmentType, "Target");
|
|
|
|
|
directory = Path.Combine(_TracePath, _EquipmentType, "Target", _CellInstanceName, _CellInstanceConnectionName);
|
|
|
|
|
else
|
|
|
|
|
directory = Path.Combine(_TracePath, _EquipmentType, "Source", _CellInstanceName, _CellInstanceConnectionName);
|
|
|
|
|
if (!Directory.Exists(directory))
|
|
|
|
@ -498,14 +419,8 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception)
|
|
|
|
|
protected void Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults)
|
|
|
|
|
{
|
|
|
|
|
bool isErrorFile = exception is not null;
|
|
|
|
|
if (!isErrorFile && _IsDuplicator)
|
|
|
|
|
{
|
|
|
|
|
if (_IsEAFHosted && !string.IsNullOrEmpty(_ProgressPath))
|
|
|
|
|
CreateProgressDirectory(exceptionLines: null);
|
|
|
|
|
}
|
|
|
|
|
if (!_IsEAFHosted)
|
|
|
|
|
{
|
|
|
|
|
string to;
|
|
|
|
@ -583,20 +498,6 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static Dictionary<Test, List<Properties.IDescription>> GetKeyValuePairs(List<Properties.IDescription> descriptions)
|
|
|
|
|
{
|
|
|
|
|
Dictionary<Test, List<Properties.IDescription>> results = new();
|
|
|
|
|
Test testKey;
|
|
|
|
|
for (int i = 0; i < descriptions.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
testKey = (Test)descriptions[i].Test;
|
|
|
|
|
if (!results.ContainsKey(testKey))
|
|
|
|
|
results.Add(testKey, new List<Properties.IDescription>());
|
|
|
|
|
results[testKey].Add(descriptions[i]);
|
|
|
|
|
}
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static List<Properties.IDescription> GetDuplicatorDescriptions(JsonElement[] jsonElements)
|
|
|
|
|
{
|
|
|
|
|
List<Properties.IDescription> results = new();
|
|
|
|
@ -612,34 +513,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static Tuple<Test[], Dictionary<Test, List<Properties.IDescription>>> GetTuple(IFileRead fileRead, IEnumerable<Properties.IDescription> descriptions, bool extra = false)
|
|
|
|
|
{
|
|
|
|
|
Tuple<Test[], Dictionary<Test, List<Properties.IDescription>>> result;
|
|
|
|
|
Dictionary<Test, List<Properties.IDescription>> keyValuePairs = GetKeyValuePairs(descriptions.ToList());
|
|
|
|
|
Test[] tests = (from l in keyValuePairs select l.Key).ToArray();
|
|
|
|
|
fileRead.CheckTests(tests, extra);
|
|
|
|
|
result = new Tuple<Test[], Dictionary<Test, List<Properties.IDescription>>>(tests, keyValuePairs);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void Shared0449(string to, string[] exceptionLines)
|
|
|
|
|
{
|
|
|
|
|
if (_IsDuplicator)
|
|
|
|
|
CreateProgressDirectory(exceptionLines: null);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
string fileName = string.Concat(to, @"\readme.txt");
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (!Directory.Exists(to))
|
|
|
|
|
_ = Directory.CreateDirectory(to);
|
|
|
|
|
File.WriteAllLines(fileName, exceptionLines);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex) { _Log.Error(ex.Message); }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void Shared1880(string itemFile, List<string> directories, FileInfo sourceFile, bool isErrorFile)
|
|
|
|
|
private void Shared1880(string itemFile, List<string> directories, FileInfo sourceFile, bool isErrorFile)
|
|
|
|
|
{
|
|
|
|
|
string itemDirectory;
|
|
|
|
|
directories.Add(Path.GetDirectoryName(sourceFile.FullName));
|
|
|
|
@ -674,7 +548,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void Shared1811(string to, FileInfo sourceFile)
|
|
|
|
|
private void Shared1811(string to, FileInfo sourceFile)
|
|
|
|
|
{
|
|
|
|
|
if (!_IsDuplicator && _FileConnectorConfiguration.SourceFileFilter != "*" && sourceFile.Exists && sourceFile.Length < _MinFileLength)
|
|
|
|
|
{
|
|
|
|
@ -682,7 +556,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
string jobIdDirectory = Path.GetDirectoryName(to);
|
|
|
|
|
DateTime dateTime = DateTime.Now.AddMinutes(-15);
|
|
|
|
|
string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
|
|
|
|
|
string weekDirectory = string.Concat(_Logistics.DateTimeFromSequence.ToString("yyyy"), "_Week_", weekOfYear, @"\", _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd"));
|
|
|
|
|
string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}{@"\"}{_Logistics.DateTimeFromSequence:yyyy-MM-dd}";
|
|
|
|
|
string destinationDirectory = string.Concat(jobIdDirectory, @"\_ Ignore 100 bytes\", weekDirectory, @"\", directoryName);
|
|
|
|
|
if (!Directory.Exists(destinationDirectory))
|
|
|
|
|
_ = Directory.CreateDirectory(destinationDirectory);
|
|
|
|
@ -711,7 +585,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void Shared0231(List<string> directories)
|
|
|
|
|
private void Shared0231(List<string> directories)
|
|
|
|
|
{
|
|
|
|
|
if (_FileConnectorConfiguration.PostProcessingMode != FileConnectorConfiguration.PostProcessingModeEnum.Copy)
|
|
|
|
|
{
|
|
|
|
@ -723,7 +597,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void Shared0413(DateTime dateTime, bool isDummyRun, string successDirectory, string duplicateDirectory, List<Tuple<Properties.IScopeInfo, string>> tuples, string duplicateFile)
|
|
|
|
|
protected void Shared0413(DateTime dateTime, bool isDummyRun, string successDirectory, string duplicateDirectory, List<(Properties.IScopeInfo, string)> tuples, string duplicateFile)
|
|
|
|
|
{
|
|
|
|
|
if (!isDummyRun && _IsEAFHosted)
|
|
|
|
|
WaitForFileConsumption(_FileConnectorConfiguration.SourceDirectoryCloaking, _Logistics, dateTime, successDirectory, duplicateDirectory, duplicateFile, tuples);
|
|
|
|
@ -739,75 +613,33 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static void Shared0607(string reportFullPath, string duplicateDirectory, string logisticsSequence, string destinationDirectory)
|
|
|
|
|
internal static string GetJobIdParentDirectory(string directory)
|
|
|
|
|
{
|
|
|
|
|
if (destinationDirectory == duplicateDirectory)
|
|
|
|
|
throw new Exception("Check Target File Folder for %LotIDWithLogisticsSequence%_in process on CI (not Duplicator)");
|
|
|
|
|
if (destinationDirectory.EndsWith(logisticsSequence))
|
|
|
|
|
destinationDirectory = Path.GetDirectoryName(destinationDirectory);
|
|
|
|
|
string[] deleteFiles = Directory.GetFiles(destinationDirectory, "*", SearchOption.AllDirectories);
|
|
|
|
|
if (deleteFiles.Length > 250)
|
|
|
|
|
throw new Exception("Safety net!");
|
|
|
|
|
foreach (string file in deleteFiles)
|
|
|
|
|
File.Delete(file);
|
|
|
|
|
Directory.Delete(destinationDirectory, recursive: true);
|
|
|
|
|
File.Delete(reportFullPath);
|
|
|
|
|
string result;
|
|
|
|
|
if (!string.IsNullOrEmpty(Path.GetFileName(directory)))
|
|
|
|
|
result = Path.GetFullPath(Path.GetDirectoryName(Path.GetDirectoryName(directory)));
|
|
|
|
|
else
|
|
|
|
|
result = Path.GetFullPath(Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(directory))));
|
|
|
|
|
if (!Directory.Exists(result))
|
|
|
|
|
_ = Directory.CreateDirectory(result);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected string[] Shared1567(string reportFullPath, List<Tuple<Properties.IScopeInfo, string>> tuples)
|
|
|
|
|
internal string[] GetInProcessDirectory(string jobIdDirectory)
|
|
|
|
|
{
|
|
|
|
|
string[] results;
|
|
|
|
|
string historicalText;
|
|
|
|
|
string logisticsSequence = _Logistics.Sequence.ToString();
|
|
|
|
|
string jobIdDirectory = string.Concat(Path.GetDirectoryName(Path.GetDirectoryName(_FileConnectorConfiguration.TargetFileLocation)), @"\", _Logistics.JobID);
|
|
|
|
|
if (!Directory.Exists(jobIdDirectory))
|
|
|
|
|
_ = Directory.CreateDirectory(jobIdDirectory);
|
|
|
|
|
string[] matchDirectories;
|
|
|
|
|
if (!_IsEAFHosted)
|
|
|
|
|
matchDirectories = new string[] { Path.GetDirectoryName(Path.GetDirectoryName(reportFullPath)) };
|
|
|
|
|
results = new string[] { jobIdDirectory };
|
|
|
|
|
else
|
|
|
|
|
matchDirectories = Directory.GetDirectories(jobIdDirectory, string.Concat(_Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly);
|
|
|
|
|
if ((matchDirectories is null) || matchDirectories.Length != 1)
|
|
|
|
|
throw new Exception("Didn't find directory by logistics sequence");
|
|
|
|
|
string fileName = Path.GetFileNameWithoutExtension(reportFullPath);
|
|
|
|
|
string sequenceDirectory = string.Concat(matchDirectories[0], @"\", logisticsSequence);
|
|
|
|
|
if (!Directory.Exists(sequenceDirectory))
|
|
|
|
|
_ = Directory.CreateDirectory(sequenceDirectory);
|
|
|
|
|
foreach (Tuple<Properties.IScopeInfo, string> tuple in tuples)
|
|
|
|
|
{
|
|
|
|
|
fileName = string.Concat(sequenceDirectory, @"\", fileName, "_", tuple.Item1.FileNameWithoutExtension, ".pdsfc");
|
|
|
|
|
if (_IsEAFHosted)
|
|
|
|
|
File.WriteAllText(fileName, tuple.Item2);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (File.Exists(fileName))
|
|
|
|
|
{
|
|
|
|
|
historicalText = File.ReadAllText(fileName);
|
|
|
|
|
if (tuple.Item2 != historicalText)
|
|
|
|
|
throw new Exception("File doesn't match historical!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
string logisticsSequence = _Logistics.Sequence.ToString();
|
|
|
|
|
results = Directory.GetDirectories(jobIdDirectory, string.Concat(_Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly);
|
|
|
|
|
}
|
|
|
|
|
results = matchDirectories;
|
|
|
|
|
if ((results is null) || results.Length != 1)
|
|
|
|
|
throw new Exception("Didn't find directory by logistics sequence");
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void Shared1277(string reportFullPath, string destinationDirectory, string logisticsSequence, string jobIdDirectory, string json)
|
|
|
|
|
{
|
|
|
|
|
string ecCharacterizationSi = Path.GetDirectoryName(Path.GetDirectoryName(jobIdDirectory));
|
|
|
|
|
string destinationJobIdDirectory = string.Concat(ecCharacterizationSi, @"\Processed\", _Logistics.JobID);
|
|
|
|
|
if (!Directory.Exists(destinationJobIdDirectory))
|
|
|
|
|
_ = Directory.CreateDirectory(destinationJobIdDirectory);
|
|
|
|
|
destinationJobIdDirectory = string.Concat(destinationJobIdDirectory, @"\", Path.GetFileName(destinationDirectory).Split(new string[] { logisticsSequence }, StringSplitOptions.None)[0], _Logistics.DateTimeFromSequence.ToString("yyyy-MM-dd_hh;mm_tt_"), DateTime.Now.Ticks - _Logistics.Sequence);
|
|
|
|
|
string sequenceDirectory = string.Concat(destinationJobIdDirectory, @"\", logisticsSequence);
|
|
|
|
|
string jsonFileName = string.Concat(sequenceDirectory, @"\", Path.GetFileNameWithoutExtension(reportFullPath), ".json");
|
|
|
|
|
Directory.Move(destinationDirectory, destinationJobIdDirectory);
|
|
|
|
|
if (!Directory.Exists(sequenceDirectory))
|
|
|
|
|
_ = Directory.CreateDirectory(sequenceDirectory);
|
|
|
|
|
File.Copy(reportFullPath, string.Concat(sequenceDirectory, @"\", Path.GetFileName(reportFullPath)), overwrite: true);
|
|
|
|
|
File.WriteAllText(jsonFileName, json);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2022-02-14 -> Shared - FileRead
|
|
|
|
|
// 2022-05-13 -> Shared - FileRead
|