Esempio n. 1
0
        private void UpdateUnitInfoFromLogData(UnitInfo unitInfo, UnitRun unitRun)
        {
            Debug.Assert(unitInfo != null);
            Debug.Assert(unitRun != null);

            unitInfo.LogLines           = LogLineEnumerable.Create(unitRun).ToList();
            unitInfo.FrameData          = unitRun.Data.FrameDataDictionary;
            unitInfo.UnitStartTimeStamp = unitRun.Data.UnitStartTimeStamp ?? TimeSpan.MinValue;
            unitInfo.FramesObserved     = unitRun.Data.FramesObserved;
            unitInfo.CoreVersion        = ParseCoreVersion(unitRun.Data.CoreVersion);
            unitInfo.UnitResult         = WorkUnitResultString.ToWorkUnitResult(unitRun.Data.WorkUnitResult);

            // there is no finished time available from the client API
            // since the unit history database won't write the same
            // result twice, the first time this hits use the local UTC
            // value for the finished time... not as good as what was
            // available with v6.
            if (unitInfo.UnitResult.IsTerminating())
            {
                var finishedTime = DateTime.UtcNow;
                //string message = String.Format(CultureInfo.CurrentCulture,
                //   "Setting Finished Time {0} for {1}.", finishedTime, unitInfo.ToProjectInfo());
                //Logger.Debug(Constants.ClientNameFormat, ClientName, message);
                unitInfo.FinishedTime = finishedTime;
            }
        }
Esempio n. 2
0
            /// <summary>
            /// Creates a new <see cref="UnitRunData"/> object from the information contained in the <see cref="UnitRun"/> object.
            /// </summary>
            protected override UnitRunData OnGetUnitRunData(UnitRun unitRun)
            {
                var unitRunData         = new FahClientUnitRunData();
                var frameDataDictionary = new Dictionary <int, WorkUnitFrameData>();

                foreach (var line in unitRun.LogLines)
                {
                    switch (line.LineType)
                    {
                    case LogLineType.WorkUnitWorking:
                        unitRunData.UnitStartTimeStamp = line.TimeStamp;
                        unitRunData.WorkUnitResult     = Internal.WorkUnitResult.None;
                        break;

                    case LogLineType.WorkUnitFrame:
                        if (unitRunData.UnitStartTimeStamp == null)
                        {
                            unitRunData.UnitStartTimeStamp = line.TimeStamp;
                        }
                        if (line.Data != null && !(line.Data is LogLineDataParserError))
                        {
                            unitRunData.FramesObserved++;
                            if (line.Data is WorkUnitFrameData frameData)
                            {
                                // Make a copy so UnitRunData is not holding a reference to the same
                                // WorkUnitFrameData instance as the LogLine it was sourced from.
                                frameDataDictionary.TryAdd(frameData.ID, new WorkUnitFrameData(frameData));
                            }
                        }
                        break;

                    case LogLineType.WorkUnitCoreVersion:
                        if (line.Data != null && !(line.Data is LogLineDataParserError))
                        {
                            unitRunData.CoreVersion = (string)line.Data;
                        }
                        break;

                    case LogLineType.WorkUnitProject:
                        var projectData = (WorkUnitProjectData)line.Data;
                        unitRunData.ProjectID    = projectData.ProjectID;
                        unitRunData.ProjectRun   = projectData.ProjectRun;
                        unitRunData.ProjectClone = projectData.ProjectClone;
                        unitRunData.ProjectGen   = projectData.ProjectGen;
                        break;

                    case LogLineType.WorkUnitCoreReturn:
                        unitRunData.WorkUnitResult = (string)line.Data;
                        if (unitRunData.WorkUnitResult == Internal.WorkUnitResult.INTERRUPTED ||
                            unitRunData.WorkUnitResult == Internal.WorkUnitResult.UNKNOWN_ENUM)
                        {
                            unitRunData.FramesObserved = 0;
                        }
                        break;
                    }
                }
                Internal.CommonRunDataAggregator.CalculateFrameDataDurations(frameDataDictionary);
                unitRunData.FrameDataDictionary = frameDataDictionary;
                return(unitRunData);
            }
