Statistics.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. public override string ToString()
  48. {
  49. return base.ToString();
  50. }
  51. #endregion
  52. #region *** Private Operations ***
  53. private bool ExistsCounter(string name)
  54. {
  55. return GetCounterInternal(name)!=null;
  56. }
  57. private BaseCounter GetCounterInternal(string name)
  58. {
  59. return _counters.FirstOrDefault(x => x.Name == name);
  60. }
  61. private void CheckExistenceCounter(string name)
  62. {
  63. if (!ExistsCounter(name))
  64. throw new ArgumentOutOfRangeException(nameof(name),$"Counter '{name}' doesn't exists!");
  65. }
  66. #endregion
  67. }
  68. }