Skip to content

Commit 1e87cc9

Browse files
author
Ignacio Bonafonte
authored
Merge pull request #322 from trevor-dialpad/update_proto_0180
Update proto to v0.18.0 and only record metrics with data When creating a metric, we'll create the metric with a name and description even if there's no metric data. This results in sending a metric with no datatype to any collector. Metrics without datatypes are invalid in the OTLP collector and result in an error. This change should assure that we're only sending metrics with data (and thus a datatype). The update to v0.18.0 is straight-forward, I just wanted to see if this was proto issue before modifying the adapter. I also held off in updating to v0.19.0 as there are several breaking changes there that will need to be updated.
2 parents 76b7d32 + 8f6a0c3 commit 1e87cc9

File tree

3 files changed

+88
-22
lines changed

3 files changed

+88
-22
lines changed

Sources/Exporters/OpenTelemetryProtocol/metric/MetricsAdapter.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,20 @@ struct MetricsAdapter {
3636
var results = [Resource: [InstrumentationLibraryInfo: [Opentelemetry_Proto_Metrics_V1_Metric]]]()
3737

3838
metricDataList.forEach {
39-
results[$0.resource, default: [InstrumentationLibraryInfo: [Opentelemetry_Proto_Metrics_V1_Metric]]()][$0.instrumentationLibraryInfo, default: [Opentelemetry_Proto_Metrics_V1_Metric]()]
40-
.append(toProtoMetric(metric: $0))
39+
if let metric = toProtoMetric(metric: $0) {
40+
results[$0.resource, default: [InstrumentationLibraryInfo: [Opentelemetry_Proto_Metrics_V1_Metric]]()][$0.instrumentationLibraryInfo, default: [Opentelemetry_Proto_Metrics_V1_Metric]()]
41+
.append(metric)
42+
}
4143
}
4244

4345
return results
4446
}
4547

