private static void SearchFahLogUnitDataProjects(UnitInfo unit, UnitRunData unitRunData) { Debug.Assert(unit != null); Debug.Assert(unitRunData != null); for (int i = 0; i < unitRunData.ProjectInfoList.Count; i++) { if (ProjectsMatch(unit, unitRunData.ProjectInfoList[i])) { unitRunData.ProjectInfoIndex = i; } } }
private static UnitInfo BuildUnitInfo(QueueEntry queueEntry, ClientRun clientRun, UnitRun unitRun, UnitInfoLogData unitInfoLogData, bool matchOverride = false) { // queueEntry can be null Debug.Assert(clientRun != null); // unitInfoLogData can be null var unit = new UnitInfo(); UnitRunData unitRunData; if (unitRun == null) { if (matchOverride) { unitRunData = new UnitRunData(); } else { return(null); } } else { unit.LogLines = unitRun.ToList(); unitRunData = unitRun.Data; } unit.UnitStartTimeStamp = unitRunData.UnitStartTimeStamp ?? TimeSpan.MinValue; unit.FramesObserved = unitRunData.FramesObserved; unit.CoreVersion = unitRunData.CoreVersion; unit.UnitResult = unitRunData.WorkUnitResult; if (queueEntry != null) { UpdateUnitInfoFromQueueData(unit, queueEntry); SearchFahLogUnitDataProjects(unit, unitRunData); UpdateUnitInfoFromLogData(unit, clientRun.Data, unitRunData, unitInfoLogData); if (!ProjectsMatch(unit, unitRunData) && !ProjectsMatch(unit, unitInfoLogData) && !matchOverride) { return(null); } } else { UpdateUnitInfoFromLogData(unit, clientRun.Data, unitRunData, unitInfoLogData); } return(unit); }
private static void UpdateUnitInfoFromLogData(UnitInfo unitInfo, ClientRunData clientRunData, UnitRunData unitRunData, UnitInfoLogData unitInfoLogData) { Debug.Assert(unitInfo != null); Debug.Assert(clientRunData != null); Debug.Assert(unitRunData != null); // unitInfoLogData can be null /* Project (R/C/G) (Could have already been read through Queue) */ if (unitInfo.ProjectIsUnknown()) { unitInfo.ProjectID = unitRunData.ProjectID; unitInfo.ProjectRun = unitRunData.ProjectRun; unitInfo.ProjectClone = unitRunData.ProjectClone; unitInfo.ProjectGen = unitRunData.ProjectGen; } if (unitRunData.Threads > 1) { unitInfo.SlotType = SlotType.CPU; } if (unitInfoLogData != null) { unitInfo.ProteinName = unitInfoLogData.ProteinName; /* Tag (Could have already been read through Queue) */ if (unitInfo.ProteinTag.Length == 0) { unitInfo.ProteinTag = unitInfoLogData.ProteinTag; } /* DownloadTime (Could have already been read through Queue) */ if (unitInfo.DownloadTime.IsUnknown()) { unitInfo.DownloadTime = unitInfoLogData.DownloadTime; } /* DueTime (Could have already been read through Queue) */ if (unitInfo.DueTime.IsUnknown()) { unitInfo.DueTime = unitInfoLogData.DueTime; } /* FinishedTime (Not available in unitinfo log) */ /* Project (R/C/G) (Could have already been read through Queue) */ if (unitInfo.ProjectIsUnknown()) { unitInfo.ProjectID = unitInfoLogData.ProjectID; unitInfo.ProjectRun = unitInfoLogData.ProjectRun; unitInfo.ProjectClone = unitInfoLogData.ProjectClone; unitInfo.ProjectGen = unitInfoLogData.ProjectGen; } } /* FoldingID and Team from last ClientRun (Could have already been read through Queue) */ if (unitInfo.FoldingID == Constants.DefaultFoldingID && unitInfo.Team == Constants.DefaultTeam) { if (!String.IsNullOrEmpty(clientRunData.FoldingID)) { unitInfo.FoldingID = clientRunData.FoldingID; unitInfo.Team = clientRunData.Team; } } // The queue will have the FoldingID and Team that was set in the client when the work unit was assigned. // If the user subsequently changed their FoldingID and Team before this unit was completed the // FoldingID and Team read from the queue will NOT reflect that change. //if (unitInfo.FoldingID != clientRunData.FoldingID || unitInfo.Team != clientRunData.Team) //{ // if (!String.IsNullOrEmpty(clientRunData.FoldingID)) // { // unitInfo.FoldingID = clientRunData.FoldingID; // unitInfo.Team = clientRunData.Team; // } //} }
private static UnitInfo BuildUnitInfo(QueueEntry queueEntry, ClientRun clientRun, UnitRun unitRun, UnitInfoLogData unitInfoLogData, bool matchOverride = false) { // queueEntry can be null Debug.Assert(clientRun != null); // unitInfoLogData can be null var unit = new UnitInfo(); UnitRunData unitRunData; if (unitRun == null) { if (matchOverride) { unitRunData = new UnitRunData(); } else { return null; } } else { unit.LogLines = unitRun.ToList(); unitRunData = unitRun.Data; } unit.UnitStartTimeStamp = unitRunData.UnitStartTimeStamp ?? TimeSpan.MinValue; unit.FramesObserved = unitRunData.FramesObserved; unit.CoreVersion = unitRunData.CoreVersion; unit.UnitResult = unitRunData.WorkUnitResult; if (queueEntry != null) { UpdateUnitInfoFromQueueData(unit, queueEntry); SearchFahLogUnitDataProjects(unit, unitRunData); UpdateUnitInfoFromLogData(unit, clientRun.Data, unitRunData, unitInfoLogData); if (!ProjectsMatch(unit, unitRunData) && !ProjectsMatch(unit, unitInfoLogData) && !matchOverride) { return null; } } else { UpdateUnitInfoFromLogData(unit, clientRun.Data, unitRunData, unitInfoLogData); } return unit; }
private static UnitRunData GetUnitRunDataFahClient(UnitRun unitRun) { var unitRunData = new UnitRunData(); foreach (var line in unitRun.LogLines) { switch (line.LineType) { case LogLineType.WorkUnitWorking: unitRunData.UnitStartTimeStamp = line.TimeStamp; break; case LogLineType.WorkUnitFrame: if (unitRunData.UnitStartTimeStamp == null) { unitRunData.UnitStartTimeStamp = line.TimeStamp; } if (line.LineData != null) { unitRunData.FramesObserved++; } break; case LogLineType.WorkUnitCoreVersion: if (Math.Abs(unitRunData.CoreVersion) < Single.Epsilon && line.LineData != null) { unitRunData.CoreVersion = (float)line.LineData; } break; case LogLineType.WorkUnitProject: unitRunData.ProjectInfoList.Add((IProjectInfo)line.LineData); break; case LogLineType.WorkUnitCoreReturn: unitRunData.WorkUnitResult = (WorkUnitResult)line.LineData; break; } } return unitRunData; }
private static UnitRunData GetUnitRunDataLegacy(UnitRun unitRun) { bool clientWasPaused = false; bool lookForProject = true; var unitRunData = new UnitRunData(); foreach (var line in unitRun.LogLines) { #region Unit Start if ((line.LineType == LogLineType.WorkUnitProcessing || line.LineType == LogLineType.WorkUnitWorking || line.LineType == LogLineType.WorkUnitStart || line.LineType == LogLineType.WorkUnitFrame) && unitRunData.UnitStartTimeStamp == null) { unitRunData.UnitStartTimeStamp = LogLineParser.Common.GetTimeStamp(line); } if (line.LineType == LogLineType.WorkUnitPaused || line.LineType == LogLineType.WorkUnitPausedForBattery) { clientWasPaused = true; } else if ((line.LineType == LogLineType.WorkUnitWorking || line.LineType == LogLineType.WorkUnitResumeFromBattery || line.LineType == LogLineType.WorkUnitFrame) && clientWasPaused) { clientWasPaused = false; // Reset the Frames Observed Count // This will cause the Instance to only use frames beyond this point to // set frame times and determine status - Issue 13 (Revised) unitRunData.FramesObserved = 0; // Reset the Unit Start Time unitRunData.UnitStartTimeStamp = LogLineParser.Common.GetTimeStamp(line); } #endregion #region Project if (lookForProject) { // If we encounter a work unit frame, we should have // already seen the Project Information, stop looking if (line.LineType == LogLineType.WorkUnitFrame) { lookForProject = false; } if (line.LineType == LogLineType.WorkUnitProject) { if (line.LineData != null) { unitRunData.ProjectInfoList.Add((IProjectInfo)line.LineData); } } } #endregion switch (line.LineType) { case LogLineType.WorkUnitFrame: if (line.LineData != null) { unitRunData.FramesObserved++; } break; case LogLineType.WorkUnitCoreVersion: if (Math.Abs(unitRunData.CoreVersion) < Single.Epsilon && line.LineData != null) { unitRunData.CoreVersion = (float)line.LineData; } break; case LogLineType.WorkUnitCoreShutdown: case LogLineType.ClientCoreCommunicationsError: unitRunData.WorkUnitResult = (WorkUnitResult)line.LineData; break; case LogLineType.WorkUnitCallingCore: unitRunData.Threads = (int)line.LineData; break; case LogLineType.ClientNumberOfUnitsCompleted: unitRunData.TotalCompletedUnits = (int)line.LineData; break; } } return unitRunData; }
internal static void IncrementCompletedOrFailedUnitCount(SlotRunData slotRunData, UnitRunData unitRunData) { if (unitRunData.WorkUnitResult == WorkUnitResult.FINISHED_UNIT) { slotRunData.CompletedUnits++; } else if (IsFailedWorkUnit(unitRunData.WorkUnitResult)) { slotRunData.FailedUnits++; } }
internal static void IncrementCompletedOrFailedUnitCount(SlotRunData slotRunData, UnitRunData unitRunData) { if (unitRunData.WorkUnitResult == WorkUnitResult.FINISHED_UNIT) { slotRunData.CompletedUnits++; } else if (IsFailedWorkUnit(unitRunData.WorkUnitResult)) { slotRunData.FailedUnits++; } else if (unitRunData is Legacy.LegacyUnitRunData legacyUnitRunData && legacyUnitRunData.ClientCoreCommunicationsError) { slotRunData.FailedUnits++; } }