001package io.prometheus.metrics.exporter.opentelemetry.otelmodel;
002
003import io.prometheus.metrics.model.snapshots.InfoSnapshot;
004import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.AggregationTemporality;
005import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.DoublePointData;
006import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.MetricDataType;
007import io.prometheus.metrics.shaded.io_opentelemetry_1_38_0.sdk.metrics.data.SumData;
008
009import java.util.Collection;
010import java.util.Collections;
011import java.util.List;
012import java.util.stream.Collectors;
013
014public class PrometheusInfo extends PrometheusData<DoublePointData> implements SumData<DoublePointData> {
015
016    private final List<DoublePointData> points;
017
018    public PrometheusInfo(InfoSnapshot snapshot, long currentTimeMillis) {
019        super(MetricDataType.DOUBLE_SUM);
020        this.points = snapshot.getDataPoints().stream()
021                .map(dataPoint -> toOtelDataPoint(dataPoint, currentTimeMillis))
022                .collect(Collectors.toList());
023    }
024
025    @Override
026    public boolean isMonotonic() {
027        return false;
028    }
029
030    @Override
031    public AggregationTemporality getAggregationTemporality() {
032        return AggregationTemporality.CUMULATIVE;
033    }
034
035    @Override
036    public Collection<DoublePointData> getPoints() {
037        return points;
038    }
039
040    private DoublePointData toOtelDataPoint(InfoSnapshot.InfoDataPointSnapshot dataPoint, long currentTimeMillis) {
041        return new DoublePointDataImpl(
042                1.0,
043                getStartEpochNanos(dataPoint),
044                getEpochNanos(dataPoint, currentTimeMillis),
045                labelsToAttributes(dataPoint.getLabels()),
046                Collections.emptyList()
047        );
048    }
049}