Statistics.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. // ReSharper disable InconsistentNaming
  5. namespace BO.ProcessServer.Business.StatisticCounters
  6. {
  7. internal class Statistics
  8. {
  9. #region *** Constants ***
  10. public const string CNT_PS_ONLINE_DUR = "ProcessServerOnline";
  11. public const string CNT_SCENARIO_PROCESSED_INC = "ScenariosProcessedCount";
  12. public const string CNT_SCENARIO_PROCESSED_OK_INC = "ScenariosProcessedOkCount";
  13. public const string CNT_SCENARIO_PROCESSED_FAIL_INC = "ScenariosProcessedFailCount";
  14. public const string CNT_SCENARIO_AVG_DUR = "ScenariosAVGDuration";
  15. public const string CNT_SCENARIO_MIN_DUR = "ScenariosMINDuration";
  16. public const string CNT_SCENARIO_MAX_DUR = "ScenariosMAXDuration";
  17. #endregion
  18. #region *** Private fields ***
  19. private IList<BaseCounter> _counters = new List<BaseCounter>();
  20. #endregion
  21. #region *** Constructors ***
  22. public Statistics()
  23. {
  24. _counters.Add(new TimespanAVGCounter(CNT_SCENARIO_AVG_DUR));
  25. _counters.Add(new TimespanMINCounter(CNT_SCENARIO_MIN_DUR));
  26. _counters.Add(new TimespanMAXCounter(CNT_SCENARIO_MAX_DUR));
  27. _counters.Add(new IncrementalCounter(CNT_SCENARIO_PROCESSED_INC));
  28. _counters.Add(new IncrementalCounter(CNT_SCENARIO_PROCESSED_OK_INC));
  29. _counters.Add(new IncrementalCounter(CNT_SCENARIO_PROCESSED_FAIL_INC));
  30. _counters.Add(new TimespanCounter(CNT_PS_ONLINE_DUR));
  31. }
  32. #endregion
  33. #region *** Public Operations ***
  34. public BaseCounter GetCounter(string name)
  35. {
  36. CheckExistenceCounter(name);
  37. return _counters.First(x => x.Name == name);
  38. }
  39. public TCounter GetCounter<TCounter>(string name) where TCounter : BaseCounter
  40. {
  41. return (TCounter)GetCounter(name);
  42. }
  43. public void ResetCounter(string name)
  44. {
  45. CheckExistenceCounter(name);
  46. }
  47. #endregion
  48. #region *** Private Operations ***
  49. private bool ExistsCounter(string name)
  50. {
  51. return GetCounterInternal(name)!=null;
  52. }
  53. private BaseCounter GetCounterInternal(string name)
  54. {
  55. return _counters.FirstOrDefault(x => x.Name == name);
  56. }
  57. private void CheckExistenceCounter(string name)
  58. {
  59. if (!ExistsCounter(name))
  60. throw new ArgumentOutOfRangeException(nameof(name),$"Counter '{name}' doesn't exists!");
  61. }
  62. #endregion
  63. }
  64. }