Esempio n. 3
0
        private static WorkUnit BuildWorkUnit(Unit unit, Options options, UnitRun unitRun)
        {
            Debug.Assert(unit != null);
            Debug.Assert(options != null);

            var workUnit = new WorkUnit();

            PopulateWorkUnitFromFahClientData(workUnit, unit, options);
            if (unitRun != null)
            {
                PopulateWorkUnitFromLogData(workUnit, unitRun);
            }
            return(workUnit);
        }
Esempio n. 4
0
        private static void PopulateWorkUnitFromLogData(WorkUnit workUnit, UnitRun unitRun)
        {
            Debug.Assert(workUnit != null);
            Debug.Assert(unitRun != null);

            workUnit.LogLines           = LogLineEnumerable.Create(unitRun).ToList();
            workUnit.Frames             = unitRun.Data.Frames;
            workUnit.UnitStartTimeStamp = unitRun.Data.UnitStartTimeStamp ?? TimeSpan.MinValue;
            workUnit.FramesObserved     = unitRun.Data.FramesObserved;
            workUnit.CoreVersion        = ParseCoreVersion(unitRun.Data.CoreVersion);
            workUnit.UnitResult         = WorkUnitResultString.ToWorkUnitResult(unitRun.Data.WorkUnitResult);

            // there is no finished time available from the client API
            // since the unit history database won't write the same
            // result twice, the first time this hits use the local UTC
            // value for the finished time... not as good as what was
            // available with v6.
            if (IsTerminating(workUnit))
            {
                workUnit.Finished = DateTime.UtcNow;
            }
        }
Esempio n. 5
0
            private void EnsureUnitRunExists(int lineIndex, int queueIndex)
            {
                var slotRun         = EnsureSlotRunExists(lineIndex, FoldingSlot);
                var unitRun         = new UnitRun(slotRun, queueIndex, lineIndex);
                var previousUnitRun = slotRun.UnitRuns.LastOrDefault();

                if (previousUnitRun != null)
                {
                    previousUnitRun.EndIndex = lineIndex - 1;

                    var clientRun = ClientRuns.Last();
                    foreach (var logLine in _logBuffer.Where(x => x.Index < previousUnitRun.StartIndex))
                    {
                        clientRun.LogLines.Add(logLine);
                    }
                    foreach (var logLine in _logBuffer.Where(x => x.Index >= previousUnitRun.StartIndex && x.Index <= previousUnitRun.EndIndex))
                    {
                        previousUnitRun.LogLines.Add(logLine);
                    }
                    _logBuffer.RemoveAll(x => x.Index <= previousUnitRun.EndIndex);
                }
                slotRun.UnitRuns.Add(unitRun);
            }
Esempio n. 6
0
        private UnitInfo BuildUnitInfo(Unit queueEntry, Options options, SlotOptions slotOptions, UnitRun unitRun)
        {
            Debug.Assert(queueEntry != null);
            Debug.Assert(options != null);
            Debug.Assert(slotOptions != null);

            var unit = new UnitInfo();

            UpdateUnitInfoFromFahClientData(unit, queueEntry, options, slotOptions);
            if (unitRun != null)
            {
                UpdateUnitInfoFromLogData(unit, unitRun);
            }

            return(unit);
        }
Esempio n. 7
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 void UpdateUnitInfoFromLogData(UnitInfo unitInfo, UnitRun unitRun)
      {
         Debug.Assert(unitInfo != null);
         Debug.Assert(unitRun != null);

         unitInfo.LogLines = unitRun.ToList();
         unitInfo.UnitStartTimeStamp = unitRun.Data.UnitStartTimeStamp ?? TimeSpan.MinValue;
         unitInfo.FramesObserved = unitRun.Data.FramesObserved;
         unitInfo.CoreVersion = unitRun.Data.CoreVersion;
         unitInfo.UnitResult = unitRun.Data.WorkUnitResult;

         // there is no finished time available from the client API
         // since the unit history database won't write the same
         // result twice, the first time this hits use the local UTC
         // value for the finished time... not as good as what was
         // available with v6.
         if (unitInfo.UnitResult.IsTerminating())
         {
            var finishedTime = DateTime.UtcNow;
            //string message = String.Format(CultureInfo.CurrentCulture,
            //   "Setting Finished Time {0} for {1}.", finishedTime, unitInfo.ToProjectInfo());
            //Logger.Debug(Constants.ClientNameFormat, ClientName, message);
            unitInfo.FinishedTime = finishedTime;
         }
      }
      private UnitInfo BuildUnitInfo(Unit queueEntry, Options options, SlotOptions slotOptions, UnitRun unitRun)
      {
         Debug.Assert(queueEntry != null);
         Debug.Assert(options != null);
         Debug.Assert(slotOptions != null);

         var unit = new UnitInfo();
         UpdateUnitInfoFromFahClientData(unit, queueEntry, options, slotOptions);
         if (unitRun != null)
         {
            UpdateUnitInfoFromLogData(unit, unitRun);
         }

         return unit;
      }
