Skip to content

Commit 29a3519

Browse files
committed
Event refactor
1 parent 555e8ea commit 29a3519

37 files changed

+528
-497
lines changed

rollbar_dart/lib/rollbar.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ library rollbar;
22

33
export 'src/rollbar.dart' show Rollbar;
44

5+
export 'src/sandbox/sandbox.dart' show Sandbox;
56
export 'src/notifier/notifier.dart' show Notifier;
6-
export 'src/wrangler/wrangler.dart' show Wrangler;
7+
export 'src/marshaller/marshaller.dart' show Marshaller;
78
export 'src/transformer/transformer.dart' show Transformer;
89
export 'src/sender/sender.dart' show Sender;
910

@@ -16,5 +17,6 @@ export 'src/data/payload/body.dart' show Body, Report, Trace, Traces, Message;
1617
export 'src/data/payload/frame.dart' show Frame;
1718
export 'src/data/payload/exception_info.dart' show ExceptionInfo;
1819

19-
export 'src/config.dart' show Config;
20-
export 'src/event.dart' show Event;
20+
export 'src/data/config.dart' show Config;
21+
export 'src/data/context.dart' show Context;
22+
export 'src/data/event.dart' show Event, ErrorEvent;

rollbar_dart/lib/src/context.dart

Lines changed: 0 additions & 6 deletions
This file was deleted.

rollbar_dart/lib/src/config.dart renamed to rollbar_dart/lib/src/data/config.dart

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ import 'dart:async';
33
import 'package:meta/meta.dart';
44
import 'package:http/http.dart' as http;
55
import 'package:rollbar_common/rollbar_common.dart';
6+
import 'package:rollbar_dart/src/sandbox/isolated_sandbox.dart';
67

7-
import '../rollbar.dart';
8-
import 'notifier/isolated_notifier.dart';
9-
import 'wrangler/data_wrangler.dart';
10-
import 'transformer/noop_transformer.dart';
11-
import 'sender/persistent_http_sender.dart';
8+
import '../../rollbar.dart';
9+
import '../notifier/core_notifier.dart';
10+
import '../marshaller/data_marshaller.dart';
11+
import '../transformer/noop_transformer.dart';
12+
import '../sender/persistent_http_sender.dart';
1213

