TimespanCounter.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. namespace BO.ProcessServer.Business.StatisticCounters
  3. {
  4. internal class TimespanCounter : BaseCounter
  5. {
  6. public bool IsRunning { get; private set; }
  7. public DateTime? StartTimestamp { get; private set; }
  8. public DateTime? StopTimestamp { get; private set; }
  9. public TimespanCounter(string name) : base(name)
  10. {
  11. }
  12. public TimeSpan GetTypedValue()
  13. {
  14. return (TimeSpan) GetValue();
  15. }
  16. public override object GetValue()
  17. {
  18. if (!StartTimestamp.HasValue)
  19. return TimeSpan.Zero;
  20. if (!StopTimestamp.HasValue)
  21. return DateTime.Now - StartTimestamp.GetValueOrDefault();
  22. return StopTimestamp.GetValueOrDefault() - StartTimestamp.GetValueOrDefault();
  23. }
  24. public virtual void Start()
  25. {
  26. if (IsRunning)
  27. throw new InvalidOperationException($"Cannot start counter '{Name}' is already running.");
  28. IsRunning = true;
  29. StartTimestamp = DateTime.Now;
  30. }
  31. public virtual void Stop()
  32. {
  33. if (!IsRunning)
  34. return;
  35. IsRunning = false;
  36. StopTimestamp = DateTime.Now;
  37. }
  38. public override void Reset()
  39. {
  40. IsRunning = false;
  41. StartTimestamp = null;
  42. StopTimestamp = null;
  43. }
  44. }
  45. }