46-
static func toProtoMetric(metric: Metric) -> Opentelemetry_Proto_Metrics_V1_Metric {
48+
static func toProtoMetric(metric: Metric) -> Opentelemetry_Proto_Metrics_V1_Metric? {
4749
var protoMetric = Opentelemetry_Proto_Metrics_V1_Metric()
4850
protoMetric.name = metric.name
4951
protoMetric.description_p = metric.description
52+
if metric.data.isEmpty { return nil }
5053

5154
metric.data.forEach {
5255
switch metric.aggregationType {

Sources/Exporters/OpenTelemetryProtocol/proto/logs.pb.swift

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -399,13 +399,6 @@ public struct Opentelemetry_Proto_Logs_V1_LogRecord {
399399
/// it is known at the source. [Optional].
400400
public var severityText: String = String()
401401

402-
/// Short event identifier that does not contain varying parts. Name describes
403-
/// what happened (e.g. "ProcessStarted"). Recommended to be no longer than 50
404-
/// characters. Not guaranteed to be unique in any way. [Optional].
405-
/// This deprecated field is planned to be removed March 15, 2022. Receivers can
406-
/// ignore this field.
407-
public var name: String = String()
408-
409402
/// A value containing the body of the log record. Can be for example a human-readable
410403
/// string message (including multi-line) describing the event in a free form or it can
411404
/// be a structured data composed of arrays and maps of other values. [Optional].
@@ -691,7 +684,6 @@ extension Opentelemetry_Proto_Logs_V1_LogRecord: SwiftProtobuf.Message, SwiftPro
691684
11: .standard(proto: "observed_time_unix_nano"),
692685
2: .standard(proto: "severity_number"),
693686
3: .standard(proto: "severity_text"),
694-
4: .same(proto: "name"),
695687
5: .same(proto: "body"),
696688
6: .same(proto: "attributes"),
697689
7: .standard(proto: "dropped_attributes_count"),
@@ -709,7 +701,6 @@ extension Opentelemetry_Proto_Logs_V1_LogRecord: SwiftProtobuf.Message, SwiftPro
709701
case 1: try { try decoder.decodeSingularFixed64Field(value: &self.timeUnixNano) }()
710702
case 2: try { try decoder.decodeSingularEnumField(value: &self.severityNumber) }()
711703
case 3: try { try decoder.decodeSingularStringField(value: &self.severityText) }()
712-
case 4: try { try decoder.decodeSingularStringField(value: &self.name) }()
713704
case 5: try { try decoder.decodeSingularMessageField(value: &self._body) }()
714705
case 6: try { try decoder.decodeRepeatedMessageField(value: &self.attributes) }()
715706
case 7: try { try decoder.decodeSingularUInt32Field(value: &self.droppedAttributesCount) }()
@@ -736,9 +727,6 @@ extension Opentelemetry_Proto_Logs_V1_LogRecord: SwiftProtobuf.Message, SwiftPro
736727
if !self.severityText.isEmpty {
737728
try visitor.visitSingularStringField(value: self.severityText, fieldNumber: 3)
738729
}
739-
if !self.name.isEmpty {
740-
try visitor.visitSingularStringField(value: self.name, fieldNumber: 4)
741-
}
742730
try { if let v = self._body {
743731
try visitor.visitSingularMessageField(value: v, fieldNumber: 5)
744732
} }()
@@ -768,7 +756,6 @@ extension Opentelemetry_Proto_Logs_V1_LogRecord: SwiftProtobuf.Message, SwiftPro
768756
if lhs.observedTimeUnixNano != rhs.observedTimeUnixNano {return false}
769757
if lhs.severityNumber != rhs.severityNumber {return false}
770758
if lhs.severityText != rhs.severityText {return false}
771-
if lhs.name != rhs.name {return false}
772759
if lhs._body != rhs._body {return false}
773760
if lhs.attributes != rhs.attributes {return false}
774761
if lhs.droppedAttributesCount != rhs.droppedAttributesCount {return false}

Sources/Exporters/OpenTelemetryProtocol/proto/metrics.pb.swift

Lines changed: 82 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -807,11 +807,33 @@ public struct Opentelemetry_Proto_Metrics_V1_HistogramDataPoint {
807807
/// for the available flags and their meaning.
808808
public var flags: UInt32 = 0
809809

810+
/// min is the minimum value over (start_time, end_time].
811+
public var min: Double {
812+
get {return _min ?? 0}
813+
set {_min = newValue}
814+
}
815+
/// Returns true if `min` has been explicitly set.
816+
public var hasMin: Bool {return self._min != nil}
817+
/// Clears the value of `min`. Subsequent reads from it will return its default value.
818+
public mutating func clearMin() {self._min = nil}
819+
820+
/// max is the maximum value over (start_time, end_time].
821+
public var max: Double {
822+
get {return _max ?? 0}
823+
set {_max = newValue}
824+
}
825+
/// Returns true if `max` has been explicitly set.
826+
public var hasMax: Bool {return self._max != nil}
827+
/// Clears the value of `max`. Subsequent reads from it will return its default value.
828+
public mutating func clearMax() {self._max = nil}
829+
810830
public var unknownFields = SwiftProtobuf.UnknownStorage()
811831

812832
public init() {}
813833

814834
fileprivate var _sum: Double? = nil
835+
fileprivate var _min: Double? = nil
836+
fileprivate var _max: Double? = nil
815837
}
816838

817839
/// ExponentialHistogramDataPoint is a single data point in a timeseries that describes the
@@ -855,7 +877,14 @@ public struct Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint {
855877
/// Negative events *can* be recorded, but sum should not be filled out when
856878
/// doing so. This is specifically to enforce compatibility w/ OpenMetrics,
857879
/// see: https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md#histogram
858-
public var sum: Double = 0
880+
public var sum: Double {
881+
get {return _sum ?? 0}
882+
set {_sum = newValue}
883+
}
884+
/// Returns true if `sum` has been explicitly set.
885+
public var hasSum: Bool {return self._sum != nil}
886+
/// Clears the value of `sum`. Subsequent reads from it will return its default value.
887+
public mutating func clearSum() {self._sum = nil}
859888

860889
/// scale describes the resolution of the histogram. Boundaries are
861890
/// located at powers of the base, where:
@@ -912,6 +941,26 @@ public struct Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint {
912941
/// measurements that were used to form the data point
913942
public var exemplars: [Opentelemetry_Proto_Metrics_V1_Exemplar] = []
914943

944+
/// min is the minimum value over (start_time, end_time].
945+
public var min: Double {
946+
get {return _min ?? 0}
947+
set {_min = newValue}
948+
}
949+
/// Returns true if `min` has been explicitly set.
950+
public var hasMin: Bool {return self._min != nil}
951+
/// Clears the value of `min`. Subsequent reads from it will return its default value.
952+
public mutating func clearMin() {self._min = nil}
953+
954+
/// max is the maximum value over (start_time, end_time].
955+
public var max: Double {
956+
get {return _max ?? 0}
957+
set {_max = newValue}
958+
}
959+
/// Returns true if `max` has been explicitly set.
960+
public var hasMax: Bool {return self._max != nil}
961+
/// Clears the value of `max`. Subsequent reads from it will return its default value.
962+
public mutating func clearMax() {self._max = nil}
963+
915964
public var unknownFields = SwiftProtobuf.UnknownStorage()
916965

917966
/// Buckets are a set of bucket counts, encoded in a contiguous array
@@ -944,8 +993,11 @@ public struct Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint {
944993

945994
public init() {}
946995

996+
fileprivate var _sum: Double? = nil
947997
fileprivate var _positive: Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint.Buckets? = nil
948998
fileprivate var _negative: Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint.Buckets? = nil
999+
fileprivate var _min: Double? = nil
1000+
fileprivate var _max: Double? = nil
9491001
}
9501002

9511003
/// SummaryDataPoint is a single data point in a timeseries that describes the
@@ -1759,6 +1811,8 @@ extension Opentelemetry_Proto_Metrics_V1_HistogramDataPoint: SwiftProtobuf.Messa
17591811
7: .standard(proto: "explicit_bounds"),
17601812
8: .same(proto: "exemplars"),
17611813
10: .same(proto: "flags"),
1814+
11: .same(proto: "min"),
1815+
12: .same(proto: "max"),
17621816
]
17631817

17641818
public mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
@@ -1776,6 +1830,8 @@ extension Opentelemetry_Proto_Metrics_V1_HistogramDataPoint: SwiftProtobuf.Messa
17761830
case 8: try { try decoder.decodeRepeatedMessageField(value: &self.exemplars) }()
17771831
case 9: try { try decoder.decodeRepeatedMessageField(value: &self.attributes) }()
17781832
case 10: try { try decoder.decodeSingularUInt32Field(value: &self.flags) }()
1833+
case 11: try { try decoder.decodeSingularDoubleField(value: &self._min) }()
1834+
case 12: try { try decoder.decodeSingularDoubleField(value: &self._max) }()
17791835
default: break
17801836
}
17811837
}
@@ -1813,6 +1869,12 @@ extension Opentelemetry_Proto_Metrics_V1_HistogramDataPoint: SwiftProtobuf.Messa
18131869
if self.flags != 0 {
18141870
try visitor.visitSingularUInt32Field(value: self.flags, fieldNumber: 10)
18151871
}
1872+
try { if let v = self._min {
1873+
try visitor.visitSingularDoubleField(value: v, fieldNumber: 11)
1874+
} }()
1875+
try { if let v = self._max {
1876+
try visitor.visitSingularDoubleField(value: v, fieldNumber: 12)
1877+
} }()
18161878
try unknownFields.traverse(visitor: &visitor)
18171879
}
18181880

@@ -1826,6 +1888,8 @@ extension Opentelemetry_Proto_Metrics_V1_HistogramDataPoint: SwiftProtobuf.Messa
18261888
if lhs.explicitBounds != rhs.explicitBounds {return false}
18271889
if lhs.exemplars != rhs.exemplars {return false}
18281890
if lhs.flags != rhs.flags {return false}
1891+
if lhs._min != rhs._min {return false}
1892+
if lhs._max != rhs._max {return false}
18291893
if lhs.unknownFields != rhs.unknownFields {return false}
18301894
return true
18311895
}
@@ -1845,6 +1909,8 @@ extension Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint: SwiftPro
18451909
9: .same(proto: "negative"),
18461910
10: .same(proto: "flags"),
18471911
11: .same(proto: "exemplars"),
1912+
12: .same(proto: "min"),
1913+
13: .same(proto: "max"),
18481914
]
18491915

18501916
public mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
@@ -1857,13 +1923,15 @@ extension Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint: SwiftPro
18571923
case 2: try { try decoder.decodeSingularFixed64Field(value: &self.startTimeUnixNano) }()
18581924
case 3: try { try decoder.decodeSingularFixed64Field(value: &self.timeUnixNano) }()
18591925
case 4: try { try decoder.decodeSingularFixed64Field(value: &self.count) }()
1860-
case 5: try { try decoder.decodeSingularDoubleField(value: &self.sum) }()
1926+
case 5: try { try decoder.decodeSingularDoubleField(value: &self._sum) }()
18611927
case 6: try { try decoder.decodeSingularSInt32Field(value: &self.scale) }()
18621928
case 7: try { try decoder.decodeSingularFixed64Field(value: &self.zeroCount) }()
18631929
case 8: try { try decoder.decodeSingularMessageField(value: &self._positive) }()
18641930
case 9: try { try decoder.decodeSingularMessageField(value: &self._negative) }()
18651931
case 10: try { try decoder.decodeSingularUInt32Field(value: &self.flags) }()
18661932
case 11: try { try decoder.decodeRepeatedMessageField(value: &self.exemplars) }()
1933+
case 12: try { try decoder.decodeSingularDoubleField(value: &self._min) }()
1934+
case 13: try { try decoder.decodeSingularDoubleField(value: &self._max) }()
18671935
default: break
18681936
}
18691937
}
@@ -1886,9 +1954,9 @@ extension Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint: SwiftPro
18861954
if self.count != 0 {
18871955
try visitor.visitSingularFixed64Field(value: self.count, fieldNumber: 4)
18881956
}
1889-
if self.sum != 0 {
1890-
try visitor.visitSingularDoubleField(value: self.sum, fieldNumber: 5)
1891-
}
1957+
try { if let v = self._sum {
1958+
try visitor.visitSingularDoubleField(value: v, fieldNumber: 5)
1959+
} }()
18921960
if self.scale != 0 {
18931961
try visitor.visitSingularSInt32Field(value: self.scale, fieldNumber: 6)
18941962
}
@@ -1907,6 +1975,12 @@ extension Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint: SwiftPro
19071975
if !self.exemplars.isEmpty {
19081976
try visitor.visitRepeatedMessageField(value: self.exemplars, fieldNumber: 11)
19091977
}
1978+
try { if let v = self._min {
1979+
try visitor.visitSingularDoubleField(value: v, fieldNumber: 12)
1980+
} }()
1981+
try { if let v = self._max {
1982+
try visitor.visitSingularDoubleField(value: v, fieldNumber: 13)
1983+
} }()
19101984
try unknownFields.traverse(visitor: &visitor)
19111985
}
19121986

@@ -1915,13 +1989,15 @@ extension Opentelemetry_Proto_Metrics_V1_ExponentialHistogramDataPoint: SwiftPro
19151989
if lhs.startTimeUnixNano != rhs.startTimeUnixNano {return false}
19161990
if lhs.timeUnixNano != rhs.timeUnixNano {return false}
19171991
if lhs.count != rhs.count {return false}
1918-
if lhs.sum != rhs.sum {return false}
1992+
if lhs._sum != rhs._sum {return false}
19191993
if lhs.scale != rhs.scale {return false}
19201994
if lhs.zeroCount != rhs.zeroCount {return false}
19211995
if lhs._positive != rhs._positive {return false}
19221996
if lhs._negative != rhs._negative {return false}
19231997
if lhs.flags != rhs.flags {return false}
19241998
if lhs.exemplars != rhs.exemplars {return false}
1999+
if lhs._min != rhs._min {return false}
2000+
if lhs._max != rhs._max {return false}
19252001
if lhs.unknownFields != rhs.unknownFields {return false}
19262002
return true
19272003
}

0 commit comments

Comments
 (0)