{"version":3,"file":"Sum.js","sourceRoot":"","sources":["../../../src/aggregator/Sum.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  Sum,\n  Aggregator,\n  Accumulation,\n  AccumulationRecord,\n} from './types';\nimport { AggregatorKind } from './types';\nimport type { HrTime } from '@opentelemetry/api';\nimport type { SumMetricData } from '../export/MetricData';\nimport { DataPointType } from '../export/MetricData';\nimport type { Maybe } from '../utils';\nimport type { AggregationTemporality } from '../export/AggregationTemporality';\nimport type { InstrumentDescriptor } from '../InstrumentDescriptor';\n\nexport class SumAccumulation implements Accumulation {\n  public startTime;\n  public monotonic;\n  private _current;\n  public reset;\n\n  constructor(\n    startTime: HrTime,\n    monotonic: boolean,\n    current = 0,\n    reset = false\n  ) {\n    this.startTime = startTime;\n    this.monotonic = monotonic;\n    this._current = current;\n    this.reset = reset;\n  }\n\n  record(value: number): void {\n    if (this.monotonic && value < 0) {\n      return;\n    }\n    this._current += value;\n  }\n\n  setStartTime(startTime: HrTime): void {\n    this.startTime = startTime;\n  }\n\n  toPointValue(): Sum {\n    return this._current;\n  }\n}\n\n/** Basic aggregator which calculates a Sum from individual measurements. */\nexport class SumAggregator implements Aggregator<SumAccumulation> {\n  public kind: AggregatorKind.SUM = AggregatorKind.SUM;\n  public monotonic: boolean;\n\n  constructor(monotonic: boolean) {\n    this.monotonic = monotonic;\n  }\n\n  createAccumulation(startTime: HrTime) {\n    return new SumAccumulation(startTime, this.monotonic);\n  }\n\n  /**\n   * Returns the result of the merge of the given accumulations.\n   */\n  merge(previous: SumAccumulation, delta: SumAccumulation): SumAccumulation {\n    const prevPv = previous.toPointValue();\n    const deltaPv = delta.toPointValue();\n    if (delta.reset) {\n      return new SumAccumulation(\n        delta.startTime,\n        this.monotonic,\n        deltaPv,\n        delta.reset\n      );\n    }\n    return new SumAccumulation(\n      previous.startTime,\n      this.monotonic,\n      prevPv + deltaPv\n    );\n  }\n\n  /**\n   * Returns a new DELTA aggregation by comparing two cumulative measurements.\n   */\n  diff(previous: SumAccumulation, current: SumAccumulation): SumAccumulation {\n    const prevPv = previous.toPointValue();\n    const currPv = current.toPointValue();\n    /**\n     * If the SumAggregator is a monotonic one and the previous point value is\n     * greater than the current one, a reset is deemed to be happened.\n     * Return the current point value to prevent the value from been reset.\n     */\n    if (this.monotonic && prevPv > currPv) {\n      return new SumAccumulation(\n        current.startTime,\n        this.monotonic,\n        currPv,\n        true\n      );\n    }\n    return new SumAccumulation(\n      current.startTime,\n      this.monotonic,\n      currPv - prevPv\n    );\n  }\n\n  toMetricData(\n    descriptor: InstrumentDescriptor,\n    aggregationTemporality: AggregationTemporality,\n    accumulationByAttributes: AccumulationRecord<SumAccumulation>[],\n    endTime: HrTime\n  ): Maybe<SumMetricData> {\n    return {\n      descriptor,\n      aggregationTemporality,\n      dataPointType: DataPointType.SUM,\n      dataPoints: accumulationByAttributes.map(([attributes, accumulation]) => {\n        return {\n          attributes,\n          startTime: accumulation.startTime,\n          endTime,\n          value: accumulation.toPointValue(),\n        };\n      }),\n      isMonotonic: this.monotonic,\n    };\n  }\n}\n"]}