Skip to content

Commit 98709eb

Browse files
committed
wip: change after api is updated following review
1 parent d81ea60 commit 98709eb

17 files changed

+112
-126
lines changed

example/log/log.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ void main() async {
1414
);
1515
registerGlobalLogProvider(provider);
1616

17-
globalLogProvider.get('test logger').emit(api.LogRecord(body: 'test otel log', severityNumber: api.Severity.error));
17+
globalLogProvider.get('test logger').emit(body: 'test otel log', severityNumber: api.Severity.error);
1818

1919
await Future.delayed(const Duration(seconds: 10));
2020
}

lib/src/experimental_sdk.dart

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export 'sdk/metrics/meter_provider.dart' show MeterProvider;
1111
export 'sdk/metrics/meter.dart' show Meter;
1212
export 'sdk/resource/resource.dart' show Resource;
1313
export 'sdk/logs/logger.dart' show Logger;
14+
export 'sdk/logs/export_result.dart' show ExportResult, ExportResultCode;
1415
export 'sdk/logs/logger_provider.dart' show LoggerProvider;
1516
export 'sdk/logs/log_record.dart' show LogRecord;
1617
export 'sdk/logs/log_record_limit.dart' show LogRecordLimits;

lib/src/sdk/logs/export_result.dart

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright 2021-2022 Workiva.
2+
// Licensed under the Apache License, Version 2.0. Please see https://github.com/Workiva/opentelemetry-dart/blob/master/LICENSE for more information
3+
4+
class ExportResult {
5+
final ExportResultCode code;
6+
final Exception? error;
7+
final StackTrace? stackTrace;
8+
9+
ExportResult({required this.code, this.error, this.stackTrace});
10+
}
11+
12+
enum ExportResultCode {
13+
success,
14+
failed,
15+
}

