This commit is contained in:
Mike Phares 2025-04-10 20:00:02 -07:00
parent 2fc83bb54d
commit 906868540b
36 changed files with 547 additions and 496 deletions

1
.gitignore vendored
View File

@ -338,6 +338,7 @@ ASALocalRun/
!**/.vscode/settings.json !**/.vscode/settings.json
!**/.vscode/tasks.json !**/.vscode/tasks.json
!**/.vscode/mklink.md !**/.vscode/mklink.md
!**/.vscode/*.http
*.lnk *.lnk

View File

@ -0,0 +1,9 @@
@host = https://tfs.intra.infineon.com
@pat = asdf
@ids = 126018, 224543
GET {{host}}/tfs/FactoryIntegration/_apis/wit/workitems?ids={{ids}}&$expand=Relations
Accept: application/json
Authorization: Basic {{pat}}
###

20
Adaptation/.vscode/localhost.http vendored Normal file
View File

@ -0,0 +1,20 @@
@host = http://localhost:8071/
GET {{host}}/api/v1/ado
Accept: application/json
###
POST {{host}}/api/v1/ado
Content-Type: application/json
Accept: application/json
{
"id": 109734,
"machineId": "",
"page": "risk",
"site": "MES",
"time": 1743438398094,
"username": "",
"value": "3"
}

31
Adaptation/.vscode/priority.http vendored Normal file
View File

@ -0,0 +1,31 @@
@host = https://eaf-dev.mes.infineon.com
@page = api/v1/ado/
POST {{host}}/{{page}}/
Accept: application/json
{
"id": "110738",
"machineId": "30ef1b54e075c5370ce74eea2042cb750be659696b170f8758d219a8f9a88e10",
"page": "time",
"site": "MES",
"time": "1744339499677",
"username": "phares",
"value": "3"
}
###
GET {{host}}/{{page}}/
Accept: application/json
{
"id": 109736,
"machineId": "",
"page": "risk",
"site": "MES",
"time": 1744335005066,
"username": "phares",
"value": "2"
}
###

View File

@ -8,6 +8,7 @@
"EQPT", "EQPT",
"headerid", "headerid",
"Idrv", "Idrv",
"Infineon",
"ipdsf", "ipdsf",
"Irng", "Irng",
"ISMTP", "ISMTP",

View File

@ -67,6 +67,8 @@ public class FileRead : Shared.FileRead, IFileRead
} }
private readonly ProcessDataStandardFormatMapping _ProcessDataStandardFormatMapping;
public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, 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) : public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, 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) :
base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null) base(new Description(), false, smtp, fileParameter, cellInstanceName, connectionCount, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: connectionCount is null)
{ {
@ -79,6 +81,12 @@ public class FileRead : Shared.FileRead, IFileRead
throw new Exception(cellInstanceConnectionName); throw new Exception(cellInstanceConnectionName);
if (!_IsDuplicator) if (!_IsDuplicator)
throw new Exception(cellInstanceConnectionName); throw new Exception(cellInstanceConnectionName);
string processDataStandardFormatMappingOldColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Old.Column.Names");
string processDataStandardFormatMappingNewColumnNames = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.New.Column.Names");
string processDataStandardFormatMappingColumnIndices = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Process.Data.Standard.Format.Mapping.Column.Indices");
_ProcessDataStandardFormatMapping = GetProcessDataStandardFormatMapping(processDataStandardFormatMappingOldColumnNames,
processDataStandardFormatMappingNewColumnNames,
processDataStandardFormatMappingColumnIndices);
} }
void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception)
@ -157,7 +165,7 @@ public class FileRead : Shared.FileRead, IFileRead
return results; return results;
} }
private static ProcessDataStandardFormatMapping GetProcessDataStandardFormatMapping() private static ProcessDataStandardFormatMapping GetProcessDataStandardFormatMapping(string processDataStandardFormatMappingOldColumnNames, string processDataStandardFormatMappingNewColumnNames, string processDataStandardFormatMappingColumnIndices)
{ {
ProcessDataStandardFormatMapping result; ProcessDataStandardFormatMapping result;
string[] segmentsB; string[] segmentsB;
@ -167,16 +175,16 @@ public class FileRead : Shared.FileRead, IFileRead
string args5 = "Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,HGCV1"; string args5 = "Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,HGCV1";
string args6 = "RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09,HGCV1"; string args6 = "RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09,HGCV1";
string args7 = "FlatZMean|MeanFlatZ,GradeMean|MeanGrade,NAvgMean|MeanNAvg,NslMean|MeanNsl,PhaseMean|MeanPhase,RhoAvgMean|MeanRhoAvg,RhoslMean|MeanRhosl,RsMean|MeanRs,VdMean|MeanVd,FlatZRadialGradient|RadialGradientFlatZ,GradeRadialGradient|RadialGradientGrade,NAvgRadialGradient|RadialGradientNAvg,NslRadialGradient|RadialGradientNsl,PhaseRadialGradient|RadialGradientPhase,RhoAvgRadialGradient|RadialGradientRhoAvg,RhoslRadialGradient|RadialGradientRhosl,RsRadialGradient|RadialGradientRs,VdRadialGradient|RadialGradientVd,FlatZStdDev|StandardDeviationPercentageFlatZ,GradeStdDev|StandardDeviationPercentageGrade,NAvgStdDev|StandardDeviationPercentageNAvg,NslStdDev|StandardDeviationPercentageNsl,PhaseStdDev|StandardDeviationPercentagePhase,RhoAvgStdDev|StandardDeviationPercentageRhoAvg,RhoslStdDev|StandardDeviationPercentageRhosl,RsStdDev|StandardDeviationPercentageRs,VdStdDev|StandardDeviationPercentageVd,|HGCV1"; string args7 = "FlatZMean|MeanFlatZ,GradeMean|MeanGrade,NAvgMean|MeanNAvg,NslMean|MeanNsl,PhaseMean|MeanPhase,RhoAvgMean|MeanRhoAvg,RhoslMean|MeanRhosl,RsMean|MeanRs,VdMean|MeanVd,FlatZRadialGradient|RadialGradientFlatZ,GradeRadialGradient|RadialGradientGrade,NAvgRadialGradient|RadialGradientNAvg,NslRadialGradient|RadialGradientNsl,PhaseRadialGradient|RadialGradientPhase,RhoAvgRadialGradient|RadialGradientRhoAvg,RhoslRadialGradient|RadialGradientRhosl,RsRadialGradient|RadialGradientRs,VdRadialGradient|RadialGradientVd,FlatZStdDev|StandardDeviationPercentageFlatZ,GradeStdDev|StandardDeviationPercentageGrade,NAvgStdDev|StandardDeviationPercentageNAvg,NslStdDev|StandardDeviationPercentageNsl,PhaseStdDev|StandardDeviationPercentagePhase,RhoAvgStdDev|StandardDeviationPercentageRhoAvg,RhoslStdDev|StandardDeviationPercentageRhosl,RsStdDev|StandardDeviationPercentageRs,VdStdDev|StandardDeviationPercentageVd,|HGCV1";
string args8 = "Time,A_LOGISTICS,B_LOGISTICS,Test,Count,Index,MesEntity,Date,Employee,Lot,PSN,Reactor,Recipe,Area,Folder,HeaderUniqueId,Id,Layer,Model,Pattern,Phase,Plan,RampRate,RDS,SetupFile,StartVoltage,StopVoltage,UniqueId,Wafer,WaferSize,Zone,Ccomp,CondType,FlatZ,FlatZMean,FlatZRadialGradient,FlatZStdDev,GLimit,Grade,GradeMean,GradeRadialGradient,GradeStdDev,NAvg,NAvgMean,NAvgRadialGradient,NAvgStdDev,Nsl,NslMean,NslRadialGradient,NslStdDev,PhaseMean,PhaseRadialGradient,PhaseStdDev,RhoAvg,RhoAvgMean,RhoAvgRadialGradient,RhoAvgStdDev,RhoMethod,Rhosl,RhoslMean,RhoslRadialGradient,RhoslStdDev,RsMean,RsRadialGradient,RsStdDev,Vd,VdMean,VdRadialGradient,VdStdDev,Variation,AreaDeltaFromLastRun,Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09"; // string args8 = "Time,A_LOGISTICS,B_LOGISTICS,Test,Count,Index,MesEntity,Date,Employee,Lot,PSN,Reactor,Recipe,Area,Folder,HeaderUniqueId,Id,Layer,Model,Pattern,Phase,Plan,RampRate,RDS,SetupFile,StartVoltage,StopVoltage,UniqueId,Wafer,WaferSize,Zone,Ccomp,CondType,FlatZ,FlatZMean,FlatZRadialGradient,FlatZStdDev,GLimit,Grade,GradeMean,GradeRadialGradient,GradeStdDev,NAvg,NAvgMean,NAvgRadialGradient,NAvgStdDev,Nsl,NslMean,NslRadialGradient,NslStdDev,PhaseMean,PhaseRadialGradient,PhaseStdDev,RhoAvg,RhoAvgMean,RhoAvgRadialGradient,RhoAvgStdDev,RhoMethod,Rhosl,RhoslMean,RhoslRadialGradient,RhoslStdDev,RsMean,RsRadialGradient,RsStdDev,Vd,VdMean,VdRadialGradient,VdStdDev,Variation,AreaDeltaFromLastRun,Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09";
string args9 = "Time,A_LOGISTICS,B_LOGISTICS,Index,Operator,StartVoltage,Wafer,StopVoltage,Lot,RampRate,Plan,GLimit,Date,Time,SetupFile,WaferSize,Folder,Ccomp,Pattern,Area,CondType,RhoMethod,Model,MeanNAvg,MeanNsl,MeanVd,MeanFlatZ,MeanRhoAvg,MeanRhosl,MeanPhase,MeanGrade,MeanRs,StandardDeviationPercentageNAvg,StandardDeviationPercentageNsl,StandardDeviationPercentageVd,StandardDeviationPercentageFlatZ,StandardDeviationPercentageRhoAvg,StandardDeviationPercentageRhosl,StandardDeviationPercentagePhase,StandardDeviationPercentageGrade,StandardDeviationPercentageRs,RadialGradientNAvg,RadialGradientNsl,RadialGradientVd,RadialGradientFlatZ,RadialGradientRhoAvg,RadialGradientRhosl,RadialGradientPhase,RadialGradientGrade,RadialGradientRs,Site,X,Y,NAvg,RhoAvg,Nsl,Rhosl,Vd,Phase,FlatZ,Grade,XLeft,XRight,BottomY,TopY,RDS,PSN,Reactor,Layer,Zone,Employee,InferredLot,Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09"; // string args9 = "Time,A_LOGISTICS,B_LOGISTICS,Index,Operator,StartVoltage,Wafer,StopVoltage,Lot,RampRate,Plan,GLimit,Date,Time,SetupFile,WaferSize,Folder,Ccomp,Pattern,Area,CondType,RhoMethod,Model,MeanNAvg,MeanNsl,MeanVd,MeanFlatZ,MeanRhoAvg,MeanRhosl,MeanPhase,MeanGrade,MeanRs,StandardDeviationPercentageNAvg,StandardDeviationPercentageNsl,StandardDeviationPercentageVd,StandardDeviationPercentageFlatZ,StandardDeviationPercentageRhoAvg,StandardDeviationPercentageRhosl,StandardDeviationPercentagePhase,StandardDeviationPercentageGrade,StandardDeviationPercentageRs,RadialGradientNAvg,RadialGradientNsl,RadialGradientVd,RadialGradientFlatZ,RadialGradientRhoAvg,RadialGradientRhosl,RadialGradientPhase,RadialGradientGrade,RadialGradientRs,Site,X,Y,NAvg,RhoAvg,Nsl,Rhosl,Vd,Phase,FlatZ,Grade,XLeft,XRight,BottomY,TopY,RDS,PSN,Reactor,Layer,Zone,Employee,InferredLot,Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09";
string args10 = "0,1,2,-1,-1,3,-1,12,70,8,66,67,-1,19,16,-1,-1,68,22,18,58,10,9,65,14,5,7,-1,6,15,69,17,20,59,26,44,35,11,60,30,48,39,53,23,41,32,55,24,42,33,29,47,38,54,27,45,36,21,56,28,46,37,31,49,40,57,25,43,34,81,80,72,73,74,75,76,77,78,79,83,84,85,86,87,88,89,90,91"; // string args10 = "0,1,2,-1,-1,3,-1,12,70,8,66,67,-1,19,16,-1,-1,68,22,18,58,10,9,65,14,5,7,-1,6,15,69,17,20,59,26,44,35,11,60,30,48,39,53,23,41,32,55,24,42,33,29,47,38,54,27,45,36,21,56,28,46,37,31,49,40,57,25,43,34,81,80,72,73,74,75,76,77,78,79,83,84,85,86,87,88,89,90,91";
string[] segments = args7.Split(','); string[] segments = args7.Split(',');
ReadOnlyCollection<string> ignoreColumns = new(args4.Split(',')); ReadOnlyCollection<string> ignoreColumns = new(args4.Split(','));
ReadOnlyCollection<string> newColumnNames = new(args9.Split(','));
ReadOnlyCollection<string> oldColumnNames = new(args8.Split(','));
ReadOnlyCollection<string> backfillColumns = new(args5.Split(',')); ReadOnlyCollection<string> backfillColumns = new(args5.Split(','));
ReadOnlyCollection<string> indexOnlyColumns = new(args6.Split(',')); ReadOnlyCollection<string> indexOnlyColumns = new(args6.Split(','));
ReadOnlyCollection<int> columnIndices = new(args10.Split(',').Select(int.Parse).ToArray()); ReadOnlyCollection<string> newColumnNames = new(processDataStandardFormatMappingNewColumnNames.Split(','));
ReadOnlyCollection<string> oldColumnNames = new(processDataStandardFormatMappingOldColumnNames.Split(','));
ReadOnlyCollection<int> columnIndices = new(processDataStandardFormatMappingColumnIndices.Split(',').Select(int.Parse).ToArray());
foreach (string segment in segments) foreach (string segment in segments)
{ {
segmentsB = segment.Split('|'); segmentsB = segment.Split('|');
@ -333,8 +341,7 @@ public class FileRead : Shared.FileRead, IFileRead
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
{ {
Tuple<string, Test[], JsonElement[], List<FileInfo>> results = new(string.Empty, Array.Empty<Test>(), Array.Empty<JsonElement>(), new List<FileInfo>()); Tuple<string, Test[], JsonElement[], List<FileInfo>> results = new(string.Empty, Array.Empty<Test>(), Array.Empty<JsonElement>(), new List<FileInfo>());
ProcessDataStandardFormatMapping processDataStandardFormatMapping = GetProcessDataStandardFormatMapping(); ProcessDataStandardFormat? processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, _ProcessDataStandardFormatMapping);
ProcessDataStandardFormat? processDataStandardFormat = ProcessDataStandardFormat.GetProcessDataStandardFormat(reportFullPath, processDataStandardFormatMapping);
if (processDataStandardFormat is not null) if (processDataStandardFormat is not null)
_Logistics = new Logistics(reportFullPath, processDataStandardFormat); _Logistics = new Logistics(reportFullPath, processDataStandardFormat);
else else

View File

@ -45,6 +45,7 @@ public class Aggregation
private static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, Dictionary<int, List<Notification>> keyValuePairs) private static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, Dictionary<int, List<Notification>> keyValuePairs)
{ {
Dictionary<int, Aggregation> results = new(); Dictionary<int, Aggregation> results = new();
int value;
int? inverseValue; int? inverseValue;
double inverseAverage; double inverseAverage;
Aggregation aggregation; Aggregation aggregation;
@ -60,7 +61,9 @@ public class Aggregation
fibonacciCollection.Clear(); fibonacciCollection.Clear();
foreach (Notification notification in keyValuePair.Value) foreach (Notification notification in keyValuePair.Value)
{ {
collection.Add(notification.Value); if (!int.TryParse(notification.Value, out value))
continue;
collection.Add(value);
if (notification.Inverse is null) if (notification.Inverse is null)
continue; continue;
inverseCollection.Add(notification.Inverse.Value); inverseCollection.Add(notification.Inverse.Value);
@ -72,7 +75,7 @@ public class Aggregation
continue; continue;
inverseAverage = Math.Round(inverseCollection.Average(), settings.Digits); inverseAverage = Math.Round(inverseCollection.Average(), settings.Digits);
averageFromInverseCeiling = (int)Math.Ceiling(inverseAverage); averageFromInverseCeiling = (int)Math.Ceiling(inverseAverage);
inverseValue = Notification.GetInverse(averageFromInverseCeiling); inverseValue = Notification.GetInverse(averageFromInverseCeiling.ToString());
fibonacciAverage = Math.Round(fibonacciCollection.Average(), settings.Digits); fibonacciAverage = Math.Round(fibonacciCollection.Average(), settings.Digits);
aggregation = new(inverseAverage: inverseAverage, aggregation = new(inverseAverage: inverseAverage,
valueCount: collection.Count, valueCount: collection.Count,
@ -107,9 +110,9 @@ public class Aggregation
if (string.IsNullOrEmpty(text) || text[0] == '[') if (string.IsNullOrEmpty(text) || text[0] == '[')
continue; continue;
notification = JsonSerializer.Deserialize(text, NotificationSourceGenerationContext.Default.Notification); notification = JsonSerializer.Deserialize(text, NotificationSourceGenerationContext.Default.Notification);
if (notification is null || notification.Id == 0) if (notification is null || string.IsNullOrEmpty(notification.Id))
continue; continue;
key = !string.IsNullOrEmpty(notification.Username) ? notification.Username : notification.RemoteIpAddress; key = !string.IsNullOrEmpty(notification.Username) ? notification.Username : throw new Exception();
if (string.IsNullOrEmpty(key)) if (string.IsNullOrEmpty(key))
continue; continue;
if (!keyValuePairs.TryGetValue(key, out collection)) if (!keyValuePairs.TryGetValue(key, out collection))
@ -126,7 +129,7 @@ public class Aggregation
results.Add(keyValuePair.Value[0]); results.Add(keyValuePair.Value[0]);
else else
{ {
notification = keyValuePair.Value.Select(record => new KeyValuePair<long, Notification>(record.Time, record)).OrderBy(pair => pair.Key).Last().Value; notification = keyValuePair.Value.Select(record => new KeyValuePair<string, Notification>(record.Time, record)).OrderBy(pair => pair.Key).Last().Value;
results.Add(notification); results.Add(notification);
} }
} }
@ -137,15 +140,18 @@ public class Aggregation
private static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, string directory) private static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, string directory)
{ {
ReadOnlyDictionary<int, Aggregation> results; ReadOnlyDictionary<int, Aggregation> results;
int id;
List<Notification>? collection; List<Notification>? collection;
Dictionary<int, List<Notification>> keyValuePairs = new(); Dictionary<int, List<Notification>> keyValuePairs = new();
ReadOnlyCollection<Notification> notifications = GetNotifications(settings, directory); ReadOnlyCollection<Notification> notifications = GetNotifications(settings, directory);
foreach (Notification notification in notifications) foreach (Notification notification in notifications)
{ {
if (!keyValuePairs.TryGetValue(notification.Id, out collection)) if (!int.TryParse(notification.Id, out id))
continue;
if (!keyValuePairs.TryGetValue(id, out collection))
{ {
keyValuePairs.Add(notification.Id, new()); keyValuePairs.Add(id, new());
if (!keyValuePairs.TryGetValue(notification.Id, out collection)) if (!keyValuePairs.TryGetValue(id, out collection))
throw new Exception(); throw new Exception();
} }
collection.Add(notification); collection.Add(notification);
@ -185,7 +191,7 @@ public class Aggregation
internal static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, Notification notification) internal static ReadOnlyDictionary<int, Aggregation> GetKeyValuePairs(Settings settings, Notification notification)
{ {
ReadOnlyDictionary<int, Aggregation> results; ReadOnlyDictionary<int, Aggregation> results;
Dictionary<int, List<Notification>> keyValuePairs = new() { { notification.Id, new Notification[] { notification }.ToList() } }; Dictionary<int, List<Notification>> keyValuePairs = new() { { int.Parse(notification.Id), new Notification[] { notification }.ToList() } };
results = GetKeyValuePairs(settings, keyValuePairs); results = GetKeyValuePairs(settings, keyValuePairs);
return results; return results;
} }

View File

@ -6,8 +6,10 @@ using Adaptation.Shared.Methods;
using log4net; using log4net;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Text.Json; using System.Text.Json;
using System.Threading;
namespace Adaptation.FileHandlers.Priority; namespace Adaptation.FileHandlers.Priority;
@ -16,6 +18,7 @@ namespace Adaptation.FileHandlers.Priority;
public class FileRead : Shared.FileRead, IFileRead public class FileRead : Shared.FileRead, IFileRead
{ {
private readonly Timer _Timer;
internal static ILog Log => _Log; internal static ILog Log => _Log;
internal static Settings Settings => _Settings; internal static Settings Settings => _Settings;
internal static Dictionary<int, WorkItem> WorkItems => _WorkItems; internal static Dictionary<int, WorkItem> WorkItems => _WorkItems;
@ -49,16 +52,22 @@ public class FileRead : Shared.FileRead, IFileRead
sourceFileFilter: _FileConnectorConfiguration.SourceFileFilter, sourceFileFilter: _FileConnectorConfiguration.SourceFileFilter,
sourceFileLocation: _FileConnectorConfiguration.SourceFileLocation, sourceFileLocation: _FileConnectorConfiguration.SourceFileLocation,
targetFileLocation: _FileConnectorConfiguration.TargetFileLocation); targetFileLocation: _FileConnectorConfiguration.TargetFileLocation);
string? json = WeightedShortestJobFirstHub.PopulatedWorkItemsAndGetJson(_Settings); _Timer = new Timer(Callback, null, Timeout.Infinite, Timeout.Infinite);
if (!string.IsNullOrEmpty(json))
WeightedShortestJobFirstHub.WriteJson(json);
string cellInstanceNamed = string.Concat("CellInstance.", _EquipmentType); string cellInstanceNamed = string.Concat("CellInstance.", _EquipmentType);
string url = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, $"{cellInstanceNamed}.Microsoft.Owin.Hosting.WebApp.Start.URL"); string url = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, $"{cellInstanceNamed}.Microsoft.Owin.Hosting.WebApp.Start.URL");
if (_IsEAFHosted) if (_IsEAFHosted)
{ {
_ = Microsoft.Owin.Hosting.WebApp.Start(url); _ = Microsoft.Owin.Hosting.WebApp.Start<Startup>(url);
_Log.Info($"Server running on {url}"); _Log.Info($"Server running on {url}");
} }
if (Debugger.IsAttached || fileConnectorConfiguration.PreProcessingMode == FileConnectorConfiguration.PreProcessingModeEnum.Process)
Callback(null);
else
{
long fileScanningIntervalInSeconds = _FileConnectorConfiguration.FileScanningIntervalInSeconds is null ? 0 : _FileConnectorConfiguration.FileScanningIntervalInSeconds.Value;
TimeSpan timeSpan = new(DateTime.Now.AddSeconds(fileScanningIntervalInSeconds).Ticks - DateTime.Now.Ticks);
_ = _Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite);
}
} }
void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) => Move(extractResults); void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) => Move(extractResults);
@ -138,4 +147,28 @@ public class FileRead : Shared.FileRead, IFileRead
return results; return results;
} }
private void Callback(object? state)
{
try
{
_Log.Info($"Enter-{nameof(WeightedShortestJobFirstModule.PopulatedWorkItemsAndGetJson)}");
string? json = WeightedShortestJobFirstModule.PopulatedWorkItemsAndGetJson(_Settings);
if (!string.IsNullOrEmpty(json))
WeightedShortestJobFirstModule.WriteJson(json);
_Log.Info($"End-{nameof(WeightedShortestJobFirstModule.PopulatedWorkItemsAndGetJson)}");
}
catch (Exception exception)
{
string subject = string.Concat("Exception:", _CellInstanceConnectionName);
string body = string.Concat(exception.Message, Environment.NewLine, Environment.NewLine, exception.StackTrace);
_Log.Fatal($"Exception-{nameof(WeightedShortestJobFirstModule.PopulatedWorkItemsAndGetJson)}{Environment.NewLine}{body}");
try
{
_SMTP.SendHighPriorityEmailMessage(subject, body);
File.WriteAllText(".email", body);
}
catch (Exception) { }
}
}
} }

View File

@ -9,15 +9,14 @@ public class Notification
[JsonConstructor] [JsonConstructor]
public Notification(int? fibonacci, public Notification(int? fibonacci,
int id, string id,
int? inverse, int? inverse,
string? machineId, string? machineId,
string page, string page,
string? remoteIpAddress,
string? site, string? site,
long time, string time,
string? username, string? username,
int value) string? value)
{ {
int? i = inverse is not null ? inverse : GetInverse(value); int? i = inverse is not null ? inverse : GetInverse(value);
Fibonacci = fibonacci is not null ? fibonacci : i is null ? null : GetFibonacci(i.Value); Fibonacci = fibonacci is not null ? fibonacci : i is null ? null : GetFibonacci(i.Value);
@ -25,32 +24,30 @@ public class Notification
Inverse = i; Inverse = i;
MachineId = machineId; MachineId = machineId;
Page = page; Page = page;
RemoteIpAddress = remoteIpAddress is not null ? remoteIpAddress : null;
Site = site is not null ? site : "MES"; Site = site is not null ? site : "MES";
Time = time; Time = time;
Username = username; Username = username;
Value = value; Value = value;
} }
[JsonPropertyName("id")] public int Id { get; } [JsonPropertyName("id")] public string Id { get; }
[JsonPropertyName("fibonacci")] public int? Fibonacci { get; } [JsonPropertyName("fibonacci")] public int? Fibonacci { get; }
[JsonPropertyName("inverse")] public int? Inverse { get; } [JsonPropertyName("inverse")] public int? Inverse { get; }
[JsonPropertyName("machineId")] public string? MachineId { get; } [JsonPropertyName("machineId")] public string? MachineId { get; }
[JsonPropertyName("page")] public string Page { get; } [JsonPropertyName("page")] public string Page { get; }
[JsonPropertyName("RemoteIpAddress")] public string? RemoteIpAddress { get; }
[JsonPropertyName("site")] public string? Site { get; } [JsonPropertyName("site")] public string? Site { get; }
[JsonPropertyName("time")] public long Time { get; } [JsonPropertyName("time")] public string Time { get; }
[JsonPropertyName("username")] public string? Username { get; } [JsonPropertyName("username")] public string? Username { get; }
[JsonPropertyName("value")] public int Value { get; } [JsonPropertyName("value")] public string? Value { get; }
internal static int? GetInverse(int value) => internal static int? GetInverse(string? value) =>
value switch value switch
{ {
1 => 5, "1" => 5,
2 => 4, "2" => 4,
3 => 3, "3" => 3,
4 => 2, "4" => 2,
5 => 1, "5" => 1,
_ => null _ => null
}; };
@ -69,18 +66,6 @@ public class Notification
_ => null _ => null
}; };
internal static Notification GetNotification(Notification notification, string? remoteIpAddress, string? connectionId) =>
new(notification.Fibonacci,
notification.Id,
notification.Inverse,
notification.MachineId,
notification.Page,
remoteIpAddress ?? connectionId,
notification.Site,
notification.Time,
notification.Username,
notification.Value);
} }
[JsonSourceGenerationOptions(WriteIndented = true)] [JsonSourceGenerationOptions(WriteIndented = true)]

View File

@ -1,4 +1,5 @@
using Microsoft.Owin.Cors; using Microsoft.Owin.Cors;
using Nancy.Owin;
using Owin; using Owin;
public class Startup public class Startup
@ -7,7 +8,10 @@ public class Startup
public void Configuration(IAppBuilder app) public void Configuration(IAppBuilder app)
{ {
_ = app.UseCors(CorsOptions.AllowAll); _ = app.UseCors(CorsOptions.AllowAll);
_ = app.UseNancy();
#if SignalR
_ = app.MapSignalR(); _ = app.MapSignalR();
#endif
} }
} }

View File

@ -1,12 +1,11 @@
#if SignalR
using System; using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text.Json;
#nullable enable #nullable enable
#pragma warning disable CA1822
namespace Adaptation.FileHandlers.Priority; namespace Adaptation.FileHandlers.Priority;
public class WeightedShortestJobFirstHub : Microsoft.AspNet.SignalR.Hub public class WeightedShortestJobFirstHub : Microsoft.AspNet.SignalR.Hub
@ -17,105 +16,22 @@ public class WeightedShortestJobFirstHub : Microsoft.AspNet.SignalR.Hub
// await Clients.All.send(n); // await Clients.All.send(n);
// } // }
private string? GetRemoteIpAddress() =>
Context?.Headers?.Get("X-Real-IP");
public void Send(string name, string message) public void Send(string name, string message)
{ {
Console.WriteLine($"{name}:{message};"); Console.WriteLine($"{name}:{message};");
// FileRead.Logger.LogWarning($"{name}:{message};");
// FileRead.Log?.Info($"{name}:{message};");
Console.WriteLine(Context?.ConnectionId); Console.WriteLine(Context?.ConnectionId);
// FileRead.Logger.LogWarning(Context?.ConnectionId);
// FileRead.Log?.Info(Context?.ConnectionId);
string? remoteIpAddress = GetRemoteIpAddress();
Console.WriteLine(remoteIpAddress);
// FileRead.Logger.LogWarning(remoteIpAddress);
// FileRead.Log?.Info(remoteIpAddress);
Clients.All.addMessage(name, message); Clients.All.addMessage(name, message);
} }
private static void FileWriteAllText(Settings settings, Notification n) public void NotifyAll(Notification notification)
{ {
string json = JsonSerializer.Serialize(n, NotificationSourceGenerationContext.Default.Notification); try
string directory = Path.Combine(settings.SourceFileLocation, n.Page, n.Id.ToString());
if (!Directory.Exists(directory))
_ = Directory.CreateDirectory(directory);
string checkFile = Path.Combine(directory, $"{n.Time}.json");
File.WriteAllText(checkFile, json);
}
internal static void WriteJson(string json)
{
string jsonFile = Path.Combine(FileRead.Settings.ParentDirectory, "{}.json");
string jsonFileWith = Path.Combine(FileRead.Settings.ParentDirectory, "{[]}.json");
string jsonOld = File.Exists(jsonFileWith) ? File.ReadAllText(jsonFileWith) : string.Empty;
if (json != jsonOld)
{ {
File.WriteAllText(jsonFileWith, json); WorkItem workItem = GetWorkItem(notification);
Dictionary<int, WorkItem> w = JsonSerializer.Deserialize(json.Replace($"\"{nameof(Aggregation.Notifications)}\":", "\"ignore\":"), WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem) ?? throw new Exception(); Clients.All.updateWorkItem(notification.Page, workItem);
json = JsonSerializer.Serialize(w, WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem);
File.WriteAllText(jsonFile, json);
} }
} catch (Exception ex)
{ Console.WriteLine($"{ex.Message}{Environment.NewLine}{ex.StackTrace}"); }
internal static string? PopulatedWorkItemsAndGetJson(Settings settings)
{
string? result = null;
ReadOnlyDictionary<int, WorkItem?> workItems = WorkItem.GetKeyValuePairs(settings);
int useCount = (from l in workItems where l.Value.CostOfDelay is not null select true).Count();
double prioritySize = useCount / settings.Priorities;
double priorityGroupSize = useCount / settings.PriorityGroups;
WorkItem[] sorted = (from l in workItems
where l.Value is not null
orderby l.Value.Site is not null,
l.Value.Site descending,
l.Value.CostOfDelay is not null,
l.Value.CostOfDelay descending,
l.Value.BusinessValue?.FibonacciAverage is not null,
l.Value.BusinessValue?.FibonacciAverage descending,
l.Key
select l.Value).ToArray();
lock (FileRead.WorkItems)
{
int j = 0;
WorkItem w;
double value;
int lastId = -1;
int? sortBeforeId;
WorkItem workItem;
int? sortPriority;
int? sortPriorityGroup;
FileRead.WorkItems.Clear();
for (int i = 0; i < sorted.Length; i++)
{
w = sorted[i];
if (w.CostOfDelay is null)
{
sortBeforeId = null;
sortPriority = null;
sortPriorityGroup = null;
}
else
{
j += 1;
sortBeforeId = lastId;
value = (j / prioritySize) + 1;
sortPriority = (int)Math.Floor(value);
if (sortPriority > settings.Priorities)
sortPriority = settings.Priorities;
value = (j / priorityGroupSize) + 1;
sortPriorityGroup = (int)Math.Floor(value);
if (sortPriorityGroup > settings.PriorityGroups)
sortPriorityGroup = settings.PriorityGroups;
}
workItem = WorkItem.GetWorkItem(w, i, sortBeforeId, sortPriority, sortPriorityGroup);
FileRead.WorkItems.Add(workItem.Id, workItem);
lastId = w.Id;
}
result = JsonSerializer.Serialize(FileRead.WorkItems, WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem);
}
return result;
} }
private static WorkItem GetWorkItem(Notification notification) private static WorkItem GetWorkItem(Notification notification)
@ -129,30 +45,6 @@ public class WeightedShortestJobFirstHub : Microsoft.AspNet.SignalR.Hub
return result; return result;
} }
public void NotifyAll(Notification notification) }
{
try
{
string? json = null;
string? remoteIpAddress = GetRemoteIpAddress();
Notification n = Notification.GetNotification(notification, remoteIpAddress, Context?.ConnectionId);
Console.WriteLine(n.ToString());
// FileRead.Logger.LogWarning(n.ToString());
// FileRead.Log?.Info(n.ToString());
FileWriteAllText(FileRead.Settings, n);
json = PopulatedWorkItemsAndGetJson(FileRead.Settings);
if (!string.IsNullOrEmpty(json))
WriteJson(json);
if (!string.IsNullOrEmpty(n.RemoteIpAddress))
{
WorkItem workItem = GetWorkItem(n);
Clients.All.updateWorkItem(n.Page, workItem);
}
}
catch (Exception ex)
{ Console.WriteLine($"{ex.Message}{Environment.NewLine}{ex.StackTrace}"); }
// { FileRead.Logger.LogError(ex, "Error!"); }
// { FileRead.Log?.Error("Error!", ex); }
}
} #endif

View File

@ -0,0 +1,155 @@
using log4net;
using Nancy;
using Nancy.Extensions;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text.Json;
#nullable enable
#pragma warning disable CA1822
namespace Adaptation.FileHandlers.Priority;
public class WeightedShortestJobFirstModule : NancyModule
{
public WeightedShortestJobFirstModule()
{
Get("/api/v1/ado/", _ =>
{
ILog log = LogManager.GetLogger(typeof(WeightedShortestJobFirstModule));
log.Info($"{nameof(Get)}");
return "Hello";
});
base.Post("/api/v1/ado/", _ =>
{
Notification notification;
ILog log = LogManager.GetLogger(typeof(WeightedShortestJobFirstModule));
log.Info($"Enter-{nameof(Post)}");
try
{
string body = Request.Body.AsString();
DynamicDictionary form = Request.Form;
Dictionary<string, object> keyValuePairs = form.ToDictionary();
notification = GetNotification(body, keyValuePairs);
}
catch (Exception ex)
{
log.Fatal($"Exception-{nameof(Post)}{Environment.NewLine}{ex.Message}{Environment.NewLine}{Environment.NewLine}{ex.StackTrace}");
throw;
}
log.Info($"Return-{nameof(Post)}");
return notification.Time.ToString();
});
}
internal static Notification GetNotification(string body, Dictionary<string, object> keyValuePairs)
{
string? json;
Notification notification;
if (!string.IsNullOrEmpty(body) && body[0] == '{')
{
File.WriteAllText(".json", body);
notification = JsonSerializer.Deserialize(body, NotificationSourceGenerationContext.Default.Notification) ?? throw new NullReferenceException();
}
else
{
json = JsonSerializer.Serialize(keyValuePairs);
File.WriteAllText(".json", json);
notification = JsonSerializer.Deserialize(json, NotificationSourceGenerationContext.Default.Notification) ?? throw new NullReferenceException();
}
FileWriteAllText(FileRead.Settings, notification);
json = PopulatedWorkItemsAndGetJson(FileRead.Settings);
if (!string.IsNullOrEmpty(json))
WriteJson(json);
return notification;
}
private static void FileWriteAllText(Settings settings, Notification notification)
{
string json = JsonSerializer.Serialize(notification, NotificationSourceGenerationContext.Default.Notification);
string directory = Path.Combine(settings.SourceFileLocation, notification.Page, notification.Id.ToString());
if (!Directory.Exists(directory))
_ = Directory.CreateDirectory(directory);
string checkFile = Path.Combine(directory, $"{notification.Time}.json");
File.WriteAllText(checkFile, json);
}
internal static string? PopulatedWorkItemsAndGetJson(Settings settings)
{
string? result = null;
ReadOnlyDictionary<int, WorkItem?> workItems = WorkItem.GetKeyValuePairs(settings);
int useCount = (from l in workItems where l.Value.CostOfDelay is not null select true).Count();
double prioritySize = useCount / settings.Priorities;
double priorityGroupSize = useCount / settings.PriorityGroups;
WorkItem[] sorted = (from l in workItems
where l.Value is not null
orderby l.Value.Site is not null,
l.Value.Site descending,
l.Value.CostOfDelay is not null,
l.Value.CostOfDelay descending,
l.Value.BusinessValue?.FibonacciAverage is not null,
l.Value.BusinessValue?.FibonacciAverage descending,
l.Key
select l.Value).ToArray();
lock (FileRead.WorkItems)
{
int j = 0;
WorkItem w;
double value;
int lastId = -1;
int? sortBeforeId;
WorkItem workItem;
int? sortPriority;
int? sortPriorityGroup;
FileRead.WorkItems.Clear();
for (int i = 0; i < sorted.Length; i++)
{
w = sorted[i];
if (w.CostOfDelay is null)
{
sortBeforeId = null;
sortPriority = null;
sortPriorityGroup = null;
}
else
{
j += 1;
sortBeforeId = lastId;
value = (j / prioritySize) + 1;
sortPriority = (int)Math.Floor(value);
if (sortPriority > settings.Priorities)
sortPriority = settings.Priorities;
value = (j / priorityGroupSize) + 1;
sortPriorityGroup = (int)Math.Floor(value);
if (sortPriorityGroup > settings.PriorityGroups)
sortPriorityGroup = settings.PriorityGroups;
}
workItem = WorkItem.GetWorkItem(w, i, sortBeforeId, sortPriority, sortPriorityGroup);
FileRead.WorkItems.Add(workItem.Id, workItem);
lastId = w.Id;
}
result = JsonSerializer.Serialize(FileRead.WorkItems, WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem);
}
return result;
}
internal static void WriteJson(string json)
{
string jsonFile = Path.Combine(FileRead.Settings.ParentDirectory, "{}.json");
string jsonFileWith = Path.Combine(FileRead.Settings.ParentDirectory, "{[]}.json");
string jsonOld = File.Exists(jsonFileWith) ? File.ReadAllText(jsonFileWith) : string.Empty;
if (json != jsonOld)
{
File.WriteAllText(jsonFileWith, json);
Dictionary<int, WorkItem> w = JsonSerializer.Deserialize(json.Replace($"\"{nameof(Aggregation.Notifications)}\":", "\"ignore\":"), WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem) ?? throw new Exception();
json = JsonSerializer.Serialize(w, WorkItemDictionarySourceGenerationContext.Default.DictionaryInt32WorkItem);
File.WriteAllText(jsonFile, json);
}
}
}

View File

@ -140,6 +140,26 @@ public class FileRead : Shared.FileRead, IFileRead
// File.WriteAllText(jsonFileName, json); // File.WriteAllText(jsonFileName, json);
} }
private static void MoveMatchingFile(string jobIdDirectory, string matchDirectory)
{
string checkFile;
string[] jobIdDirectoryFiles = Directory.GetFiles(jobIdDirectory, "*", SearchOption.TopDirectoryOnly);
string[] matchDirectoryFiles = Directory.GetFiles(matchDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string jobIdDirectoryFile in jobIdDirectoryFiles)
{
foreach (string matchDirectoryFile in matchDirectoryFiles)
{
if (jobIdDirectoryFile.StartsWith(matchDirectoryFile))
{
checkFile = Path.Combine(matchDirectory, Path.GetFileName(matchDirectoryFile));
if (File.Exists(checkFile))
continue;
File.Move(jobIdDirectoryFile, checkFile);
}
}
}
}
private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime) private Tuple<string, Test[], JsonElement[], List<FileInfo>> GetExtractResult(string reportFullPath, DateTime dateTime)
{ {
Tuple<string, Test[], JsonElement[], List<FileInfo>> results; Tuple<string, Test[], JsonElement[], List<FileInfo>> results;

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - 122508 - Feature iteration should be set to max of children</title> <title>Infineon - 122508 - Feature iteration should be set to max of children</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/122508.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/122508.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/122508.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/122508.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -56,7 +56,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/check-122508.json?v=2025-01-22-10-49"); initIndex("/markdown/check-122508.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - 122514 - Features and children must have a Tag</title> <title>Infineon - 122514 - Features and children must have a Tag</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/122514.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/122514.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/122514.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/122514.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -56,7 +56,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/check-122514.json?v=2025-01-22-10-49"); initIndex("/markdown/check-122514.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - 122517 - Feature start date should be min activated date of children</title> <title>Infineon - 122517 - Feature start date should be min activated date of children</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/122517.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/122517.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/122517.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/122517.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -56,7 +56,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/check-122517.json?v=2025-01-22-10-49"); initIndex("/markdown/check-122517.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - 123066 - When children of a Feature are not New Feature must also not be New</title> <title>Infineon - 123066 - When children of a Feature are not New Feature must also not be New</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/123066.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/123066.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/123066.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/123066.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -56,7 +56,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/check-123066.json?v=2025-01-22-10-49"); initIndex("/markdown/check-123066.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - 123067 - WIP</title> <title>Infineon - 123067 - WIP</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/123067.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/123067.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/123067.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/123067.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -56,7 +56,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/check-123067.json?v=2025-01-22-10-49"); initIndex("/markdown/check-123067.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - 126169 - Children of a Feature should have the same priority</title> <title>Infineon - 126169 - Children of a Feature should have the same priority</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/126169.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/126169.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/126169.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/126169.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -56,7 +56,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/check-126169.json?v=2025-01-22-10-49"); initIndex("/markdown/check-126169.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - Business Value</title> <title>Infineon - Business Value</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/business.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/business.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/business.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/business.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -59,7 +59,7 @@ What is the relative value to the Customer or business?
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://eaf-dev.mes.infineon.com/api/v1/ado/", "business", "Value", "Business Value", "/markdown/PI5-Results/business.json?v=2025-01-22-10-49"); initIndex("/markdown/bugs-features-with-parents.json?v=2025-04-10-15-59", "https://eaf-dev.mes.infineon.com/api/v1/ado/", "business", "Value", "Business Value", "/markdown/PI5-Results/business.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -10,7 +10,7 @@
<script src="/js/scripts/jquery-1.6.4.min.js"></script> <script src="/js/scripts/jquery-1.6.4.min.js"></script>
<script src="/js/scripts/jquery.signalR-2.4.3.min.js"></script> <script src="/js/scripts/jquery.signalR-2.4.3.min.js"></script>
<script src="/signalr/hubs"></script> <script src="/signalr/hubs"></script>
<script src="/js/cod-b.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/cod-b.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -54,51 +54,52 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
const username = '';
const machineId = '';
const fromHtml = true; const fromHtml = true;
const signalRUrl = "/signalr"; const machineId = 'na';
const username = 'cbecker1';
const baseUri = 'https://eaf-dev.mes.infineon.com';
const apiUrl = 'https://eaf-dev.mes.infineon.com/api/v1/ado/';
const windowLocationHRef = window.location.href; const windowLocationHRef = window.location.href;
const apiUrl = "https://eaf-dev.mes.infineon.com/api/v1/ado/"; const signalRUrl = baseUri + '/signalr';
const workItems = { const workItems = {
a: "/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", a: baseUri + '/markdown/bugs-features-with-parents.json?v=2025-04-10-15-59',
b: "/markdown/{[]}.json?v=2025-01-22-10-49" b: baseUri + '/markdown/{[]}.json?v=2025-04-10-15-59'
}; };
const b = { const b = {
page: "business", page: 'business',
description: "Value", description: 'Value',
th: "Business Value", th: 'Business Value',
span: "What is the relative value to the Customer or business?<br>• Do our users prefer this over that?<br>• What is the revenue impact on our business?<br>• Is there a potential penalty or other negative effects if we delay?" span: 'What is the relative value to the Customer or business?<br>• Do our users prefer this over that?<br>• What is the revenue impact on our business?<br>• Is there a potential penalty or other negative effects if we delay?'
}; };
const r = { const r = {
page: "risk", page: 'risk',
description: "Risk", description: 'Risk',
th: "Risk Reduction and/or Opportunity Enablement", th: 'Risk Reduction and/or Opportunity Enablement',
span: "What else does this do for our business?<br>• Reduce the risk of this or future delivery?<br>• Is there value in the information we will receive?<br>• Enable new business opportunities?" span: 'What else does this do for our business?<br>• Reduce the risk of this or future delivery?<br>• Is there value in the information we will receive?<br>• Enable new business opportunities?'
}; };
const t = { const t = {
page: "time", page: 'time',
description: "Critical", description: 'Critical',
th: "Time Criticality", th: 'Time Criticality',
span: "How does user/business value decay over time?<br>• Is there a fixed deadline?<br>• Will they wait for us or move to another Solution?<br>• What is the current effect on Customer satisfaction?" span: 'How does user/business value decay over time?<br>• Is there a fixed deadline?<br>• Will they wait for us or move to another Solution?<br>• What is the current effect on Customer satisfaction?'
}; };
const c = { const c = {
page: "cod", page: 'cod',
description: "CoD", description: 'CoD',
th: "Cost of Delay (CoD)", th: 'Cost of Delay (CoD)',
span: "Cost of Delay (CoD) is the money lost by delaying or not doing a job for a specific time. It's a measure of the economic value of a job over time." span: "Cost of Delay (CoD) is the money lost by delaying or not doing a job for a specific time. It's a measure of the economic value of a job over time."
}; };
const e = { const e = {
page: "effort", page: 'effort',
description: "Effort", description: 'Effort',
th: "Effort", th: 'Effort',
span: "Effort" span: 'Effort'
}; };
const w = { const w = {
page: "wsjf", page: 'wsjf',
description: "WSJF", description: 'WSJF',
th: "Weightest Shortest Job First calculation (WSJF)", th: 'Weightest Shortest Job First calculation (WSJF)',
span: "Weightest Shortest Job First calculation (see @SCALE formula)" span: 'Weightest Shortest Job First calculation (see @SCALE formula)'
}; };
initIndex(fromHtml, username, machineId, windowLocationHRef, workItems, b, r, t, c, e, w, apiUrl, signalRUrl); initIndex(fromHtml, username, machineId, windowLocationHRef, workItems, b, r, t, c, e, w, apiUrl, signalRUrl);
}); });

View File

@ -1,97 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>Infineon - Cost of Delay (CoD) (see @SCALE formula)</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" />
<link href="/styles/cod.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script>
<script src="/js/scripts/jquery.signalR-2.4.3.min.js"></script>
<script src="/signalr/hubs"></script>
<script src="/js/cod.js?v=2025-01-22-10-49" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script>
</head>
<body>
<div class="navbar navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="navbar-brand">
<span id="siteHeader">&nbsp;</span> - Cost of Delay (CoD) (see @SCALE formula)
</div>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
</ul>
<p class="navbar-text navbar-right">
&nbsp;
</p>
</div>
</div>
</div>
<div class="container-fluid body-content" style="margin-top: 40px; margin-left: 15px;">
<div id="HeaderGridDiv">
<table id="HeaderGrid" border="1"></table>
</div>
<br />&nbsp;
<div id="AllGridDiv">
<table id="AllGrid"></table>
</div>
</div>
<script>
$(document).ready(function () {
const fromHtml = true;
const windowLocationHRef = window.location.href;
const headerGrid = document.getElementById("HeaderGrid");
const workItems = {
a: "/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49",
b: "/markdown/{}.json?v=2025-01-22-10-49"
};
const b = {
page: "business",
description: "Value",
th: "Business Value",
span: "What is the relative value to the Customer or business?<br>• Do our users prefer this over that?<br>• What is the revenue impact on our business?<br>• Is there a potential penalty or other negative effects if we delay?"
};
const r = {
page: "risk",
description: "Risk",
th: "Risk Reduction and/or Opportunity Enablement",
span: "What else does this do for our business?<br>• Reduce the risk of this or future delivery?<br>• Is there value in the information we will receive?<br>• Enable new business opportunities?"
};
const t = {
page: "time",
description: "Critical",
th: "Time Criticality",
span: "How does user/business value decay over time?<br>• Is there a fixed deadline?<br>• Will they wait for us or move to another Solution?<br>• What is the current effect on Customer satisfaction?"
};
const c = {
page: "cod",
description: "CoD",
th: "Cost of Delay (CoD)",
span: "Cost of Delay (CoD) is the money lost by delaying or not doing a job for a specific time. It's a measure of the economic value of a job over time."
};
initIndex(fromHtml, windowLocationHRef, headerGrid, workItems, b, r, t, c, "https://eaf-dev.mes.infineon.com/api/v1/ado/");
});
</script>
</body>
</html>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - Effort</title> <title>Infineon - Effort</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/effort.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/effort.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/effort.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/effort.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -55,7 +55,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://eaf-dev.mes.infineon.com/api/v1/ado/", "effort", "Effort", "Effort", "/markdown/PI5-Results/effort.json?v=2025-01-22-10-49"); initIndex("/markdown/bugs-features-with-parents.json?v=2025-04-10-15-59", "https://eaf-dev.mes.infineon.com/api/v1/ado/", "effort", "Effort", "Effort", "/markdown/PI5-Results/effort.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - Risk Reduction and/or Opportunity Enablement</title> <title>Infineon - Risk Reduction and/or Opportunity Enablement</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/risk.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/risk.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/risk.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/risk.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -59,7 +59,7 @@ What else does this do for our business?
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://eaf-dev.mes.infineon.com/api/v1/ado/", "risk", "Risk", "Risk Reduction and/or Opportunity Enablement", "/markdown/PI5-Results/risk.json?v=2025-01-22-10-49"); initIndex("/markdown/bugs-features-with-parents.json?v=2025-04-10-15-59", "https://eaf-dev.mes.infineon.com/api/v1/ado/", "risk", "Risk", "Risk Reduction and/or Opportunity Enablement", "/markdown/PI5-Results/risk.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -21,7 +21,7 @@
<script src="/js/scripts/jquery-1.6.4.min.js"></script> <script src="/js/scripts/jquery-1.6.4.min.js"></script>
<script src="/js/scripts/jquery.signalR-2.4.3.min.js"></script> <script src="/js/scripts/jquery.signalR-2.4.3.min.js"></script>
<script src="/signalr/hubs"></script> <script src="/signalr/hubs"></script>
<script src="/js/wsjf-c.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/simple.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script> <script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - Time Criticality</title> <title>Infineon - Time Criticality</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/time.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/time.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/time.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/time.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -59,7 +59,7 @@ How does user/business value decay over time?
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://eaf-dev.mes.infineon.com/api/v1/ado/", "time", "Critical", "Time Criticality", "/markdown/PI5-Results/time.json?v=2025-01-22-10-49"); initIndex("/markdown/bugs-features-with-parents.json?v=2025-04-10-15-59", "https://eaf-dev.mes.infineon.com/api/v1/ado/", "time", "Critical", "Time Criticality", "/markdown/PI5-Results/time.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - User Stor(ies) with parents</title> <title>Infineon - User Stor(ies) with parents</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/with-parents.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/with-parents.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/with-parents.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/with-parents.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -55,7 +55,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/bugs-user-stories-with-parents.json?v=2025-01-22-10-49"); initIndex("/markdown/bugs-user-stories-with-parents.json?v=2025-04-10-15-59");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - Result of Weightest Shortest Job First calculation (see @SCALE formula)</title> <title>Infineon - Result of Weightest Shortest Job First calculation (see @SCALE formula)</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/wsjf.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/wsjf.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/wsjf-b.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/wsjf-b.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -55,7 +55,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://eaf-dev.mes.infineon.com/api/v1/ado/"); initIndex("/markdown/bugs-features-with-parents.json?v=2025-04-10-15-59", "https://eaf-dev.mes.infineon.com/api/v1/ado/");
}); });
</script> </script>

View File

@ -6,15 +6,15 @@
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<title>Infineon - Result of Weightest Shortest Job First calculation (see @SCALE formula)</title> <title>Infineon - Result of Weightest Shortest Job First calculation (see @SCALE formula)</title>
<link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/bootstrap.min.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/themes/bootstrap3/default/infragistics.theme.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/igniteui/css/structure/infragistics.css?v=2025-01-22-10-49" rel="stylesheet" /> <link href="/igniteui/css/structure/infragistics.css?v=2025-04-10-15-59" rel="stylesheet" />
<link href="/styles/wsjf.css?no-cache=2024-10-04-08-34" rel="stylesheet" /> <link href="/styles/wsjf.css?no-cache=2024-10-04-08-34" rel="stylesheet" />
<script src="/js/jquery-3.6.0.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-3.6.0.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/jquery-ui.min.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/jquery-ui.min.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/js/wsjf.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/js/wsjf.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.core.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.core.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.lob.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.lob.js?v=2025-04-10-15-59" type="text/javascript"></script>
<script src="/igniteui/js/infragistics.dv.js?v=2025-01-22-10-49" type="text/javascript"></script> <script src="/igniteui/js/infragistics.dv.js?v=2025-04-10-15-59" type="text/javascript"></script>
</head> </head>
<body> <body>
@ -55,7 +55,7 @@
<script> <script>
$(document).ready(function () { $(document).ready(function () {
initIndex("/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", "https://eaf-dev.mes.infineon.com/api/v1/ado/"); initIndex("/markdown/bugs-features-with-parents.json?v=2025-04-10-15-59", "https://eaf-dev.mes.infineon.com/api/v1/ado/");
}); });
</script> </script>

View File

@ -67,23 +67,24 @@ function getNotifications(x, aggregation) {
else { else {
result = ''; result = '';
aggregation.Notifications.forEach(element => { aggregation.Notifications.forEach(element => {
const username = element.username == null ? 'user' : element.username;
if (element.value === 1) { if (element.value === 1) {
result += 'Highest ' + element.RemoteIpAddress + '|'; result += 'Highest ' + username + '|';
} }
else if (element.value === 2) { else if (element.value === 2) {
result += 'High ' + element.RemoteIpAddress + '|'; result += 'High ' + username + '|';
} }
else if (element.value === 3) { else if (element.value === 3) {
result += 'Medium ' + element.RemoteIpAddress + '|'; result += 'Medium ' + username + '|';
} }
else if (element.value === 4) { else if (element.value === 4) {
result += 'Low ' + element.RemoteIpAddress + '|'; result += 'Low ' + username + '|';
} }
else if (element.value === 5) { else if (element.value === 5) {
result += 'Lowest ' + element.RemoteIpAddress + '|'; result += 'Lowest ' + username + '|';
} }
else { else {
result += element.value + ' ' + element.RemoteIpAddress + '|'; result += element.value + ' ' + username + '|';
} }
}); });
result = result.substring(0, result.length - 1); result = result.substring(0, result.length - 1);
@ -191,32 +192,32 @@ function sendValue(fromHtml, element, page, id) {
if (fromHtml && notification.value !== "9") { if (fromHtml && notification.value !== "9") {
$("#AllTextarea").hide(); $("#AllTextarea").hide();
document.getElementById('AllTextarea').value = ''; document.getElementById('AllTextarea').value = '';
// $.post(_apiUrl + "save", notification) $.post(_apiUrl, notification)
// .done(function (msg) { .done(function (msg) {
// console.log("Posted value of " + notification.value + " for " + id + " on page " + page + " " + msg); console.log("Posted value of " + notification.value + " for " + id + " on page " + page + " " + msg);
// }) if (!_connectionHubStartDone) {
// .fail(function (_, textStatus, _) { console.warn("Error data not sent!");
// alert(textStatus); }
// }); else {
if (!_connectionHubStartDone) { if (_chat.connection.lastError != undefined)
alert("Error data not sent!"); console.warn("Last Error:\r\n\r\n" + _chat.connection.lastError);
} _chat.server.notifyAll(notification)
else { .done(function () {
if (_chat.connection.lastError != undefined) console.log("Posted value of " + notification.value + " for " + id + " on page " + page);
alert("Last Error:\r\n\r\n" + _chat.connection.lastError); })
_chat.server.notifyAll(notification) .fail(function (errorThrown) {
.done(function () { if (errorThrown == undefined || errorThrown.message == undefined || errorThrown.stack == undefined) {
console.log("Posted value of " + notification.value + " for " + id + " on page " + page); console.warn("Error posting!");
}) }
.fail(function (errorThrown) { else {
if (errorThrown == undefined || errorThrown.message == undefined || errorThrown.stack == undefined) { console.warn(errorThrown.message + "\r\n\r\n" + errorThrown.stack);
alert("Error posting!"); }
} });
else { }
alert(errorThrown.message + "\r\n\r\n" + errorThrown.stack); })
} .fail(function (_, textStatus, _) {
}); console.warn(textStatus);
} });
} }
} }
@ -391,7 +392,7 @@ function updateWorkItem(b, r, t, c, e, w, page, workItem) {
aggregation = workItem.Effort; aggregation = workItem.Effort;
} }
if (x == undefined) if (x == undefined)
alert("Error with page!"); console.warn("Error with page!");
else { else {
$('#' + x.page + workItem.Id).text('!' + myRound(aggregation.FibonacciAverage, 100)); $('#' + x.page + workItem.Id).text('!' + myRound(aggregation.FibonacciAverage, 100));
if (workItem.WeightedShortestJobFirst != undefined) { if (workItem.WeightedShortestJobFirst != undefined) {
@ -447,7 +448,7 @@ function setupSignalR(b, r, t, c, e, w, signalRUrl) {
$.connection.hub.url = signalRUrl; $.connection.hub.url = signalRUrl;
_chat = $.connection.weightedShortestJobFirstHub; _chat = $.connection.weightedShortestJobFirstHub;
if (_chat == undefined || _chat.server == undefined) { if (_chat == undefined || _chat.server == undefined) {
alert('Error within handshake!'); console.warn('Error within handshake!');
} }
else { else {
_chat.client.updateWorkItem = function (page, workItem) { _chat.client.updateWorkItem = function (page, workItem) {
@ -461,10 +462,10 @@ function setupSignalR(b, r, t, c, e, w, signalRUrl) {
.fail(function (errorThrown) { .fail(function (errorThrown) {
_connectionHubStartDone = false; _connectionHubStartDone = false;
if (errorThrown == undefined || errorThrown.message == undefined || errorThrown.stack == undefined) { if (errorThrown == undefined || errorThrown.message == undefined || errorThrown.stack == undefined) {
alert("Error starting conection!"); console.warn("Error starting connection!");
} }
else { else {
alert(errorThrown.message + "\r\n" + errorThrown.stack); console.warn(errorThrown.message + "\r\n" + errorThrown.stack);
} }
}); });
} }
@ -17061,8 +17062,8 @@ if (typeof document == 'undefined') {
const apiUrl = "https://eaf-dev.mes.infineon.com/api/v1/ado/"; const apiUrl = "https://eaf-dev.mes.infineon.com/api/v1/ado/";
const windowLocationHRef = "https://eaf-dev.mes.infineon.com/html/cod.html?site=MES"; const windowLocationHRef = "https://eaf-dev.mes.infineon.com/html/cod.html?site=MES";
const workItems = { const workItems = {
a: "https://eaf-dev.mes.infineon.com/markdown/bugs-features-with-parents.json?v=2025-01-22-10-49", a: "https://eaf-dev.mes.infineon.com/markdown/bugs-features-with-parents.json?v=2025-04-10-15-59",
b: "https://eaf-dev.mes.infineon.com/markdown/{}.json?v=2025-01-22-10-49" b: "https://eaf-dev.mes.infineon.com/markdown/{}.json?v=2025-04-10-15-59"
}; };
const b = { const b = {
page: "business", page: "business",

View File

@ -31,11 +31,9 @@ function initIndex(url, apiUrl) {
// Call the Send method on the hub. // Call the Send method on the hub.
// chat.server.send($('#displayname').val(), $('#message').val()); // chat.server.send($('#displayname').val(), $('#message').val());
var notification = { var notification = {
"Json": null,
"id": 110743, "id": 110743,
"page": "effort", "page": "effort",
"QueryString": "time=1737573418926\u0026id=110743\u0026page=effort\u0026value=1", "username": "user",
"RemoteIpAddress": "10.95.36.87",
"time": 1737573418926, "time": 1737573418926,
"value": 1 "value": 1
}; };

View File

@ -106,6 +106,7 @@
<PackageReference Include="Tesseract" Version="5.2.0" /> <PackageReference Include="Tesseract" Version="5.2.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Nancy.Owin" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNet.SignalR" Version="2.4.3" /> <PackageReference Include="Microsoft.AspNet.SignalR" Version="2.4.3" />
<PackageReference Include="Microsoft.AspNet.SignalR.Core" Version="2.4.3" /> <PackageReference Include="Microsoft.AspNet.SignalR.Core" Version="2.4.3" />
<PackageReference Include="Microsoft.Owin" Version="4.0.0" /> <PackageReference Include="Microsoft.Owin" Version="4.0.0" />

View File

@ -383,7 +383,7 @@ public class FileRead : Properties.IFileRead
else else
{ {
string logisticsSequence = _Logistics.Sequence.ToString(); string logisticsSequence = _Logistics.Sequence.ToString();
results = Directory.GetDirectories(jobIdDirectory, string.Concat(_Logistics.MID, '*', logisticsSequence, '*'), SearchOption.TopDirectoryOnly); results = Directory.GetDirectories(jobIdDirectory, $"*{logisticsSequence}*", SearchOption.TopDirectoryOnly);
} }
if ((results is null) || results.Length != 1) if ((results is null) || results.Length != 1)
throw new Exception("Didn't find directory by logistics sequence"); throw new Exception("Didn't find directory by logistics sequence");

View File

@ -28,14 +28,17 @@ internal class ProcessDataStandardFormat
internal ReadOnlyCollection<string> Body { get; private set; } internal ReadOnlyCollection<string> Body { get; private set; }
internal ReadOnlyCollection<string> Columns { get; private set; } internal ReadOnlyCollection<string> Columns { get; private set; }
internal ReadOnlyCollection<string> Logistics { get; private set; } internal ReadOnlyCollection<string> Logistics { get; private set; }
internal ReadOnlyCollection<string> InputLines { get; private set; }
internal ProcessDataStandardFormat(ReadOnlyCollection<string> body, internal ProcessDataStandardFormat(ReadOnlyCollection<string> body,
ReadOnlyCollection<string> columns, ReadOnlyCollection<string> columns,
ReadOnlyCollection<string> inputLines,
ReadOnlyCollection<string> logistics, ReadOnlyCollection<string> logistics,
long? sequence) long? sequence)
{ {
Body = body; Body = body;
Columns = columns; Columns = columns;
InputLines = inputLines;
Logistics = logistics; Logistics = logistics;
Sequence = sequence; Sequence = sequence;
} }
@ -53,7 +56,7 @@ internal class ProcessDataStandardFormat
GetString(SearchFor.Archive, addSpaces, separator); GetString(SearchFor.Archive, addSpaces, separator);
internal static ProcessDataStandardFormat GetEmpty() => internal static ProcessDataStandardFormat GetEmpty() =>
new(new(Array.Empty<string>()), new(Array.Empty<string>()), new(Array.Empty<string>()), null); new(new(Array.Empty<string>()), new(Array.Empty<string>()), new(Array.Empty<string>()), new(Array.Empty<string>()), null);
internal static List<string> PDSFToFixedWidth(string reportFullPath) internal static List<string> PDSFToFixedWidth(string reportFullPath)
{ {
@ -169,14 +172,20 @@ internal class ProcessDataStandardFormat
{ {
for (int i = r; i < lines.Length; i++) for (int i = r; i < lines.Length; i++)
{ {
if (lines[r].StartsWith("END_HEADER")) if (!lines[i].StartsWith("LOGISTICS_") || lines[i].StartsWith("END_HEADER"))
break; break;
logistics.Add(lines[i]); logistics.Add(lines[i]);
} }
break; break;
} }
} }
result = new(logistics.AsReadOnly(), columns.AsReadOnly(), body.AsReadOnly(), null); if (lines.Length > 0 && body.Count == 0 && columns.Count == 0 && logistics.Count == 0)
logistics.Add(lines[1]);
result = new(body: body.AsReadOnly(),
columns: columns.AsReadOnly(),
inputLines: lines.ToList().AsReadOnly(),
logistics: logistics.AsReadOnly(),
sequence: null);
return result; return result;
} }
@ -229,7 +238,7 @@ internal class ProcessDataStandardFormat
{ {
for (int i = r; i < lines.Length; i++) for (int i = r; i < lines.Length; i++)
{ {
if (lines[r].StartsWith("END_HEADER")) if (!lines[i].StartsWith("LOGISTICS_") || lines[i].StartsWith("END_HEADER"))
break; break;
logistics.Add(lines[i]); logistics.Add(lines[i]);
} }
@ -245,6 +254,7 @@ internal class ProcessDataStandardFormat
} }
result = new(body: body.AsReadOnly(), result = new(body: body.AsReadOnly(),
columns: new(columns), columns: new(columns),
inputLines: lines.ToList().AsReadOnly(),
logistics: logistics.AsReadOnly(), logistics: logistics.AsReadOnly(),
sequence: sequence); sequence: sequence);
return result; return result;
@ -335,7 +345,8 @@ internal class ProcessDataStandardFormat
results.Add(string.Join("\t", values)); results.Add(string.Join("\t", values));
} }
result = new(body: new(results), result = new(body: new(results),
columns: processDataStandardFormat.Columns, columns: processDataStandardFormatMapping.OldColumnNames,
inputLines: processDataStandardFormat.InputLines,
logistics: processDataStandardFormat.Logistics, logistics: processDataStandardFormat.Logistics,
sequence: processDataStandardFormat.Sequence); sequence: processDataStandardFormat.Sequence);
return result; return result;
@ -357,7 +368,7 @@ internal class ProcessDataStandardFormat
results.Add($"HEADER_OFFSET\t{headerOffset}"); results.Add($"HEADER_OFFSET\t{headerOffset}");
results.Add($"DATA_OFFSET\t{dataOffset}"); results.Add($"DATA_OFFSET\t{dataOffset}");
results.Add($"END_OFFSET\t{endOffset}"); results.Add($"END_OFFSET\t{endOffset}");
results.Add($"\"{string.Join("\",\t\"", processDataStandardFormat.Columns)}\""); results.Add($"\"{string.Join("\"\t\"", processDataStandardFormat.Columns)}\"");
results.AddRange(processDataStandardFormat.Body); results.AddRange(processDataStandardFormat.Body);
results.Add($"NUM_DATA_ROWS\t{processDataStandardFormat.Body.Count.ToString().PadLeft(9, '0')}"); results.Add($"NUM_DATA_ROWS\t{processDataStandardFormat.Body.Count.ToString().PadLeft(9, '0')}");
results.Add($"NUM_DATA_COLUMNS\t{processDataStandardFormat.Columns.Count.ToString().PadLeft(9, '0')}"); results.Add($"NUM_DATA_COLUMNS\t{processDataStandardFormat.Columns.Count.ToString().PadLeft(9, '0')}");
@ -367,6 +378,8 @@ internal class ProcessDataStandardFormat
results.Add("LOGISTICS_COLUMN\tA_LOGISTICS"); results.Add("LOGISTICS_COLUMN\tA_LOGISTICS");
results.Add("LOGISTICS_COLUMN\tB_LOGISTICS"); results.Add("LOGISTICS_COLUMN\tB_LOGISTICS");
results.AddRange(processDataStandardFormat.Logistics); results.AddRange(processDataStandardFormat.Logistics);
results.Add("EOF");
results.AddRange(processDataStandardFormat.InputLines.Select(l => l.Replace('\t', '|')));
File.WriteAllText(path, string.Join(Environment.NewLine, results)); File.WriteAllText(path, string.Join(Environment.NewLine, results));
} }

View File

@ -1,6 +1,5 @@
#if true #if true
using Adaptation.FileHandlers.json.WorkItems; using Adaptation.FileHandlers.json.WorkItems;
using Adaptation.FileHandlers.Priority;
using Adaptation.Shared; using Adaptation.Shared;
using Adaptation.Shared.Methods; using Adaptation.Shared.Methods;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
@ -190,18 +189,6 @@ public class MESAFIBACKLOG
Assert.IsFalse(string.IsNullOrEmpty(extractResult?.Item1)); Assert.IsFalse(string.IsNullOrEmpty(extractResult?.Item1));
Assert.IsNotNull(extractResult.Item3); Assert.IsNotNull(extractResult.Item3);
Assert.IsNotNull(extractResult.Item4); Assert.IsNotNull(extractResult.Item4);
WeightedShortestJobFirstHub weightedShortestJobFirstHub = new();
Notification notification = new(fibonacci: null,
id: 1107438888,
inverse: null,
machineId: Environment.MachineName,
page: "effort",
remoteIpAddress: "10.95.36.87",
site: "MES",
time: 1737573418926,
username: Environment.UserName,
value: 1);
weightedShortestJobFirstHub.NotifyAll(notification);
NonThrowTryCatch(); NonThrowTryCatch();
} }

View File

@ -154,6 +154,7 @@
<Compile Include="Adaptation\FileHandlers\Priority\Settings.cs" /> <Compile Include="Adaptation\FileHandlers\Priority\Settings.cs" />
<Compile Include="Adaptation\FileHandlers\Priority\Startup.cs" /> <Compile Include="Adaptation\FileHandlers\Priority\Startup.cs" />
<Compile Include="Adaptation\FileHandlers\Priority\WeightedShortestJobFirstHub.cs" /> <Compile Include="Adaptation\FileHandlers\Priority\WeightedShortestJobFirstHub.cs" />
<Compile Include="Adaptation\FileHandlers\Priority\WeightedShortestJobFirstModule.cs" />
<Compile Include="Adaptation\FileHandlers\Priority\WorkItem.cs" /> <Compile Include="Adaptation\FileHandlers\Priority\WorkItem.cs" />
<Compile Include="Adaptation\FileHandlers\Processed\FileRead.cs" /> <Compile Include="Adaptation\FileHandlers\Processed\FileRead.cs" />
<Compile Include="Adaptation\FileHandlers\SPaCe\FileRead.cs" /> <Compile Include="Adaptation\FileHandlers\SPaCe\FileRead.cs" />
@ -214,32 +215,14 @@
<Version>0.15.1</Version> <Version>0.15.1</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Infineon.EAF.Runtime"> <PackageReference Include="Infineon.EAF.Runtime">
<Version>2.58.0</Version> <Version>2.59.0</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.AspNet.SignalR.SelfHost"> <PackageReference Include="Nancy.Owin">
<Version>2.4.3</Version> <Version>2.0.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.AspNet.SignalR.Core">
<Version>2.4.3</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Owin"> <PackageReference Include="Owin">
<Version>1.0.0</Version> <Version>1.0.0</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.Owin">
<Version>2.1.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.Owin.Cors">
<Version>2.1.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.Owin.Security">
<Version>2.1.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.Owin.Hosting">
<Version>2.1.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.TeamFoundationServer.Client">
<Version>16.205.1</Version>
</PackageReference>
<PackageReference Include="System.Text.Json"> <PackageReference Include="System.Text.Json">
<Version>8.0.3</Version> <Version>8.0.3</Version>
</PackageReference> </PackageReference>