Esempio n. 10
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;
 }
Esempio n. 11
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;
      }
Esempio n. 12
0
 internal static UnitRunData GetUnitRunData(UnitRun unitRun)
 {
    switch (unitRun.Parent.Parent.Parent.FahLogType)
    {
       case FahLogType.Legacy:
          return GetUnitRunDataLegacy(unitRun);
       case FahLogType.FahClient:
          return GetUnitRunDataFahClient(unitRun);
    }
    throw new ArgumentException("UnitRun FahLogType unknown", "unitRun");
 }
Esempio n. 13
0
            /// <summary>
            /// Creates a new <see cref="UnitRunData"/> object from the information contained in the <see cref="UnitRun"/> object.
            /// </summary>
            protected override UnitRunData OnGetUnitRunData(UnitRun unitRun)
            {
                bool clientWasPaused = false;
                bool lookForProject  = true;

                var unitRunData         = new LegacyUnitRunData();
                var frameDataDictionary = new Dictionary <int, WorkUnitFrameData>();

                foreach (var line in unitRun.LogLines)
                {
                    #region Unit Start

                    if ((line.LineType == LogLineType.WorkUnitProcessing ||
                         line.LineType == LogLineType.WorkUnitWorking ||
                         line.LineType == LogLineType.WorkUnitCoreStart ||
                         line.LineType == LogLineType.WorkUnitFrame) &&
                        unitRunData.UnitStartTimeStamp == null)
                    {
                        unitRunData.UnitStartTimeStamp = line.TimeStamp;
                    }

                    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 = line.TimeStamp;
                    }

                    #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.Data != null && !(line.Data is LogLineDataParserError))
                            {
                                var data = (WorkUnitProjectData)line.Data;
                                unitRunData.ProjectID    = data.ProjectID;
                                unitRunData.ProjectRun   = data.ProjectRun;
                                unitRunData.ProjectClone = data.ProjectClone;
                                unitRunData.ProjectGen   = data.ProjectGen;
                            }
                        }
                    }

                    #endregion

                    switch (line.LineType)
                    {
                    case LogLineType.WorkUnitFrame:
                        if (line.Data != null && !(line.Data is LogLineDataParserError))
                        {
                            unitRunData.FramesObserved++;
                            if (line.Data is WorkUnitFrameData frameData)
                            {
                                // Make a copy so UnitRunData is not holding a reference to the same
                                // WorkUnitFrameData instance as the LogLine it was sourced from.
                                frameDataDictionary.TryAdd(frameData.ID, new WorkUnitFrameData(frameData));
                            }
                        }
                        break;

                    case LogLineType.WorkUnitCoreVersion:
                        if (line.Data != null && !(line.Data is LogLineDataParserError))
                        {
                            unitRunData.CoreVersion = (string)line.Data;
                        }
                        break;

                    case LogLineType.WorkUnitCoreShutdown:
                        unitRunData.WorkUnitResult = (string)line.Data;
                        break;

                    case LogLineType.ClientCoreCommunicationsError:
                        unitRunData.ClientCoreCommunicationsError = true;
                        break;

                    case LogLineType.WorkUnitCallingCore:
                        unitRunData.Threads = (int)line.Data;
                        break;

                    case LogLineType.ClientNumberOfUnitsCompleted:
                        unitRunData.TotalCompletedUnits = (int)line.Data;
                        break;
                    }
                }
                Internal.CommonRunDataAggregator.CalculateFrameDataDurations(frameDataDictionary);
                unitRunData.FrameDataDictionary = frameDataDictionary;
                return(unitRunData);
            }
Esempio n. 14
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);
        }