internal static Sensor InvocationRateAndCountAndAvgAndMaxLatencySensor(string threadId,
                                                                               string metricName,
                                                                               string metricDescription,
                                                                               string descriptionOfRate,
                                                                               string descriptionOfCount,
                                                                               string descriptionOfAvg,
                                                                               string descriptionOfMax,
                                                                               MetricsRecordingLevel recordingLevel,
                                                                               StreamMetricsRegistry streamsMetrics)
        {
            Sensor sensor = streamsMetrics.ThreadLevelSensor(threadId, metricName, metricDescription, recordingLevel);
            var    tags   = streamsMetrics.ThreadLevelTags(threadId);

            SensorHelper.AddAvgAndMaxToSensor(sensor,
                                              StreamMetricsRegistry.THREAD_LEVEL_GROUP,
                                              tags,
                                              metricName + StreamMetricsRegistry.LATENCY_SUFFIX,
                                              descriptionOfAvg,
                                              descriptionOfMax);

            SensorHelper.AddInvocationRateAndCountToSensor(sensor,
                                                           StreamMetricsRegistry.THREAD_LEVEL_GROUP,
                                                           tags,
                                                           metricName,
                                                           descriptionOfRate,
                                                           descriptionOfCount);

            return(sensor);
        }
        public static Sensor CreateStartThreadSensor(string threadId, long startTime, StreamMetricsRegistry metricsRegistry)
        {
            Sensor sensor = metricsRegistry.ThreadLevelSensor(
                threadId,
                THREAD_START_TIME,
                THREAD_START_TIME_DESCRIPTION,
                MetricsRecordingLevel.INFO);

            var metricName = new MetricName(THREAD_START_TIME, StreamMetricsRegistry.THREAD_LEVEL_GROUP,
                                            THREAD_START_TIME_DESCRIPTION, metricsRegistry.ThreadLevelTags(threadId));

            sensor.AddImmutableMetric(metricName, startTime);

            return(sensor);
        }
        public static Sensor CommitRatioSensor(string threadId, StreamMetricsRegistry metricsRegistry)
        {
            var sensor = metricsRegistry.ThreadLevelSensor(threadId,
                                                           COMMIT + StreamMetricsRegistry.RATIO_SUFFIX,
                                                           COMMIT_RATIO_DESCRIPTION,
                                                           MetricsRecordingLevel.INFO);
            var tags = metricsRegistry.ThreadLevelTags(threadId);

            SensorHelper.AddValueMetricToSensor(
                sensor,
                StreamMetricsRegistry.THREAD_LEVEL_GROUP,
                tags,
                COMMIT + StreamMetricsRegistry.RATIO_SUFFIX,
                COMMIT_RATIO_DESCRIPTION);

            return(sensor);
        }
        public static Sensor ProcessRateSensor(string threadId, StreamMetricsRegistry metricsRegistry)
        {
            var sensor = metricsRegistry.ThreadLevelSensor(
                threadId,
                PROCESS + StreamMetricsRegistry.RATE_SUFFIX,
                PROCESS_RATE_DESCRIPTION,
                MetricsRecordingLevel.INFO);
            var tags = metricsRegistry.ThreadLevelTags(threadId);

            SensorHelper.AddRateOfSumAndSumMetricsToSensor(
                sensor,
                StreamMetricsRegistry.THREAD_LEVEL_GROUP,
                tags,
                PROCESS + StreamMetricsRegistry.RATE_SUFFIX,
                PROCESS_RATE_DESCRIPTION,
                PROCESS_TOTAL_DESCRIPTION);

            return(sensor);
        }
        public static Sensor ProcessRecordsSensor(string threadId, StreamMetricsRegistry metricsRegistry)
        {
            var sensor = metricsRegistry.ThreadLevelSensor(
                threadId,
                PROCESS + StreamMetricsRegistry.RECORDS_SUFFIX,
                PROCESS_DESCRIPTION,
                MetricsRecordingLevel.INFO);
            var tags = metricsRegistry.ThreadLevelTags(threadId);

            SensorHelper.AddAvgAndMaxToSensor(
                sensor,
                StreamMetricsRegistry.THREAD_LEVEL_GROUP,
                tags,
                PROCESS + StreamMetricsRegistry.RECORDS_SUFFIX,
                PROCESS_AVG_RECORDS_DESCRIPTION,
                PROCESS_MAX_RECORDS_DESCRIPTION);

            return(sensor);
        }
        internal static Sensor InvocationRateAndCountSensor(string threadId,
                                                            string metricName,
                                                            string metricDescription,
                                                            string descriptionOfRate,
                                                            string descriptionOfCount,
                                                            MetricsRecordingLevel recordingLevel,
                                                            StreamMetricsRegistry streamsMetrics)
        {
            Sensor sensor = streamsMetrics.ThreadLevelSensor(threadId, metricName, metricDescription, recordingLevel);

            SensorHelper.AddInvocationRateAndCountToSensor(
                sensor,
                StreamMetricsRegistry.THREAD_LEVEL_GROUP,
                streamsMetrics.ThreadLevelTags(threadId),
                metricName,
                descriptionOfRate,
                descriptionOfCount
                );
            return(sensor);
        }