public void LoadDataAsync(DateTime startUtc, TimeSpan timeSpan, double requestedDensity, Action <IEnumerable <SummaryData> > callback) { var worker = new System.ComponentModel.BackgroundWorker(); worker.DoWork += (s, e) => { lock (this.padlock) { SummaryData initialPoint; var data = this.allKnownSummaryData.Value.Where(p => p.TimestampUtc >= startUtc).ToList(); if (data.Count == 0) { initialPoint = new SummaryData() { TimestampUtc = startUtc.AddSeconds(-1) + timeSpan, TotalKiloHashesAverage5Sec = 1.0 / 10000 }; data.Add(initialPoint); } else { this.EnsureFixedDensity(data, startUtc, timeSpan, requestedDensity); } this.PrefixPadData(data, startUtc, timeSpan.TotalMilliseconds / Math.Max(requestedDensity, 100)); callback(data.OrderBy(p => p.TimestampUtc).ToList()); } }; worker.RunWorkerAsync(); }
private void PerformSummaryNotification(string json) { SummaryData data; if (string.IsNullOrEmpty(json)) { data = new SummaryData() { TimestampUtc = DateTime.UtcNow, TotalHardwareErrors = 0, TotalKiloHashesAverage5Sec = 1 / 10000, TotalStale = 0 }; } else { var d = JsonConvert.DeserializeObject <dynamic>(json); JArray summary = d.SUMMARY; data = new SummaryData() { TimestampUtc = DateTime.UtcNow, TotalHardwareErrors = summary.Select(s => (int)s["Hardware Errors"]).Sum(), TotalKiloHashesAverage5Sec = Math.Max(summary.Select(s => (double)s["MHS 5s"]).Sum() * 1000, 1 / 10000), TotalStale = summary.Select(s => (int)s["Stale"]).Sum() }; } this.Summary(this, new SummaryEventArgs() { Summary = data }); }
public void Add(SummaryData summaryData) { this.allKnownSummaryData.Value.Add(summaryData); this.unsavedData = true; }
private void PerformSummaryNotification(string json) { SummaryData data; if (string.IsNullOrEmpty(json)) { data = new SummaryData() { TimestampUtc = DateTime.UtcNow, TotalHardwareErrors = 0, TotalKiloHashesAverage5Sec = 1 /10000, TotalStale = 0 }; } else { var d = JsonConvert.DeserializeObject<dynamic>(json); JArray summary = d.SUMMARY; data = new SummaryData() { TimestampUtc = DateTime.UtcNow, TotalHardwareErrors = summary.Select(s => (int)s["Hardware Errors"]).Sum(), TotalKiloHashesAverage5Sec = Math.Max(summary.Select(s => (double)s["MHS 5s"]).Sum() * 1000, 1 / 10000), TotalStale = summary.Select(s => (int)s["Stale"]).Sum() }; } this.Summary(this, new SummaryEventArgs() { Summary = data }); }
private void UpdateSummaryData(SummaryData summaryData) { TrimToGraphRange(this.DataPointsHashRate, this.SelectedGraphTimeSpan.Span); // add the data point to our series if it will actually result in an additional pixel, this prevents the graph from getting overloaded with too many // data points even if the UI stays open for long periods of time (for example, a new point every 10 seconds at 7d time range - that would result // in a very high density that would impact performance while not actually showing any additional detail on the screen) var dataPoint = new DataPoint() { TimeLocal = summaryData.TimestampUtc.ToLocalTime(), Value = summaryData.TotalKiloHashesAverage5Sec }; var minimumGap = TimeSpan.FromMilliseconds(this.SelectedGraphTimeSpan.Span.TotalMilliseconds / Math.Max(this.GraphWidth, InitialWindowWidth)); if (this.DataPointsHashRate.Count == 0 || (dataPoint.TimeLocal - this.DataPointsHashRate.Last().TimeLocal) >= minimumGap) { PerformFlatLineFix(this.DataPointsHashRate, dataPoint); this.DataPointsHashRate.Add(dataPoint); } // inform the data manager about the new point (regardless of display density logic) if (this.summaryDataManager != null) { this.summaryDataManager.Add(summaryData); } this.ApplicationTitle = string.Format("Mining Controller ({0:0.#} KH/s)", summaryData.TotalKiloHashesAverage5Sec); }