private void btnParse_Click(object sender, EventArgs e) { if (txtLogPath.Text.Length == 0) { return; } treeView1.Nodes.Clear(); if (File.Exists(txtLogPath.Text)) { #if DEBUG var sw = Stopwatch.StartNew(); #endif _fahLog = FahClientLog.Read(txtLogPath.Text); #if DEBUG sw.Stop(); Debug.WriteLine("FahLog.Read ET: {0}", sw.Elapsed); #endif _logLines = LogLineEnumerable.Create(_fahLog).ToList(); PopulateClientRunsInTree(_fahLog); richTextBox1.SetLogLines(_logLines, true); } else { MessageBox.Show(this, String.Format(CultureInfo.CurrentCulture, "File '{0}' does not exist.", txtLogPath.Text), Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
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; } }
public ClientMessageAggregatorResult AggregateData() { var result = new ClientMessageAggregatorResult(); result.CurrentUnitIndex = -1; ClientRun clientRun = FahClient.Messages.Log.ClientRuns.Last(); SlotRun slotRun = null; if (clientRun.SlotRuns.ContainsKey(SlotModel.SlotID)) { slotRun = clientRun.SlotRuns[SlotModel.SlotID]; } result.StartTime = clientRun.Data.StartTime; if (FahClient.Logger.IsDebugEnabled) { foreach (var s in LogLineEnumerable.Create(clientRun).Where(x => x.Data is LogLineDataParserError)) { FahClient.Logger.Debug(String.Format(Logger.NameFormat, FahClient.Settings.Name, $"Failed to parse log line: {s}")); } } var unitCollection = FahClient.Messages.UnitCollection; var options = FahClient.Messages.Options; var currentWorkUnit = SlotModel.WorkUnitModel.WorkUnit; var info = FahClient.Messages.Info; BuildWorkUnits(result, slotRun, unitCollection, options, currentWorkUnit, SlotModel.SlotID); result.WorkUnitQueue = BuildWorkUnitQueue(unitCollection, info, SlotModel); if (result.WorkUnits.ContainsKey(result.CurrentUnitIndex) && result.WorkUnits[result.CurrentUnitIndex].LogLines != null) { result.CurrentLogLines = result.WorkUnits[result.CurrentUnitIndex].LogLines; } else if (slotRun != null) { result.CurrentLogLines = LogLineEnumerable.Create(slotRun).ToList(); } else { result.CurrentLogLines = LogLineEnumerable.Create(clientRun).ToList(); } return(result); }
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; } }
/// <summary> /// Aggregate Data and return UnitInfo Dictionary. /// </summary> public DataAggregatorResult AggregateData(ClientRun clientRun, UnitCollection unitCollection, Info info, Options options, SlotOptions slotOptions, UnitInfo currentUnitInfo, int slotId) { if (clientRun == null) { throw new ArgumentNullException(nameof(clientRun)); } if (unitCollection == null) { throw new ArgumentNullException(nameof(unitCollection)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (slotOptions == null) { throw new ArgumentNullException(nameof(slotOptions)); } if (currentUnitInfo == null) { throw new ArgumentNullException(nameof(currentUnitInfo)); } var result = new DataAggregatorResult(); result.CurrentUnitIndex = -1; SlotRun slotRun = null; if (clientRun.SlotRuns.ContainsKey(slotId)) { slotRun = clientRun.SlotRuns[slotId]; } result.StartTime = clientRun.Data.StartTime; if (Logger.IsDebugEnabled) { foreach (var s in LogLineEnumerable.Create(clientRun).Where(x => x.Data is LogLineDataParserError)) { Logger.DebugFormat(Constants.ClientNameFormat, ClientName, String.Format("Failed to parse log line: {0}", s)); } } GenerateUnitInfoDataFromQueue(result, slotRun, unitCollection, options, slotOptions, currentUnitInfo, slotId); result.Queue = BuildQueueDictionary(unitCollection, info, slotOptions, slotId); if (result.UnitInfos.ContainsKey(result.CurrentUnitIndex) && result.UnitInfos[result.CurrentUnitIndex].LogLines != null) { result.CurrentLogLines = result.UnitInfos[result.CurrentUnitIndex].LogLines; } else if (slotRun != null) { result.CurrentLogLines = LogLineEnumerable.Create(slotRun).ToList(); } else { result.CurrentLogLines = LogLineEnumerable.Create(clientRun).ToList(); } return(result); }
private void btnGenCode_Click(object sender, EventArgs e) { var sb = new StringBuilder(); int i = 0; int j = 0; int k = 0; foreach (var clientRun in _fahLog.ClientRuns) { sb.AppendLine("// Setup ClientRun " + i); sb.AppendLine((i == 0 ? "var " : String.Empty) + "expectedRun = new ClientRun(null, " + clientRun.ClientStartIndex + ");"); foreach (var slotRun in clientRun.SlotRuns.Values) { sb.AppendLine(); sb.AppendLine("// Setup SlotRun " + slotRun.FoldingSlot); sb.AppendLine((j == 0 ? "var " : String.Empty) + "expectedSlotRun = new SlotRun(expectedRun, " + slotRun.FoldingSlot + ");"); sb.AppendLine("expectedRun.SlotRuns.Add(" + slotRun.FoldingSlot + ", expectedSlotRun);"); int unitCount = 0; foreach (var unitRun in slotRun.UnitRuns) { sb.AppendLine(); sb.AppendLine("// Setup SlotRun " + slotRun.FoldingSlot + " - UnitRun " + unitCount); sb.AppendLine((k == 0 ? "var " : String.Empty) + "expectedUnitRun = new UnitRun(expectedSlotRun, " + unitRun.QueueIndex + "," + unitRun.StartIndex + "," + unitRun.EndIndex + ");"); if (unitRun.Data is FahClientUnitRunData) { sb.AppendLine((k == 0 ? "var " : String.Empty) + "expectedUnitRunData = new FahClientUnitRunData();"); } if (unitRun.Data.UnitStartTimeStamp.HasValue) { var st1 = unitRun.Data.UnitStartTimeStamp.Value; sb.AppendLine("expectedUnitRunData.UnitStartTimeStamp = new TimeSpan(" + st1.Hours + ", " + st1.Minutes + ", " + st1.Seconds + ");"); } if (unitRun.Data.CoreVersion == null) { sb.AppendLine("expectedUnitRunData.CoreVersion = null;"); } else { sb.AppendLine("expectedUnitRunData.CoreVersion = \"" + unitRun.Data.CoreVersion + "\";"); } sb.AppendLine("expectedUnitRunData.FramesObserved = " + unitRun.Data.FramesObserved + ";"); sb.AppendLine("expectedUnitRunData.ProjectID = " + unitRun.Data.ProjectID + ";"); sb.AppendLine("expectedUnitRunData.ProjectRun = " + unitRun.Data.ProjectRun + ";"); sb.AppendLine("expectedUnitRunData.ProjectClone = " + unitRun.Data.ProjectClone + ";"); sb.AppendLine("expectedUnitRunData.ProjectGen = " + unitRun.Data.ProjectGen + ";"); if (!String.IsNullOrEmpty(unitRun.Data.WorkUnitResult)) { sb.AppendLine("expectedUnitRunData.WorkUnitResult = WorkUnitResult." + unitRun.Data.WorkUnitResult + ";"); } else { sb.AppendLine("expectedUnitRunData.WorkUnitResult = WorkUnitResult.None;"); } sb.AppendLine((k == 0 ? "var " : String.Empty) + "frames = new Dictionary<int, WorkUnitFrameData>();"); int frameDataCount = 0; foreach (var kvp in unitRun.Data.Frames) { sb.AppendLine((k == 0 && frameDataCount == 0 ? "var " : String.Empty) + "frameData = new WorkUnitFrameData();"); sb.AppendLine("frameData.ID = " + kvp.Value.ID + ";"); sb.AppendLine("frameData.RawFramesComplete = " + kvp.Value.RawFramesComplete + ";"); sb.AppendLine("frameData.RawFramesTotal = " + kvp.Value.RawFramesTotal + ";"); sb.AppendLine("frameData.TimeStamp = TimeSpan.FromTicks(" + kvp.Value.TimeStamp.Ticks + ");"); sb.AppendLine("frameData.Duration = TimeSpan.FromTicks(" + kvp.Value.Duration.Ticks + ");"); sb.AppendLine("frames.Add(frameData.ID, frameData);"); frameDataCount++; } sb.AppendLine("expectedUnitRunData.Frames = frames;"); sb.AppendLine("expectedUnitRun.Data = expectedUnitRunData;"); sb.AppendLine("expectedSlotRun.UnitRuns.Add(expectedUnitRun);"); unitCount++; k++; } sb.AppendLine(); sb.AppendLine("// Setup SlotRunData " + slotRun.FoldingSlot); if (slotRun.Data is FahClientSlotRunData fahClientSlotRunData) { sb.AppendLine((j == 0 ? "var " : String.Empty) + "expectedSlotRunData = new FahClientSlotRunData();"); sb.AppendLine("expectedSlotRunData.CompletedUnits = " + fahClientSlotRunData.CompletedUnits + ";"); sb.AppendLine("expectedSlotRunData.FailedUnits = " + fahClientSlotRunData.FailedUnits + ";"); sb.AppendLine("expectedSlotRun.Data = expectedSlotRunData;"); } j++; } sb.AppendLine(); sb.AppendLine("// Setup ClientRunData " + i); if (clientRun.Data is FahClientClientRunData) { sb.AppendLine((i == 0 ? "var " : String.Empty) + "expectedRunData = new FahClientClientRunData();"); var st2 = clientRun.Data.StartTime; sb.AppendLine("expectedRunData.StartTime = new DateTime(" + st2.Year + ", " + st2.Month + ", " + st2.Day + ", " + st2.Hour + ", " + st2.Minute + ", " + st2.Second + ", DateTimeKind.Utc);"); sb.AppendLine("expectedRun.Data = expectedRunData;"); } sb.AppendLine(); sb.AppendLine((i == 0 ? "var " : String.Empty) + "actualRun = fahLog.ClientRuns.ElementAt(" + i + ");"); sb.AppendLine("AssertClientRun.AreEqual(expectedRun, actualRun, true);"); sb.AppendLine(); sb.AppendLine(String.Format("Assert.AreEqual({0}, LogLineEnumerable.Create(actualRun).Count(x => x.Data is LogLineDataParserError));", LogLineEnumerable.Create(clientRun).Count(x => x.Data is LogLineDataParserError))); i++; } var form2 = new TextDialog(); form2.SetText(sb.ToString()); form2.Show(); }
public void Client_v7_10_0_UnitDataOnly() { const int slotId = 0; _dataAggregator.ClientName = "Client_v7_10"; var fahLog = new FahClientLog(); string filteredLogText = String.Join(Environment.NewLine, File.ReadLines("..\\..\\..\\TestFiles\\Client_v7_10\\log.txt").Where(x => x.Length != 0).Take(82)); using (var textReader = new StringReader(filteredLogText)) using (var reader = new FahClientLogTextReader(textReader)) { fahLog.Read(reader); } string message = File.ReadAllText("..\\..\\..\\TestFiles\\Client_v7_10\\units.txt"); var unitCollection = new UnitCollection(); unitCollection.Fill(JsonMessageConnection.GetNextJsonMessage(ref message)); message = File.ReadAllText("..\\..\\..\\TestFiles\\Client_v7_10\\info.txt"); var info = new Info(); info.Fill(JsonMessageConnection.GetNextJsonMessage(ref message)); message = File.ReadAllText("..\\..\\..\\TestFiles\\Client_v7_10\\options.txt"); var options = new Options(); options.Fill(JsonMessageConnection.GetNextJsonMessage(ref message)); message = File.ReadAllText("..\\..\\..\\TestFiles\\Client_v7_10\\slot-options1.txt"); var slotOptions = new SlotOptions(); slotOptions.Fill(JsonMessageConnection.GetNextJsonMessage(ref message)); var result = _dataAggregator.AggregateData(fahLog.ClientRuns.Last(), unitCollection, info, options, slotOptions, new UnitInfo(), slotId); Assert.AreEqual(1, result.UnitInfos.Count); Assert.IsFalse(result.UnitInfos.Any(x => x.Value == null)); #region Check Data Aggregator Assert.IsNotNull(result.Queue); Assert.AreEqual(1, result.CurrentUnitIndex); Assert.AreEqual(new DateTime(2012, 1, 11, 3, 24, 22), result.StartTime); Assert.AreEqual(null, result.Arguments); Assert.AreEqual(null, result.ClientVersion); Assert.AreEqual(null, result.UserID); Assert.AreEqual(0, result.MachineID); Assert.AreEqual(SlotStatus.Unknown, result.Status); Assert.IsNotNull(result.CurrentLogLines); Assert.IsTrue(result.UnitInfos.All(x => x.Value.LogLines == null)); if (result.UnitInfos.ContainsKey(result.CurrentUnitIndex)) { Assert.AreEqual(result.CurrentLogLines, LogLineEnumerable.Create(fahLog.ClientRuns.Last())); } #endregion var unitInfoData = result.UnitInfos[result.CurrentUnitIndex]; #region Check Unit Info Data Values Assert.AreEqual(null, unitInfoData.OwningSlotName); Assert.AreEqual(null, unitInfoData.OwningClientName); Assert.AreEqual(null, unitInfoData.OwningClientPath); Assert.AreEqual(-1, unitInfoData.OwningSlotId); Assert.AreEqual(DateTime.MinValue, unitInfoData.UnitRetrievalTime); Assert.AreEqual("harlam357", unitInfoData.FoldingID); Assert.AreEqual(32, unitInfoData.Team); Assert.AreEqual(SlotType.CPU, unitInfoData.SlotType); Assert.AreEqual(new DateTime(2012, 1, 10, 23, 20, 27), unitInfoData.DownloadTime); Assert.AreEqual(new DateTime(2012, 1, 22, 16, 22, 51), unitInfoData.DueTime); Assert.AreEqual(TimeSpan.Zero, unitInfoData.UnitStartTimeStamp); Assert.AreEqual(DateTime.MinValue, unitInfoData.FinishedTime); Assert.AreEqual(0, unitInfoData.CoreVersion); Assert.AreEqual(7610, unitInfoData.ProjectID); Assert.AreEqual(630, unitInfoData.ProjectRun); Assert.AreEqual(0, unitInfoData.ProjectClone); Assert.AreEqual(59, unitInfoData.ProjectGen); Assert.AreEqual(String.Empty, unitInfoData.ProteinName); Assert.AreEqual(String.Empty, unitInfoData.ProteinTag); Assert.AreEqual(WorkUnitResult.Unknown, unitInfoData.UnitResult); Assert.AreEqual(0, unitInfoData.FramesObserved); Assert.IsNull(unitInfoData.CurrentFrame); Assert.AreEqual("A4", unitInfoData.CoreID); #endregion }
public async Task FahClientMessageAggregator_Client_v7_10_SlotID_0_UnitDataOnly() { // Arrange var settings = new ClientSettings { Name = "Client_v7_10" }; var fahClient = CreateClient(settings); string filteredLogText = String.Join(Environment.NewLine, File.ReadLines(@"..\..\..\..\TestFiles\Client_v7_10\log.txt").Where(x => x.Length != 0).Take(82)); using (var textReader = new StringReader(filteredLogText)) using (var reader = new FahClientLogTextReader(textReader)) { await fahClient.Messages.Log.ReadAsync(reader); } var extractor = new FahClientJsonMessageExtractor(); await fahClient.Messages.UpdateMessageAsync( extractor.Extract(new StringBuilder( File.ReadAllText(@"..\..\..\..\TestFiles\Client_v7_10\units.txt")))); await fahClient.Messages.UpdateMessageAsync( extractor.Extract(new StringBuilder( File.ReadAllText(@"..\..\..\..\TestFiles\Client_v7_10\info.txt")))); await fahClient.Messages.UpdateMessageAsync( extractor.Extract(new StringBuilder( File.ReadAllText(@"..\..\..\..\TestFiles\Client_v7_10\options.txt")))); await fahClient.Messages.UpdateMessageAsync( extractor.Extract(new StringBuilder( File.ReadAllText(@"..\..\..\..\TestFiles\Client_v7_10\slots.txt")))); await fahClient.Messages.UpdateMessageAsync( extractor.Extract(new StringBuilder( File.ReadAllText(@"..\..\..\..\TestFiles\Client_v7_10\slot-options1.txt")))); await fahClient.Messages.UpdateMessageAsync( extractor.Extract(new StringBuilder( File.ReadAllText(@"..\..\..\..\TestFiles\Client_v7_10\slot-options2.txt")))); var slotModel = new SlotModel(fahClient) { SlotID = 0 }; var aggregator = new FahClientMessageAggregator(fahClient, slotModel); // Act var result = aggregator.AggregateData(); // Assert Assert.AreEqual(1, result.WorkUnits.Count); Assert.IsFalse(result.WorkUnits.Any(x => x.Value == null)); #region Check Data Aggregator Assert.IsNotNull(result.WorkUnitQueue); Assert.AreEqual(1, result.CurrentUnitIndex); Assert.AreEqual(new DateTime(2012, 1, 11, 3, 24, 22), result.StartTime); Assert.AreEqual(null, result.Arguments); Assert.AreEqual(null, result.ClientVersion); Assert.AreEqual(null, result.UserID); Assert.AreEqual(0, result.MachineID); Assert.AreEqual(SlotStatus.Unknown, result.Status); Assert.IsNotNull(result.CurrentLogLines); Assert.IsTrue(result.WorkUnits.All(x => x.Value.LogLines == null)); if (result.WorkUnits.ContainsKey(result.CurrentUnitIndex)) { Assert.AreEqual(result.CurrentLogLines, LogLineEnumerable.Create(fahClient.Messages.Log.ClientRuns.Last())); } #endregion var unitInfoData = result.WorkUnits[result.CurrentUnitIndex]; #region Check Unit Info Data Values Assert.AreEqual(DateTime.MinValue, unitInfoData.UnitRetrievalTime); Assert.AreEqual("harlam357", unitInfoData.FoldingID); Assert.AreEqual(32, unitInfoData.Team); Assert.AreEqual(new DateTime(2012, 1, 10, 23, 20, 27), unitInfoData.Assigned); Assert.AreEqual(new DateTime(2012, 1, 22, 16, 22, 51), unitInfoData.Timeout); Assert.AreEqual(TimeSpan.Zero, unitInfoData.UnitStartTimeStamp); Assert.AreEqual(DateTime.MinValue, unitInfoData.Finished); Assert.AreEqual(0, unitInfoData.CoreVersion); Assert.AreEqual(7610, unitInfoData.ProjectID); Assert.AreEqual(630, unitInfoData.ProjectRun); Assert.AreEqual(0, unitInfoData.ProjectClone); Assert.AreEqual(59, unitInfoData.ProjectGen); Assert.AreEqual(null, unitInfoData.ProteinName); Assert.AreEqual(null, unitInfoData.ProteinTag); Assert.AreEqual(WorkUnitResult.Unknown, unitInfoData.UnitResult); Assert.AreEqual(0, unitInfoData.FramesObserved); Assert.IsNull(unitInfoData.CurrentFrame); Assert.AreEqual("A4", unitInfoData.CoreID); #endregion }