lib/src/sdk/logs/exporters/console_log_record_exporter.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import 'package:opentelemetry/src/experimental_sdk.dart' as sdk;
1010
/// NOTE: This [sdk.LogRecordExporter] is intended for diagnostics use only, output rendered to the console may change at any time.
1111
class ConsoleLogRecordExporter implements sdk.LogRecordExporter {
1212
@override
13-
Future<api.ExportResult> export(List<sdk.ReadableLogRecord> logs) async {
13+
Future<sdk.ExportResult> export(List<sdk.ReadableLogRecord> logs) async {
1414
return _sendLogRecords(logs);
1515
}
1616

@@ -19,11 +19,11 @@ class ConsoleLogRecordExporter implements sdk.LogRecordExporter {
1919
Future<void> shutdown() async {}
2020

2121
/// Showing logs in console
22-
api.ExportResult _sendLogRecords(List<sdk.ReadableLogRecord> logs) {
22+
sdk.ExportResult _sendLogRecords(List<sdk.ReadableLogRecord> logs) {
2323
for (final log in logs) {
2424
print(_makeObject(log));
2525
}
26-
return api.ExportResult(code: api.ExportResultCode.success);
26+
return sdk.ExportResult(code: sdk.ExportResultCode.success);
2727
}
2828

2929
/// converts logRecord info into more readable format

lib/src/sdk/logs/exporters/inmemory_log_record_exporter.dart

+4-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Licensed under the Apache License, Version 2.0. Please see https://github.com/Workiva/opentelemetry-dart/blob/master/LICENSE for more information
33

44
import 'package:meta/meta.dart';
5-
import 'package:opentelemetry/api.dart' as api;
65
import 'package:opentelemetry/src/experimental_sdk.dart' as sdk;
76

87
/// This class can be used for testing purposes. It stores the exported LogRecords
@@ -17,17 +16,17 @@ class InMemoryLogRecordExporter implements sdk.LogRecordExporter {
1716
bool _stopped = false;
1817

1918
@override
20-
Future<api.ExportResult> export(List<sdk.ReadableLogRecord> logs) async {
19+
Future<sdk.ExportResult> export(List<sdk.ReadableLogRecord> logs) async {
2120
if (_stopped) {
22-
return api.ExportResult(
23-
code: api.ExportResultCode.failed,
21+
return sdk.ExportResult(
22+
code: sdk.ExportResultCode.failed,
2423
error: Exception('Exporter has been stopped'),
2524
stackTrace: StackTrace.current,
2625
);
2726
}
2827
_finishedLogRecords.addAll(logs);
2928

30-
return api.ExportResult(code: api.ExportResultCode.success);
29+
return sdk.ExportResult(code: sdk.ExportResultCode.success);
3130
}
3231

3332
@override
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
// Copyright 2021-2022 Workiva.
22
// Licensed under the Apache License, Version 2.0. Please see https://github.com/Workiva/opentelemetry-dart/blob/master/LICENSE for more information
33

4-
import 'package:opentelemetry/api.dart' as api;
54
import 'package:opentelemetry/src/experimental_sdk.dart' as sdk;
65

76
abstract class LogRecordExporter {
8-
Future<api.ExportResult> export(List<sdk.ReadableLogRecord> logs);
7+
Future<sdk.ExportResult> export(List<sdk.ReadableLogRecord> logs);
98

109
Future<void> shutdown();
1110
}

lib/src/sdk/logs/exporters/otlp_log_exporter.dart

+9-9
Original file line numberDiff line numberDiff line change
@@ -32,26 +32,26 @@ class OTLPLogExporter implements sdk.LogRecordExporter {
3232
}) : client = httpClient ?? http.Client();
3333

3434
@override
35-
Future<api.ExportResult> export(List<sdk.ReadableLogRecord> logRecords) async {
35+
Future<sdk.ExportResult> export(List<sdk.ReadableLogRecord> logRecords) async {
3636
if (_isShutdown) {
37-
return api.ExportResult(
38-
code: api.ExportResultCode.failed,
37+
return sdk.ExportResult(
38+
code: sdk.ExportResultCode.failed,
3939
);
4040
}
4141

4242
if (logRecords.isEmpty) {
43-
return api.ExportResult(
44-
code: api.ExportResultCode.success,
43+
return sdk.ExportResult(
44+
code: sdk.ExportResultCode.success,
4545
);
4646
}
4747

4848
return _send(uri, logRecords).then((_) {
49-
return api.ExportResult(
50-
code: api.ExportResultCode.success,
49+
return sdk.ExportResult(
50+
code: sdk.ExportResultCode.success,
5151
);
5252
}).catchError((e, st) {
53-
return api.ExportResult(
54-
code: api.ExportResultCode.failed,
53+
return sdk.ExportResult(
54+
code: sdk.ExportResultCode.failed,
5555
error: e,
5656
stackTrace: st,
5757
);

lib/src/sdk/logs/log_record.dart

+16-12
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ class LogRecord implements sdk.ReadableLogRecord {
1717
@override
1818
final sdk.Resource? resource;
1919

20-
final api.LogRecord logRecord;
2120
final sdk.TimeProvider _timeProvider;
2221
final api.Context? context;
2322
final api.SpanContext? _spanContext;
2423
final sdk.LogRecordLimits logRecordLimits;
24+
final DateTime? timeStamp;
25+
final DateTime? observedTimestamp;
2526

2627
bool _isReadonly = false;
2728
String? _severityText;
@@ -33,18 +34,23 @@ class LogRecord implements sdk.ReadableLogRecord {
3334

3435
LogRecord({
3536
required this.instrumentationScope,
36-
required this.logRecord,
3737
required this.logRecordLimits,
38+
api.Severity? severityNumber,
39+
String? severityText,
40+
sdk.Attributes? attributes,
41+
dynamic body,
3842
this.resource,
3943
this.context,
44+
this.timeStamp,
45+
this.observedTimestamp,
4046
sdk.TimeProvider? timeProvider,
41-
}) : _severityText = logRecord.severityText,
42-
_body = logRecord.body,
47+
}) : _severityText = severityText,
48+
_body = body,
4349
_attributes = sdk.Attributes.empty(),
44-
_severityNumber = logRecord.severityNumber,
45-
_spanContext = context != null ? api.spanContextFromContext(context) : null,
50+
_severityNumber = severityNumber,
51+
_spanContext = api.spanContextFromContext(context ?? api.Context.current),
4652
_timeProvider = timeProvider ?? sdk.DateTimeTimeProvider() {
47-
setAttributes(logRecord.attributes);
53+
if (attributes != null) setAttributes(attributes);
4854
}
4955

5056
@override
@@ -66,13 +72,11 @@ class LogRecord implements sdk.ReadableLogRecord {
6672
int get droppedAttributesCount => _totalAttributesCount - (attributes?.length ?? 0);
6773

6874
@override
69-
Int64? get hrTime =>
70-
logRecord.timeStamp != null ? Int64(logRecord.timeStamp!.microsecondsSinceEpoch) * 1000 : _timeProvider.now;
75+
Int64? get hrTime => timeStamp != null ? Int64(timeStamp!.microsecondsSinceEpoch) * 1000 : _timeProvider.now;
7176

7277
@override
73-
Int64? get hrTimeObserved => logRecord.observedTimestamp != null
74-
? Int64(logRecord.observedTimestamp!.microsecondsSinceEpoch) * 1000
75-
: _timeProvider.now;
78+
Int64? get hrTimeObserved =>
79+
observedTimestamp != null ? Int64(observedTimestamp!.microsecondsSinceEpoch) * 1000 : _timeProvider.now;
7680

7781
@override
7882
api.Severity? get severityNumber => _severityNumber;

lib/src/sdk/logs/logger.dart

+15-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the Apache License, Version 2.0. Please see https://github.com/Workiva/opentelemetry-dart/blob/master/LICENSE for more information
33

44
import 'package:opentelemetry/sdk.dart' as sdk;
5+
import 'package:opentelemetry/src/api/context/context.dart';
56
import 'package:opentelemetry/src/experimental_api.dart' as api;
67
import 'package:opentelemetry/src/experimental_sdk.dart' as sdk;
78

@@ -21,13 +22,24 @@ class Logger extends api.Logger {
2122
});
2223

2324
@override
24-
void emit(api.LogRecord logRecord) {
25+
void emit({
26+
sdk.Attributes? attributes,
27+
Context? context,
28+
dynamic body,
29+
DateTime? observedTimestamp,
30+
api.Severity? severityNumber,
31+
String? severityText,
32+
DateTime? timeStamp,
33+
}) {
2534
final log = sdk.LogRecord(
2635
logRecordLimits: logRecordLimits,
2736
resource: resource,
2837
instrumentationScope: instrumentationScope,
29-
logRecord: logRecord,
30-
context: logRecord.context,
38+
context: context,
39+
severityText: severityText,
40+
severityNumber: severityNumber,
41+
attributes: attributes,
42+
body: body,
3143
timeProvider: timeProvider,
3244
);
3345
onLogEmit?.call(log);

lib/src/sdk/logs/processors/simple_log_record_processor.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class SimpleLogRecordProcessor implements sdk.LogRecordProcessor {
2626
final completer = Completer();
2727
exportsCompletion.add(completer);
2828
exporter.export([logRecord]).then((result) {
29-
if (result.code != api.ExportResultCode.success) {
29+
if (result.code != sdk.ExportResultCode.success) {
3030
logger.shout('SimpleLogRecordProcessor: log record export failed', result.error, result.stackTrace);
3131
}
3232
}).whenComplete(() {

test/unit/sdk/logs/exporters/console_log_record_exporter_test.dart

+1-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'dart:async';
77
import 'package:fixnum/fixnum.dart';
88
import 'package:opentelemetry/api.dart' as api;
99
import 'package:opentelemetry/sdk.dart' as sdk;
10-
import 'package:opentelemetry/src/experimental_api.dart' as api;
1110
import 'package:opentelemetry/src/experimental_sdk.dart' as sdk;
1211
import 'package:test/test.dart';
1312

@@ -25,13 +24,10 @@ void main() {
2524
final context = api.contextWithSpan(api.Context.current, parent);
2625
final logRecord = sdk.LogRecord(
2726
instrumentationScope: sdk.InstrumentationScope('library_name', 'library_version', 'url://schema', []),
28-
logRecord: api.LogRecord(),
2927
context: context,
3028
logRecordLimits: sdk.LogRecordLimits(),
3129
timeProvider: FakeTimeProvider(now: Int64(123)),
32-
resource: sdk.Resource([
33-
api.Attribute.fromString('resource.name', 'test')
34-
])
30+
resource: sdk.Resource([api.Attribute.fromString('resource.name', 'test')]),
3531
)
3632
..makeReadonly()
3733
..body = 'Log Message';

test/unit/sdk/logs/exporters/otlp_log_exporter_test.dart

+30-48
Original file line numberDiff line numberDiff line change
@@ -44,61 +44,49 @@ void main() {
4444
final log1 = sdk.LogRecord(
4545
resource: resource,
4646
instrumentationScope: instrumentationLibrary,
47-
logRecord: api.LogRecord(
48-
context: context,
49-
body: 'test log',
50-
severityNumber: api.Severity.fatal3,
51-
),
47+
body: 'test log',
48+
severityNumber: api.Severity.fatal3,
5249
logRecordLimits: logLimit,
5350
context: context,
5451
timeProvider: FakeTimeProvider(now: Int64(123)))
5552
..setAttribute('key', 'value');
5653

5754
final log2 = sdk.LogRecord(
58-
resource: resource,
59-
instrumentationScope: instrumentationLibrary,
60-
logRecord: api.LogRecord(
61-
context: context,
62-
body: 2,
63-
severityNumber: api.Severity.fatal3,
64-
attributes: sdk.Attributes.empty()
65-
..addAll([
66-
api.Attribute.fromBoolean('fromBoolean', false),
67-
api.Attribute.fromDouble('fromDouble', 1.1),
68-
api.Attribute.fromInt('fromInt', 1),
69-
api.Attribute.fromBooleanList('fromBooleanList', [false]),
70-
api.Attribute.fromDoubleList('fromDoubleList', [1.1]),
71-
api.Attribute.fromIntList('fromIntList', [1]),
72-
]),
73-
),
74-
logRecordLimits: logLimit,
75-
context: context,
76-
timeProvider: FakeTimeProvider(now: Int64(123)))
77-
..setAttribute('key', 'value');
55+
resource: resource,
56+
instrumentationScope: instrumentationLibrary,
57+
context: context,
58+
body: 2,
59+
severityNumber: api.Severity.fatal3,
60+
attributes: sdk.Attributes.empty()
61+
..addAll([
62+
api.Attribute.fromBoolean('fromBoolean', false),
63+
api.Attribute.fromDouble('fromDouble', 1.1),
64+
api.Attribute.fromInt('fromInt', 1),
65+
api.Attribute.fromBooleanList('fromBooleanList', [false]),
66+
api.Attribute.fromDoubleList('fromDoubleList', [1.1]),
67+
api.Attribute.fromIntList('fromIntList', [1]),
68+
]),
69+
logRecordLimits: logLimit,
70+
timeProvider: FakeTimeProvider(now: Int64(123)),
71+
)..setAttribute('key', 'value');
7872

7973
final log3 = sdk.LogRecord(
8074
resource: resource,
8175
instrumentationScope: instrumentationLibrary,
82-
logRecord: api.LogRecord(
83-
context: context,
84-
body: 2.2,
85-
severityNumber: api.Severity.fatal3,
86-
),
87-
logRecordLimits: logLimit,
8876
context: context,
77+
body: 2.2,
78+
severityNumber: api.Severity.fatal3,
79+
logRecordLimits: logLimit,
8980
timeProvider: FakeTimeProvider(now: Int64(123)))
9081
..setAttribute('key', 'value');
9182

9283
final log4 = sdk.LogRecord(
9384
resource: resource,
9485
instrumentationScope: instrumentationLibrary,
95-
logRecord: api.LogRecord(
96-
context: context,
97-
body: true,
98-
severityNumber: api.Severity.fatal3,
99-
),
100-
logRecordLimits: logLimit,
10186
context: context,
87+
body: true,
88+
severityNumber: api.Severity.fatal3,
89+
logRecordLimits: logLimit,
10290
timeProvider: FakeTimeProvider(now: Int64(123)))
10391
..setAttribute('key', 'value');
10492

@@ -198,13 +186,10 @@ void main() {
198186

199187
final log1 = sdk.LogRecord(
200188
instrumentationScope: instrumentationLibrary,
201-
logRecord: api.LogRecord(
202-
context: context,
203-
body: 'test log',
204-
severityNumber: api.Severity.fatal3,
205-
),
206-
logRecordLimits: logLimit,
207189
context: context,
190+
body: 'test log',
191+
severityNumber: api.Severity.fatal3,
192+
logRecordLimits: logLimit,
208193
timeProvider: FakeTimeProvider(now: Int64(123)))
209194
..setAttribute('key', 'value');
210195

@@ -226,11 +211,8 @@ void main() {
226211

227212
final log1 = sdk.LogRecord(
228213
instrumentationScope: instrumentationLibrary,
229-
logRecord: api.LogRecord(
230-
context: context,
231-
body: 'test log',
232-
severityNumber: api.Severity.fatal3,
233-
),
214+
body: 'test log',
215+
severityNumber: api.Severity.fatal3,
234216
logRecordLimits: logLimit,
235217
context: context,
236218
timeProvider: FakeTimeProvider(now: Int64(123)))

0 commit comments

Comments
 (0)