public SchedulerStatisticsGroup(IOptions <StatisticsOptions> statisticsOptions, ILogger <SchedulerStatisticsGroup> logger) { this.logger = logger; this.collectionLevel = statisticsOptions.Value.CollectionLevel; this.CollectGlobalShedulerStats = collectionLevel.CollectGlobalShedulerStats(); this.CollectTurnsStats = collectionLevel.CollectTurnsStats(); this.CollectPerWorkItemStats = collectionLevel.CollectPerWorkItemStats(); this.CollectShedulerQueuesStats = collectionLevel.CollectShedulerQueuesStats(); workItemGroupStatuses = new StringValueStatistic[1]; workerThreadCounter = 0; workItemGroupCounter = 0; lockable = new object(); if (this.CollectGlobalShedulerStats) { totalPendingWorkItems = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_PENDINGWORKITEMS, false); turnsEnQueuedTotal = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_ITEMS_ENQUEUED_TOTAL); turnsDeQueuedTotal = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_ITEMS_DEQUEUED_TOTAL); turnsDroppedTotal = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_ITEMS_DROPPED_TOTAL); closureWorkItemsCreated = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_CLOSURE_WORK_ITEMS_CREATED); closureWorkItemsExecuted = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_CLOSURE_WORK_ITEMS_EXECUTED); } if (this.CollectTurnsStats) { turnsExecutedByAllWorkerThreadsTotalApplicationTurns = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_TURNSEXECUTED_APPLICATION_BYALLWORKERTHREADS); turnsExecutedByAllWorkerThreadsTotalSystemTurns = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_TURNSEXECUTED_SYSTEM_BYALLWORKERTHREADS); turnsExecutedByAllWorkerThreadsTotalNullTurns = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_TURNSEXECUTED_NULL_BYALLWORKERTHREADS); turnsExecutedByAllWorkItemGroupsTotalApplicationTurns = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_TURNSEXECUTED_APPLICATION_BYALLWORKITEMGROUPS); turnsExecutedByAllWorkItemGroupsTotalSystem = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_TURNSEXECUTED_SYSTEM_BYALLWORKITEMGROUPS); turnLengthHistogram = ExponentialHistogramValueStatistic.Create_ExponentialHistogram_ForTiming(StatisticNames.SCHEDULER_TURN_LENGTH_HISTOGRAM, TURN_LENGTH_HISTOGRAM_SIZE); turnsExecutedStartTotal = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_TURNSEXECUTED_TOTAL_START); turnsExecutedEndTotal = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_TURNSEXECUTED_TOTAL_END); turnsExecutedPerWorkerThreadApplicationTurns ??= new CounterStatistic[1]; turnsExecutedPerWorkerThreadSystemTurns ??= new CounterStatistic[1]; turnsExecutedPerWorkerThreadNull ??= new CounterStatistic[1]; turnsExecutedPerWorkItemGroup ??= new CounterStatistic[1]; } NumLongRunningTurns = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_NUM_LONG_RUNNING_TURNS); NumLongQueueWaitTimes = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_NUM_LONG_QUEUE_WAIT_TIMES); }
public SchedulerStatisticsGroup(IOptions <StatisticsOptions> statisticsOptions, ILogger <SchedulerStatisticsGroup> logger) { this.logger = logger; this.collectionLevel = statisticsOptions.Value.CollectionLevel; this.CollectTurnsStats = collectionLevel.CollectTurnsStats(); this.CollectPerWorkItemStats = collectionLevel.CollectPerWorkItemStats(); this.CollectShedulerQueuesStats = collectionLevel.CollectShedulerQueuesStats(); workItemGroupStatuses = new StringValueStatistic[1]; workItemGroupCounter = 0; lockable = new object(); if (this.CollectTurnsStats) { turnsExecutedPerWorkItemGroup ??= new CounterStatistic[1]; } NumLongRunningTurns = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_NUM_LONG_RUNNING_TURNS); NumLongQueueWaitTimes = CounterStatistic.FindOrCreate(StatisticNames.SCHEDULER_NUM_LONG_QUEUE_WAIT_TIMES); }