Skip to content

Commit

Permalink
Merge pull request #117 from getsentry/feature/unified-api
Browse files Browse the repository at this point in the history
feature: Unified API
  • Loading branch information
marandaneto authored Oct 29, 2020
2 parents 48368f8 + c3ab59f commit d24cb50
Show file tree
Hide file tree
Showing 69 changed files with 3,374 additions and 965 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
CHANGELOG.md merge=union
7 changes: 3 additions & 4 deletions .github/workflows/dart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ jobs:
release-channel: ${{ matrix.sdk }}
- uses: actions/checkout@v2
- run: pub get
- name: Test on Chrome
run: pub run test -p chrome test
- name: Test (VM and browser)
run: pub run test test
- run: dartanalyzer --fatal-warnings ./
- run: dartfmt -n --set-exit-if-changed ./
package-analysis:
Expand All @@ -53,10 +53,9 @@ jobs:
env:
TOTAL: ${{ steps.analysis.outputs.total }}
TOTAL_MAX: ${{ steps.analysis.outputs.total_max }}
# TODO: Once 4.0.0 lands, change to 100
run: |
PERCENTAGE=$(( $TOTAL * 100 / $TOTAL_MAX ))
if (( $PERCENTAGE < 90 ))
if (( $PERCENTAGE < 100 ))
then
echo Score too low!
exit 1
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ ios/
build/
.cxx/


