receiver/iisreceiver/internal/metadata/generated_metrics.go (920 lines of code) (raw):

// Code generated by mdatagen. DO NOT EDIT. package metadata import ( "time" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/filter" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" "go.opentelemetry.io/collector/receiver" ) // AttributeDirection specifies the value direction attribute. type AttributeDirection int const ( _ AttributeDirection = iota AttributeDirectionSent AttributeDirectionReceived ) // String returns the string representation of the AttributeDirection. func (av AttributeDirection) String() string { switch av { case AttributeDirectionSent: return "sent" case AttributeDirectionReceived: return "received" } return "" } // MapAttributeDirection is a helper map of string to AttributeDirection attribute value. var MapAttributeDirection = map[string]AttributeDirection{ "sent": AttributeDirectionSent, "received": AttributeDirectionReceived, } // AttributeRequest specifies the value request attribute. type AttributeRequest int const ( _ AttributeRequest = iota AttributeRequestDelete AttributeRequestGet AttributeRequestHead AttributeRequestOptions AttributeRequestPost AttributeRequestPut AttributeRequestTrace ) // String returns the string representation of the AttributeRequest. func (av AttributeRequest) String() string { switch av { case AttributeRequestDelete: return "delete" case AttributeRequestGet: return "get" case AttributeRequestHead: return "head" case AttributeRequestOptions: return "options" case AttributeRequestPost: return "post" case AttributeRequestPut: return "put" case AttributeRequestTrace: return "trace" } return "" } // MapAttributeRequest is a helper map of string to AttributeRequest attribute value. var MapAttributeRequest = map[string]AttributeRequest{ "delete": AttributeRequestDelete, "get": AttributeRequestGet, "head": AttributeRequestHead, "options": AttributeRequestOptions, "post": AttributeRequestPost, "put": AttributeRequestPut, "trace": AttributeRequestTrace, } var MetricsInfo = metricsInfo{ IisApplicationPoolState: metricInfo{ Name: "iis.application_pool.state", }, IisApplicationPoolUptime: metricInfo{ Name: "iis.application_pool.uptime", }, IisConnectionActive: metricInfo{ Name: "iis.connection.active", }, IisConnectionAnonymous: metricInfo{ Name: "iis.connection.anonymous", }, IisConnectionAttemptCount: metricInfo{ Name: "iis.connection.attempt.count", }, IisNetworkBlocked: metricInfo{ Name: "iis.network.blocked", }, IisNetworkFileCount: metricInfo{ Name: "iis.network.file.count", }, IisNetworkIo: metricInfo{ Name: "iis.network.io", }, IisRequestCount: metricInfo{ Name: "iis.request.count", }, IisRequestQueueAgeMax: metricInfo{ Name: "iis.request.queue.age.max", }, IisRequestQueueCount: metricInfo{ Name: "iis.request.queue.count", }, IisRequestRejected: metricInfo{ Name: "iis.request.rejected", }, IisThreadActive: metricInfo{ Name: "iis.thread.active", }, IisUptime: metricInfo{ Name: "iis.uptime", }, } type metricsInfo struct { IisApplicationPoolState metricInfo IisApplicationPoolUptime metricInfo IisConnectionActive metricInfo IisConnectionAnonymous metricInfo IisConnectionAttemptCount metricInfo IisNetworkBlocked metricInfo IisNetworkFileCount metricInfo IisNetworkIo metricInfo IisRequestCount metricInfo IisRequestQueueAgeMax metricInfo IisRequestQueueCount metricInfo IisRequestRejected metricInfo IisThreadActive metricInfo IisUptime metricInfo } type metricInfo struct { Name string } type metricIisApplicationPoolState struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.application_pool.state metric with initial data. func (m *metricIisApplicationPoolState) init() { m.data.SetName("iis.application_pool.state") m.data.SetDescription("The current state of the application pool. (0 - Starting, 1 - Started, 2 - Stopping, 3 - Stopped, 4 - Unknown)") m.data.SetUnit("{state}") m.data.SetEmptyGauge() } func (m *metricIisApplicationPoolState) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Gauge().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisApplicationPoolState) updateCapacity() { if m.data.Gauge().DataPoints().Len() > m.capacity { m.capacity = m.data.Gauge().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisApplicationPoolState) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisApplicationPoolState(cfg MetricConfig) metricIisApplicationPoolState { m := metricIisApplicationPoolState{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisApplicationPoolUptime struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.application_pool.uptime metric with initial data. func (m *metricIisApplicationPoolUptime) init() { m.data.SetName("iis.application_pool.uptime") m.data.SetDescription("The application pools uptime period since the last restart.") m.data.SetUnit("{ms}") m.data.SetEmptyGauge() } func (m *metricIisApplicationPoolUptime) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Gauge().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisApplicationPoolUptime) updateCapacity() { if m.data.Gauge().DataPoints().Len() > m.capacity { m.capacity = m.data.Gauge().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisApplicationPoolUptime) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisApplicationPoolUptime(cfg MetricConfig) metricIisApplicationPoolUptime { m := metricIisApplicationPoolUptime{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisConnectionActive struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.connection.active metric with initial data. func (m *metricIisConnectionActive) init() { m.data.SetName("iis.connection.active") m.data.SetDescription("Number of active connections.") m.data.SetUnit("{connections}") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(false) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) } func (m *metricIisConnectionActive) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisConnectionActive) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisConnectionActive) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisConnectionActive(cfg MetricConfig) metricIisConnectionActive { m := metricIisConnectionActive{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisConnectionAnonymous struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.connection.anonymous metric with initial data. func (m *metricIisConnectionAnonymous) init() { m.data.SetName("iis.connection.anonymous") m.data.SetDescription("Number of connections established anonymously.") m.data.SetUnit("{connections}") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(true) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) } func (m *metricIisConnectionAnonymous) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisConnectionAnonymous) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisConnectionAnonymous) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisConnectionAnonymous(cfg MetricConfig) metricIisConnectionAnonymous { m := metricIisConnectionAnonymous{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisConnectionAttemptCount struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.connection.attempt.count metric with initial data. func (m *metricIisConnectionAttemptCount) init() { m.data.SetName("iis.connection.attempt.count") m.data.SetDescription("Total number of attempts to connect to the server.") m.data.SetUnit("{attempts}") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(true) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) } func (m *metricIisConnectionAttemptCount) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisConnectionAttemptCount) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisConnectionAttemptCount) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisConnectionAttemptCount(cfg MetricConfig) metricIisConnectionAttemptCount { m := metricIisConnectionAttemptCount{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisNetworkBlocked struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.network.blocked metric with initial data. func (m *metricIisNetworkBlocked) init() { m.data.SetName("iis.network.blocked") m.data.SetDescription("Number of bytes blocked due to bandwidth throttling.") m.data.SetUnit("By") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(true) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) } func (m *metricIisNetworkBlocked) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisNetworkBlocked) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisNetworkBlocked) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisNetworkBlocked(cfg MetricConfig) metricIisNetworkBlocked { m := metricIisNetworkBlocked{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisNetworkFileCount struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.network.file.count metric with initial data. func (m *metricIisNetworkFileCount) init() { m.data.SetName("iis.network.file.count") m.data.SetDescription("Number of transmitted files.") m.data.SetUnit("{files}") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(true) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) m.data.Sum().DataPoints().EnsureCapacity(m.capacity) } func (m *metricIisNetworkFileCount) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64, directionAttributeValue string) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) dp.Attributes().PutStr("direction", directionAttributeValue) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisNetworkFileCount) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisNetworkFileCount) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisNetworkFileCount(cfg MetricConfig) metricIisNetworkFileCount { m := metricIisNetworkFileCount{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisNetworkIo struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.network.io metric with initial data. func (m *metricIisNetworkIo) init() { m.data.SetName("iis.network.io") m.data.SetDescription("Total amount of bytes sent and received.") m.data.SetUnit("By") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(true) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) m.data.Sum().DataPoints().EnsureCapacity(m.capacity) } func (m *metricIisNetworkIo) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64, directionAttributeValue string) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) dp.Attributes().PutStr("direction", directionAttributeValue) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisNetworkIo) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisNetworkIo) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisNetworkIo(cfg MetricConfig) metricIisNetworkIo { m := metricIisNetworkIo{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisRequestCount struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.request.count metric with initial data. func (m *metricIisRequestCount) init() { m.data.SetName("iis.request.count") m.data.SetDescription("Total number of requests of a given type.") m.data.SetUnit("{requests}") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(true) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) m.data.Sum().DataPoints().EnsureCapacity(m.capacity) } func (m *metricIisRequestCount) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64, requestAttributeValue string) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) dp.Attributes().PutStr("request", requestAttributeValue) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisRequestCount) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisRequestCount) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisRequestCount(cfg MetricConfig) metricIisRequestCount { m := metricIisRequestCount{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisRequestQueueAgeMax struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.request.queue.age.max metric with initial data. func (m *metricIisRequestQueueAgeMax) init() { m.data.SetName("iis.request.queue.age.max") m.data.SetDescription("Age of oldest request in the queue.") m.data.SetUnit("ms") m.data.SetEmptyGauge() } func (m *metricIisRequestQueueAgeMax) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Gauge().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisRequestQueueAgeMax) updateCapacity() { if m.data.Gauge().DataPoints().Len() > m.capacity { m.capacity = m.data.Gauge().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisRequestQueueAgeMax) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisRequestQueueAgeMax(cfg MetricConfig) metricIisRequestQueueAgeMax { m := metricIisRequestQueueAgeMax{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisRequestQueueCount struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.request.queue.count metric with initial data. func (m *metricIisRequestQueueCount) init() { m.data.SetName("iis.request.queue.count") m.data.SetDescription("Current number of requests in the queue.") m.data.SetUnit("{requests}") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(false) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) } func (m *metricIisRequestQueueCount) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisRequestQueueCount) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisRequestQueueCount) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisRequestQueueCount(cfg MetricConfig) metricIisRequestQueueCount { m := metricIisRequestQueueCount{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisRequestRejected struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.request.rejected metric with initial data. func (m *metricIisRequestRejected) init() { m.data.SetName("iis.request.rejected") m.data.SetDescription("Total number of requests rejected.") m.data.SetUnit("{requests}") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(true) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) } func (m *metricIisRequestRejected) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisRequestRejected) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisRequestRejected) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisRequestRejected(cfg MetricConfig) metricIisRequestRejected { m := metricIisRequestRejected{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisThreadActive struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.thread.active metric with initial data. func (m *metricIisThreadActive) init() { m.data.SetName("iis.thread.active") m.data.SetDescription("Current number of active threads.") m.data.SetUnit("{threads}") m.data.SetEmptySum() m.data.Sum().SetIsMonotonic(false) m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative) } func (m *metricIisThreadActive) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Sum().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisThreadActive) updateCapacity() { if m.data.Sum().DataPoints().Len() > m.capacity { m.capacity = m.data.Sum().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisThreadActive) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisThreadActive(cfg MetricConfig) metricIisThreadActive { m := metricIisThreadActive{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } type metricIisUptime struct { data pmetric.Metric // data buffer for generated metric. config MetricConfig // metric config provided by user. capacity int // max observed number of data points added to the metric. } // init fills iis.uptime metric with initial data. func (m *metricIisUptime) init() { m.data.SetName("iis.uptime") m.data.SetDescription("The amount of time the server has been up.") m.data.SetUnit("s") m.data.SetEmptyGauge() } func (m *metricIisUptime) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64) { if !m.config.Enabled { return } dp := m.data.Gauge().DataPoints().AppendEmpty() dp.SetStartTimestamp(start) dp.SetTimestamp(ts) dp.SetIntValue(val) } // updateCapacity saves max length of data point slices that will be used for the slice capacity. func (m *metricIisUptime) updateCapacity() { if m.data.Gauge().DataPoints().Len() > m.capacity { m.capacity = m.data.Gauge().DataPoints().Len() } } // emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points. func (m *metricIisUptime) emit(metrics pmetric.MetricSlice) { if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 { m.updateCapacity() m.data.MoveTo(metrics.AppendEmpty()) m.init() } } func newMetricIisUptime(cfg MetricConfig) metricIisUptime { m := metricIisUptime{config: cfg} if cfg.Enabled { m.data = pmetric.NewMetric() m.init() } return m } // MetricsBuilder provides an interface for scrapers to report metrics while taking care of all the transformations // required to produce metric representation defined in metadata and user config. type MetricsBuilder struct { config MetricsBuilderConfig // config of the metrics builder. startTime pcommon.Timestamp // start time that will be applied to all recorded data points. metricsCapacity int // maximum observed number of metrics per resource. metricsBuffer pmetric.Metrics // accumulates metrics data before emitting. buildInfo component.BuildInfo // contains version information. resourceAttributeIncludeFilter map[string]filter.Filter resourceAttributeExcludeFilter map[string]filter.Filter metricIisApplicationPoolState metricIisApplicationPoolState metricIisApplicationPoolUptime metricIisApplicationPoolUptime metricIisConnectionActive metricIisConnectionActive metricIisConnectionAnonymous metricIisConnectionAnonymous metricIisConnectionAttemptCount metricIisConnectionAttemptCount metricIisNetworkBlocked metricIisNetworkBlocked metricIisNetworkFileCount metricIisNetworkFileCount metricIisNetworkIo metricIisNetworkIo metricIisRequestCount metricIisRequestCount metricIisRequestQueueAgeMax metricIisRequestQueueAgeMax metricIisRequestQueueCount metricIisRequestQueueCount metricIisRequestRejected metricIisRequestRejected metricIisThreadActive metricIisThreadActive metricIisUptime metricIisUptime } // MetricBuilderOption applies changes to default metrics builder. type MetricBuilderOption interface { apply(*MetricsBuilder) } type metricBuilderOptionFunc func(mb *MetricsBuilder) func (mbof metricBuilderOptionFunc) apply(mb *MetricsBuilder) { mbof(mb) } // WithStartTime sets startTime on the metrics builder. func WithStartTime(startTime pcommon.Timestamp) MetricBuilderOption { return metricBuilderOptionFunc(func(mb *MetricsBuilder) { mb.startTime = startTime }) } func NewMetricsBuilder(mbc MetricsBuilderConfig, settings receiver.Settings, options ...MetricBuilderOption) *MetricsBuilder { mb := &MetricsBuilder{ config: mbc, startTime: pcommon.NewTimestampFromTime(time.Now()), metricsBuffer: pmetric.NewMetrics(), buildInfo: settings.BuildInfo, metricIisApplicationPoolState: newMetricIisApplicationPoolState(mbc.Metrics.IisApplicationPoolState), metricIisApplicationPoolUptime: newMetricIisApplicationPoolUptime(mbc.Metrics.IisApplicationPoolUptime), metricIisConnectionActive: newMetricIisConnectionActive(mbc.Metrics.IisConnectionActive), metricIisConnectionAnonymous: newMetricIisConnectionAnonymous(mbc.Metrics.IisConnectionAnonymous), metricIisConnectionAttemptCount: newMetricIisConnectionAttemptCount(mbc.Metrics.IisConnectionAttemptCount), metricIisNetworkBlocked: newMetricIisNetworkBlocked(mbc.Metrics.IisNetworkBlocked), metricIisNetworkFileCount: newMetricIisNetworkFileCount(mbc.Metrics.IisNetworkFileCount), metricIisNetworkIo: newMetricIisNetworkIo(mbc.Metrics.IisNetworkIo), metricIisRequestCount: newMetricIisRequestCount(mbc.Metrics.IisRequestCount), metricIisRequestQueueAgeMax: newMetricIisRequestQueueAgeMax(mbc.Metrics.IisRequestQueueAgeMax), metricIisRequestQueueCount: newMetricIisRequestQueueCount(mbc.Metrics.IisRequestQueueCount), metricIisRequestRejected: newMetricIisRequestRejected(mbc.Metrics.IisRequestRejected), metricIisThreadActive: newMetricIisThreadActive(mbc.Metrics.IisThreadActive), metricIisUptime: newMetricIisUptime(mbc.Metrics.IisUptime), resourceAttributeIncludeFilter: make(map[string]filter.Filter), resourceAttributeExcludeFilter: make(map[string]filter.Filter), } if mbc.ResourceAttributes.IisApplicationPool.MetricsInclude != nil { mb.resourceAttributeIncludeFilter["iis.application_pool"] = filter.CreateFilter(mbc.ResourceAttributes.IisApplicationPool.MetricsInclude) } if mbc.ResourceAttributes.IisApplicationPool.MetricsExclude != nil { mb.resourceAttributeExcludeFilter["iis.application_pool"] = filter.CreateFilter(mbc.ResourceAttributes.IisApplicationPool.MetricsExclude) } if mbc.ResourceAttributes.IisSite.MetricsInclude != nil { mb.resourceAttributeIncludeFilter["iis.site"] = filter.CreateFilter(mbc.ResourceAttributes.IisSite.MetricsInclude) } if mbc.ResourceAttributes.IisSite.MetricsExclude != nil { mb.resourceAttributeExcludeFilter["iis.site"] = filter.CreateFilter(mbc.ResourceAttributes.IisSite.MetricsExclude) } for _, op := range options { op.apply(mb) } return mb } // NewResourceBuilder returns a new resource builder that should be used to build a resource associated with for the emitted metrics. func (mb *MetricsBuilder) NewResourceBuilder() *ResourceBuilder { return NewResourceBuilder(mb.config.ResourceAttributes) } // updateCapacity updates max length of metrics and resource attributes that will be used for the slice capacity. func (mb *MetricsBuilder) updateCapacity(rm pmetric.ResourceMetrics) { if mb.metricsCapacity < rm.ScopeMetrics().At(0).Metrics().Len() { mb.metricsCapacity = rm.ScopeMetrics().At(0).Metrics().Len() } } // ResourceMetricsOption applies changes to provided resource metrics. type ResourceMetricsOption interface { apply(pmetric.ResourceMetrics) } type resourceMetricsOptionFunc func(pmetric.ResourceMetrics) func (rmof resourceMetricsOptionFunc) apply(rm pmetric.ResourceMetrics) { rmof(rm) } // WithResource sets the provided resource on the emitted ResourceMetrics. // It's recommended to use ResourceBuilder to create the resource. func WithResource(res pcommon.Resource) ResourceMetricsOption { return resourceMetricsOptionFunc(func(rm pmetric.ResourceMetrics) { res.CopyTo(rm.Resource()) }) } // WithStartTimeOverride overrides start time for all the resource metrics data points. // This option should be only used if different start time has to be set on metrics coming from different resources. func WithStartTimeOverride(start pcommon.Timestamp) ResourceMetricsOption { return resourceMetricsOptionFunc(func(rm pmetric.ResourceMetrics) { var dps pmetric.NumberDataPointSlice metrics := rm.ScopeMetrics().At(0).Metrics() for i := 0; i < metrics.Len(); i++ { switch metrics.At(i).Type() { case pmetric.MetricTypeGauge: dps = metrics.At(i).Gauge().DataPoints() case pmetric.MetricTypeSum: dps = metrics.At(i).Sum().DataPoints() } for j := 0; j < dps.Len(); j++ { dps.At(j).SetStartTimestamp(start) } } }) } // EmitForResource saves all the generated metrics under a new resource and updates the internal state to be ready for // recording another set of data points as part of another resource. This function can be helpful when one scraper // needs to emit metrics from several resources. Otherwise calling this function is not required, // just `Emit` function can be called instead. // Resource attributes should be provided as ResourceMetricsOption arguments. func (mb *MetricsBuilder) EmitForResource(options ...ResourceMetricsOption) { rm := pmetric.NewResourceMetrics() ils := rm.ScopeMetrics().AppendEmpty() ils.Scope().SetName(ScopeName) ils.Scope().SetVersion(mb.buildInfo.Version) ils.Metrics().EnsureCapacity(mb.metricsCapacity) mb.metricIisApplicationPoolState.emit(ils.Metrics()) mb.metricIisApplicationPoolUptime.emit(ils.Metrics()) mb.metricIisConnectionActive.emit(ils.Metrics()) mb.metricIisConnectionAnonymous.emit(ils.Metrics()) mb.metricIisConnectionAttemptCount.emit(ils.Metrics()) mb.metricIisNetworkBlocked.emit(ils.Metrics()) mb.metricIisNetworkFileCount.emit(ils.Metrics()) mb.metricIisNetworkIo.emit(ils.Metrics()) mb.metricIisRequestCount.emit(ils.Metrics()) mb.metricIisRequestQueueAgeMax.emit(ils.Metrics()) mb.metricIisRequestQueueCount.emit(ils.Metrics()) mb.metricIisRequestRejected.emit(ils.Metrics()) mb.metricIisThreadActive.emit(ils.Metrics()) mb.metricIisUptime.emit(ils.Metrics()) for _, op := range options { op.apply(rm) } for attr, filter := range mb.resourceAttributeIncludeFilter { if val, ok := rm.Resource().Attributes().Get(attr); ok && !filter.Matches(val.AsString()) { return } } for attr, filter := range mb.resourceAttributeExcludeFilter { if val, ok := rm.Resource().Attributes().Get(attr); ok && filter.Matches(val.AsString()) { return } } if ils.Metrics().Len() > 0 { mb.updateCapacity(rm) rm.MoveTo(mb.metricsBuffer.ResourceMetrics().AppendEmpty()) } } // Emit returns all the metrics accumulated by the metrics builder and updates the internal state to be ready for // recording another set of metrics. This function will be responsible for applying all the transformations required to // produce metric representation defined in metadata and user config, e.g. delta or cumulative. func (mb *MetricsBuilder) Emit(options ...ResourceMetricsOption) pmetric.Metrics { mb.EmitForResource(options...) metrics := mb.metricsBuffer mb.metricsBuffer = pmetric.NewMetrics() return metrics } // RecordIisApplicationPoolStateDataPoint adds a data point to iis.application_pool.state metric. func (mb *MetricsBuilder) RecordIisApplicationPoolStateDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisApplicationPoolState.recordDataPoint(mb.startTime, ts, val) } // RecordIisApplicationPoolUptimeDataPoint adds a data point to iis.application_pool.uptime metric. func (mb *MetricsBuilder) RecordIisApplicationPoolUptimeDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisApplicationPoolUptime.recordDataPoint(mb.startTime, ts, val) } // RecordIisConnectionActiveDataPoint adds a data point to iis.connection.active metric. func (mb *MetricsBuilder) RecordIisConnectionActiveDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisConnectionActive.recordDataPoint(mb.startTime, ts, val) } // RecordIisConnectionAnonymousDataPoint adds a data point to iis.connection.anonymous metric. func (mb *MetricsBuilder) RecordIisConnectionAnonymousDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisConnectionAnonymous.recordDataPoint(mb.startTime, ts, val) } // RecordIisConnectionAttemptCountDataPoint adds a data point to iis.connection.attempt.count metric. func (mb *MetricsBuilder) RecordIisConnectionAttemptCountDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisConnectionAttemptCount.recordDataPoint(mb.startTime, ts, val) } // RecordIisNetworkBlockedDataPoint adds a data point to iis.network.blocked metric. func (mb *MetricsBuilder) RecordIisNetworkBlockedDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisNetworkBlocked.recordDataPoint(mb.startTime, ts, val) } // RecordIisNetworkFileCountDataPoint adds a data point to iis.network.file.count metric. func (mb *MetricsBuilder) RecordIisNetworkFileCountDataPoint(ts pcommon.Timestamp, val int64, directionAttributeValue AttributeDirection) { mb.metricIisNetworkFileCount.recordDataPoint(mb.startTime, ts, val, directionAttributeValue.String()) } // RecordIisNetworkIoDataPoint adds a data point to iis.network.io metric. func (mb *MetricsBuilder) RecordIisNetworkIoDataPoint(ts pcommon.Timestamp, val int64, directionAttributeValue AttributeDirection) { mb.metricIisNetworkIo.recordDataPoint(mb.startTime, ts, val, directionAttributeValue.String()) } // RecordIisRequestCountDataPoint adds a data point to iis.request.count metric. func (mb *MetricsBuilder) RecordIisRequestCountDataPoint(ts pcommon.Timestamp, val int64, requestAttributeValue AttributeRequest) { mb.metricIisRequestCount.recordDataPoint(mb.startTime, ts, val, requestAttributeValue.String()) } // RecordIisRequestQueueAgeMaxDataPoint adds a data point to iis.request.queue.age.max metric. func (mb *MetricsBuilder) RecordIisRequestQueueAgeMaxDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisRequestQueueAgeMax.recordDataPoint(mb.startTime, ts, val) } // RecordIisRequestQueueCountDataPoint adds a data point to iis.request.queue.count metric. func (mb *MetricsBuilder) RecordIisRequestQueueCountDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisRequestQueueCount.recordDataPoint(mb.startTime, ts, val) } // RecordIisRequestRejectedDataPoint adds a data point to iis.request.rejected metric. func (mb *MetricsBuilder) RecordIisRequestRejectedDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisRequestRejected.recordDataPoint(mb.startTime, ts, val) } // RecordIisThreadActiveDataPoint adds a data point to iis.thread.active metric. func (mb *MetricsBuilder) RecordIisThreadActiveDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisThreadActive.recordDataPoint(mb.startTime, ts, val) } // RecordIisUptimeDataPoint adds a data point to iis.uptime metric. func (mb *MetricsBuilder) RecordIisUptimeDataPoint(ts pcommon.Timestamp, val int64) { mb.metricIisUptime.recordDataPoint(mb.startTime, ts, val) } // Reset resets metrics builder to its initial state. It should be used when external metrics source is restarted, // and metrics builder should update its startTime and reset it's internal state accordingly. func (mb *MetricsBuilder) Reset(options ...MetricBuilderOption) { mb.startTime = pcommon.NewTimestampFromTime(time.Now()) for _, op := range options { op.apply(mb) } }