public void AddBlock(String label, TimeSpan time) { if (HasStarted) { return; } var interval = new IntervalBlock(); interval.CenterText = label; interval.CurrentTime = time; interval.OnFinished += delegate(object o, EventArgs args) { _elapsedTime = _elapsedTime.Add(interval.OriginalTime); if (Blocks.Count == Blocks.Count(b => b.HasFinished)) { Stop(); HasFinished = true; var oldBlock = CurrentBlock; Blocks.RemoveAt(0); Blocks.Add(oldBlock); } else { StartNextBlock(); } Common.PlaySound(Common.AlertSound1); }; RemainingTime = RemainingTime.Add(interval.CurrentTime); _orignalTime = RemainingTime; // keep the original time in memory so we can substract when running Blocks.Add(interval); }
public IntervalBlock <MessageType> CreateIntervalBlock <MessageType>(int intervalMS, string name) { var block = new IntervalBlock <MessageType>(EventProcessor, intervalMS); SetDebugName(block, name); return(block); }
public static int GetGapCount(this IntervalBlock block, TimeSpan measurementPeriod) { int count = 0; for (int i = 1; i < block.IntervalReadings.Count; i++) { var lastTimestamp = block.IntervalReadings[i - 1].TargetTime?.ToUniversalTime(); var currentTimestamp = block.IntervalReadings[i].TargetTime?.ToUniversalTime(); lastTimestamp = ModelExtensions.GetAlignedTimestamp(lastTimestamp.Value, (int)measurementPeriod.TotalSeconds); currentTimestamp = ModelExtensions.GetAlignedTimestamp(currentTimestamp.Value, (int)measurementPeriod.TotalSeconds); var span = currentTimestamp - lastTimestamp; if (span > measurementPeriod) { count++; } } return(count); }
// Validation of an IntervalBlock instance private static void ValidateIntervalBlock(IntervalBlock intervalBlock, List <Exception> exceptions) { if (intervalBlock.Interval == null) { exceptions.Add(new InvalidOperationException("Das Element \"IntervalBlock\" muss das Element \"Interval\" enthalten.")); } else { ValidateInterval(intervalBlock.Interval, "interval", exceptions); } if (intervalBlock.IntervalReadings.Count < 1) { exceptions.Add(new InvalidOperationException("Das Element \"IntervalBlock\" enthält kein Element \"IntervalReading\".")); } else { foreach (IntervalReading intervalReading in intervalBlock.IntervalReadings) { ValidateIntervalReading(intervalReading, exceptions); } } }
public static (int Ok, int Warning, int TempError, int CriticalTempError, int FatalError) GetStatusCount(this IntervalBlock block) { int ok = 0; int warning = 0; int tempError = 0; int criticalTempError = 0; int fatalError = 0; for (int i = 0; i < block.IntervalReadings.Count; i++) { var statusPtb = block.IntervalReadings[i].StatusPTB.HasValue ? block.IntervalReadings[i].StatusPTB.Value : block.IntervalReadings[i].StatusFNN.MapToStatusPtb(); switch (statusPtb) { case StatusPTB.NoError: ok++; break; case StatusPTB.Warning: warning++; break; case StatusPTB.TemporaryError: tempError++; break; case StatusPTB.CriticalTemporaryError: criticalTempError++; break; case StatusPTB.FatalError: fatalError++; break; default: throw new ArgumentOutOfRangeException(); } } return(ok, warning, tempError, criticalTempError, fatalError); }