1314
/// The class of types that are [Configurable] through a [Config] instance.
1415
abstract class Configurable {
@@ -30,8 +31,9 @@ class Config implements Serializable {
3031
final bool handleUncaughtErrors;
3132
final bool includePlatformLogs;
3233

33-
final FutureOr<Notifier> Function(Config) notifier;
34-
final Wrangler Function(Config) wrangler;
34+
final FutureOr<Sandbox> Function(Config) sandbox;
35+
final Notifier Function(Config) notifier;
36+
final Marshaller Function(Config) marshaller;
3537
final Transformer Function(Config) transformer;
3638
final Sender Function(Config) sender;
3739
final http.Client Function() httpClient;
@@ -47,8 +49,9 @@ class Config implements Serializable {
4749
this.persistenceLifetime = const Duration(days: 1),
4850
this.handleUncaughtErrors = true,
4951
this.includePlatformLogs = false,
50-
this.notifier = IsolatedNotifier.spawn,
51-
this.wrangler = DataWrangler.new,
52+
this.sandbox = IsolatedSandbox.spawn,
53+
this.notifier = CoreNotifier.new,
54+
this.marshaller = DataMarshaller.new,
5255
this.transformer = NoopTransformer.new,
5356
this.sender = PersistentHttpSender.new,
5457
this.httpClient = http.Client.new,
@@ -65,27 +68,29 @@ class Config implements Serializable {
6568
Duration? persistenceLifetime,
6669
bool? handleUncaughtErrors,
6770
bool? includePlatformLogs,
68-
FutureOr<Notifier> Function(Config)? notifier,
69-
Wrangler Function(Config)? wrangler,
71+
FutureOr<Sandbox> Function(Config)? sandbox,
72+
Notifier Function(Config)? notifier,
73+
Marshaller Function(Config)? marshaller,
7074
Transformer Function(Config)? transformer,
7175
Sender Function(Config)? sender,
7276
}) =>
7377
Config(
74-
accessToken: accessToken ?? this.accessToken,
75-
endpoint: endpoint ?? this.endpoint,
76-
environment: environment ?? this.environment,
77-
framework: framework ?? this.framework,
78-
codeVersion: codeVersion ?? this.codeVersion,
79-
package: package ?? this.package,
80-
persistencePath: persistencePath ?? this.persistencePath,
81-
persistenceLifetime: persistenceLifetime ?? this.persistenceLifetime,
82-
handleUncaughtErrors: handleUncaughtErrors ?? this.handleUncaughtErrors,
83-
includePlatformLogs: includePlatformLogs ?? this.includePlatformLogs,
84-
notifier: notifier ?? this.notifier,
85-
wrangler: wrangler ?? this.wrangler,
86-
transformer: transformer ?? this.transformer,
87-
sender: sender ?? this.sender,
88-
);
78+
accessToken: accessToken ?? this.accessToken,
79+
endpoint: endpoint ?? this.endpoint,
80+
environment: environment ?? this.environment,
81+
framework: framework ?? this.framework,
82+
codeVersion: codeVersion ?? this.codeVersion,
83+
package: package ?? this.package,
84+
persistencePath: persistencePath ?? this.persistencePath,
85+
persistenceLifetime: persistenceLifetime ?? this.persistenceLifetime,
86+
handleUncaughtErrors:
87+
handleUncaughtErrors ?? this.handleUncaughtErrors,
88+
includePlatformLogs: includePlatformLogs ?? this.includePlatformLogs,
89+
sandbox: sandbox ?? this.sandbox,
90+
notifier: notifier ?? this.notifier,
91+
marshaller: marshaller ?? this.marshaller,
92+
transformer: transformer ?? this.transformer,
93+
sender: sender ?? this.sender);
8994

9095
@override
9196
factory Config.fromMap(JsonMap map) => Config(
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import 'package:meta/meta.dart';
2+
3+
import 'payload/user.dart';
4+
import '../notifier/core_notifier.dart';
5+
import 'config.dart';
6+
import '../telemetry.dart';
7+
import '../persistence.dart';
8+
9+
/// The library's contextual data, [Context] represents the library's state.
10+
///
11+
/// Some values may not persist throughout runs, this depends on whether their
12+
/// class was declared with [Persistence].
13+
///
14+
/// [Context] is mutable by desigm to allow for in-place mutation. State
15+
/// manipulation ought to occur in an encapsulated and controlled manner.
16+
/// See [CoreNotifier].
17+
@sealed
18+
class Context implements Configurable {
19+
@override
20+
final Config config;
21+
final Telemetry telemetry;
22+
User? user;
23+
24+
Context(this.config, {this.user, Telemetry? telemetry})
25+
: telemetry = telemetry ?? Telemetry(config);
26+
}

rollbar_dart/lib/src/data/event.dart

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import 'package:meta/meta.dart';
2+
import 'package:rollbar_common/rollbar_common.dart';
3+
import 'package:rollbar_dart/rollbar_dart.dart';
4+
5+
/// A library [Event].
6+
///
7+
/// An [Event] is anything that triggers a side-effect within the library, be
8+
/// it changing state (eg. context), or communicating with the Rollbar API.
9+
///
10+
/// Each [Event] instance carries contextual information specific to its event.
11+
@immutable
12+
abstract class Event {}
13+
14+
/// A notification event.
15+
///
16+
/// A notification instructs the Rollbar SDK to notify the Rollbar API of an
17+
/// event.
18+
abstract class Notification implements Event {
19+
Level get level;
20+
}
21+
22+
@sealed
23+
class TelemetryEvent implements Event {
24+
final Breadcrumb breadcrumb;
25+
26+
const TelemetryEvent(this.breadcrumb);
27+
28+
@override
29+
String toString() => 'TelemetryEvent(breadcrumb: $breadcrumb)';
30+
}
31+
32+
@sealed
33+
class UserEvent implements Event {
34+
final User? user;
35+
36+
const UserEvent(this.user);
37+
38+
@override
39+
String toString() => 'UserEvent(user: $user)';
40+
}
41+
42+
@sealed
43+
class MessageEvent implements Notification, Event {
44+
@override
45+
final Level level;
46+
final String message;
47+
48+
const MessageEvent(
49+
this.message, {
50+
this.level = Level.info,
51+
});
52+
53+
@override
54+
String toString() => 'MessageEvent(level: $level, message: $message)';
55+
}
56+
57+
@sealed
58+
class ErrorEvent implements Notification, Event {
59+
@override
60+
final Level level;
61+
final dynamic error;
62+
final String? description;
63+
final StackTrace stackTrace;
64+
65+
const ErrorEvent(
66+
this.error,
67+
this.stackTrace, {
68+
this.description,
69+
this.level = Level.error,
70+
});
71+
72+
@override
73+
String toString() => 'ErrorEvent('
74+
'level: $level, '
75+
'error: $error, '
76+
'description: $description, '
77+
'stackTrace: $stackTrace)';
78+
}
79+
80+
@sealed
81+
@internal
82+
class ContextSnapshot implements Event {}

rollbar_dart/lib/src/event.dart

Lines changed: 0 additions & 87 deletions
This file was deleted.

0 commit comments

Comments
 (0)