.test_coverage.dart
dart/coverage/*
33 changes: 17 additions & 16 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
# `package:sentry` and `package:sentry-flutter` changelog

## 4.0.0
- Development

- BREAKING CHANGE: Fixed context screenDensity is of type double #53
- BREAKING CHANGE: Fixed context screenDpi is of type int #58
- BREAKING CHANGE: Renamed capture method to captureEvent #64
- BREAKING CHANGE: `package:http` min version bumped to 0.12.0 #104
- BREAKING CHANGE: replace the `package:usage` by `package:uuid` #94
- BREAKING CHANGE: `Event.message` must now be an instance of `Message`
- By default no logger it set #63
- Added missing Contexts to Event.copyWith() #62
- remove the `package:args` dependency #94
- move the `package:pedantic` to dev depencies #94
- Added GH Action Changelog verifier #95
- Added GH Action (CI) for Dart
- new Dart code file structure #96
- Base the sdk name on the platform (`sentry.dart` for io & flutter, `sentry.dart.browser` in a browser context) #103
- Single changelog and readme for both packages #105
- expect a sdkName based on the test platform #105

# `package:sentry` changelog

## 4.0.0-alpha.1

First Release of Sentry's new SDK for Dart/Flutter.

New features not offered by <= v3.0.0:

- Sentry's [Unified API](https://develop.sentry.dev/sdk/unified-api/).
- Complete Sentry [Protocol](https://develop.sentry.dev/sdk/event-payloads/) available.
- Docs and Migration is under review on this [PR](https://github.com/getsentry/sentry-docs/pull/2599)
- For all the breaking changes follow this [PR](https://github.com/getsentry/sentry-dart/pull/117), they'll be soon available on the Migration page.

Packages were released on [pubdev](https://pub.dev/packages/sentry)

We'd love to get feedback and we'll work in getting the GA 4.0.0 out soon.
Until then, the stable SDK offered by Sentry is at version [3.0.1](https://github.com/getsentry/sentry-dart/releases/tag/3.0.1)

## 3.0.1

- Add support for Contexts in Sentry events
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ We also run CI against the Flutter `stable` and `beta` channels so you should be

##### Versions

Versions `3.0.1` and higher support [Flutter][flutter] (mobile, web, desktop),
command-line/server Dart VM, and [AngularDart][angular_sentry].
Versions `3.0.1` and higher support `Flutter` (mobile, web, desktop),
command-line/server Dart VM, and `AngularDart`.

Versions below `3.0.1` are deprecated.

Expand Down Expand Up @@ -81,7 +81,7 @@ main() async {
##### Tips for catching errors

- Use a `try/catch` block, like in the example above.
- Create a `Zone` with an error handler, e.g. using [runZonedGuarded][run_zoned_guarded].
- Create a `Zone` with an error handler, e.g. using `runZonedGuarded`.

```dart
var sentry = SentryClient(dsn: "https://...");
Expand All @@ -102,7 +102,7 @@ main() async {
},
);
```
- For Flutter-specific errors (such as layout failures), use [FlutterError.onError][flutter_error]. For example:
- For Flutter-specific errors (such as layout failures), use `FlutterError.onError`. For example:

```dart
var sentry = SentryClient(dsn: "https://...");
Expand All @@ -129,4 +129,4 @@ main() async {
* [![Forum](https://img.shields.io/badge/forum-sentry-green.svg)](https://forum.sentry.io/c/sdks)
* [![Discord](https://img.shields.io/discord/621778831602221064)](https://discord.gg/Ww9hbqr)
* [![Stack Overflow](https://img.shields.io/badge/stack%20overflow-sentry-green.svg)](https://stackoverflow.com/questions/tagged/sentry)
* [![Twitter Follow](https://img.shields.io/twitter/follow/getsentry?label=getsentry&style=social)](https://twitter.com/intent/follow?screen_name=getsentry)
* [![Twitter Follow](https://img.shields.io/twitter/follow/getsentry?label=getsentry&style=social)](https://twitter.com/intent/follow?screen_name=getsentry)
1 change: 0 additions & 1 deletion dart/README.md

This file was deleted.

95 changes: 95 additions & 0 deletions dart/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<p align="center">
<a href="https://sentry.io" target="_blank" align="center">
<img src="https://sentry-brand.storage.googleapis.com/sentry-logo-black.png" width="280">
</a>
<br />
</p>

Sentry SDK for Dart and Flutter
===========

##### Usage

Sign up for a Sentry.io account and get a DSN at http://sentry.io.

In your Dart code, import `package:sentry/sentry.dart` and initialize the Sentry SDK using the DSN issued by Sentry.io:

```dart
import 'package:sentry/sentry.dart';
Sentry.init((options) => options.dsn = 'https://[email protected]/add-your-dsn-here');
```

In an exception handler, call `captureException()`:

```dart
import 'dart:async';
import 'package:sentry/sentry.dart';
void main() async {
try {
aMethodThatMightFail();
} catch (exception, stackTrace) {
await Sentry.captureException(
exception,
stackTrace: stackTrace,
);
}
}
```

##### Tips for catching errors

- Use a `try/catch` block, like in the example above.
- Create a `Zone` with an error handler, e.g. using `runZonedGuarded`.

```dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:sentry/sentry.dart';
// Wrap your 'runApp(MyApp())' as follows:
Future<void> main() async {
runZonedGuarded<Future<void>>(() async {
runApp(MyApp());
}, (exception, stackTrace) async {
await Sentry.captureException(
exception,
stackTrace: stackTrace,
);
});
}
```

- For Flutter-specific errors (such as layout failures), use `FlutterError.onError`. For example:

```dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:sentry/sentry.dart';
// Wrap your 'runApp(MyApp())' as follows:
Future<void> main() async {
FlutterError.onError = (FlutterErrorDetails details) async {
await Sentry.captureException(
details.exception,
stackTrace: details.stack,
);
};
}
```

- Use `Isolate.current.addErrorListener` to capture uncaught errors
in the root zone.

#### Resources

* [![Documentation](https://img.shields.io/badge/documentation-sentry.io-green.svg)](https://docs.sentry.io/platforms/flutter/)
* [![Forum](https://img.shields.io/badge/forum-sentry-green.svg)](https://forum.sentry.io/c/sdks)
* [![Discord](https://img.shields.io/discord/621778831602221064)](https://discord.gg/Ww9hbqr)
* [![Stack Overflow](https://img.shields.io/badge/stack%20overflow-sentry-green.svg)](https://stackoverflow.com/questions/tagged/sentry)
* [![Twitter Follow](https://img.shields.io/twitter/follow/getsentry?label=getsentry&style=social)](https://twitter.com/intent/follow?screen_name=getsentry)
18 changes: 17 additions & 1 deletion dart/analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -1 +1,17 @@
include: package:pedantic/analysis_options.yaml
include: package:pedantic/analysis_options.yaml

analyzer:
errors:
# treat missing required parameters as a warning (not a hint)
missing_required_param: error
# treat missing returns as a warning (not a hint)
missing_return: error
# allow having TODOs in the code
todo: ignore
# allow self-reference to deprecated members (we do this because otherwise we have
# to annotate every member in every test, assert, etc, when we deprecate something)
deprecated_member_use_from_same_package: warning

linter:
rules:
- prefer_relative_imports
77 changes: 77 additions & 0 deletions dart/example/event_example.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import 'package:sentry/src/protocol.dart';

final event = SentryEvent(
logger: 'main',
serverName: 'server.dart',
release: '1.4.0-preview.1',
environment: 'Test',
message: Message('This is an example Dart event.'),
tags: const <String, String>{'project-id': '7371'},
extra: const <String, String>{'section': '1'},
fingerprint: const <String>['example-dart'],
user: const User(
id: '800',
username: 'first-user',
email: '[email protected]',
ipAddress: '127.0.0.1',
extras: <String, String>{'first-sign-in': '2020-01-01'},
),
breadcrumbs: [
Breadcrumb(
message: 'UI Lifecycle',
timestamp: DateTime.now().toUtc(),
category: 'ui.lifecycle',
type: 'navigation',
data: {'screen': 'MainActivity', 'state': 'created'},
level: SentryLevel.info,
)
],
contexts: Contexts(
operatingSystem: const OperatingSystem(
name: 'Android',
version: '5.0.2',
build: 'LRX22G.P900XXS0BPL2',
kernelVersion:
'Linux version 3.4.39-5726670 (dpi@SWHC3807) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Thu Dec 1 19:42:39 KST 2016',
rooted: false,
),
runtimes: [const Runtime(name: 'ART', version: '5')],
app: App(
name: 'Example Dart App',
version: '1.42.0',
identifier: 'HGT-App-13',
build: '93785',
buildType: 'release',
deviceAppHash: '5afd3a6',
startTime: DateTime.now().toUtc(),
),
browser: const Browser(name: 'Firefox', version: '42.0.1'),
device: Device(
name: 'SM-P900',
family: 'SM-P900',
model: 'SM-P900 (LRX22G)',
modelId: 'LRX22G',
arch: 'armeabi-v7a',
batteryLevel: 99,
orientation: Orientation.landscape,
manufacturer: 'samsung',
brand: 'samsung',
screenResolution: '2560x1600',
screenDensity: 2.1,
screenDpi: 320,
online: true,
charging: true,
lowMemory: true,
simulator: false,
memorySize: 1500,
freeMemory: 200,
usableMemory: 4294967296,
storageSize: 4294967296,
freeStorage: 2147483648,
externalStorageSize: 8589934592,
externalFreeStorage: 2863311530,
bootTime: DateTime.now().toUtc(),
timezone: 'America/Toronto',
),
),
);
Loading

0 comments on commit d24cb50

Please sign in to comment.