Example #1
0
        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;
                }
            }
        }
Example #2
0
        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 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;
      }
Example #6
0
 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;
 }
Example #7
0
      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;
      }
Example #8
0
 internal static void IncrementCompletedOrFailedUnitCount(SlotRunData slotRunData, UnitRunData unitRunData)
 {
     if (unitRunData.WorkUnitResult == WorkUnitResult.FINISHED_UNIT)
     {
         slotRunData.CompletedUnits++;
     }
     else if (IsFailedWorkUnit(unitRunData.WorkUnitResult))
     {
         slotRunData.FailedUnits++;
     }
 }
Example #9
0
 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++;
     }
 }
Example #10
0
        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;
            //   }
            //}
        }