From 8f02092731dfdddfdf853d0835ef38fcf3c97017 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 9 Aug 2021 08:22:36 +1000 Subject: [PATCH] Add extra error reporting information in sentry errors --- lib/api.dart | 51 ++++++++++++++++++++++++++-------------- lib/barcode.dart | 2 ++ lib/inventree/model.dart | 8 ++++++- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/lib/api.dart b/lib/api.dart index 0f94c3ff..c7dfb65c 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -23,7 +23,7 @@ import 'package:inventree/widget/snacks.dart'; */ class APIResponse { - APIResponse({this.url = "", this.method = "", this.statusCode = -1, this.data = const {}}); + APIResponse({this.url = "", this.method = "", this.statusCode = -1, this.error = "", this.data = const {}}); int statusCode = -1; @@ -31,6 +31,10 @@ class APIResponse { String method = ""; + String error = ""; + + String errorDetail = ""; + dynamic data = {}; // Request is "valid" if a statusCode was returned @@ -450,6 +454,7 @@ class InvenTreeAPI { return new APIResponse( url: url, method: 'PATCH', + error: "HttpClientRequest is null" ); } @@ -667,34 +672,43 @@ class InvenTreeAPI { } else { response.data = await responseToJson(_response) ?? {}; - // Expected status code not returned - if ((statusCode != null) && (statusCode != _response.statusCode)) { - showStatusCodeError(_response.statusCode); - } + if (statusCode != null) { - // Report any server errors - if (_response.statusCode >= 500) { - sentryReportMessage( - "Server error", - context: { - "url": request.uri.toString(), - "method": request.method, - "statusCode": _response.statusCode.toString(), - "requestHeaders": request.headers.toString(), - "responseHeaders": _response.headers.toString(), - "responseData": response.data.toString(), - } - ); + // Expected status code not returned + if (statusCode != _response.statusCode) { + showStatusCodeError(_response.statusCode); + } + + // Report any server errors + if (_response.statusCode >= 500) { + sentryReportMessage( + "Server error", + context: { + "url": request.uri.toString(), + "method": request.method, + "statusCode": _response.statusCode.toString(), + "requestHeaders": request.headers.toString(), + "responseHeaders": _response.headers.toString(), + "responseData": response.data.toString(), + } + ); + } } } } on SocketException catch (error) { showServerError(L10().connectionRefused, error.toString()); + response.error = "SocketException"; + response.errorDetail = error.toString(); + } on TimeoutException { showTimeoutError(); + response.error = "TimeoutException"; } catch (error, stackTrace) { showServerError(L10().serverError, error.toString()); sentryReportError(error, stackTrace); + response.error = "UnknownError"; + response.errorDetail = error.toString(); } return response; @@ -754,6 +768,7 @@ class InvenTreeAPI { return new APIResponse( url: url, method: 'GET', + error: "HttpClientRequest is null", ); } diff --git a/lib/barcode.dart b/lib/barcode.dart index 99891a99..3fb7bf96 100644 --- a/lib/barcode.dart +++ b/lib/barcode.dart @@ -114,6 +114,8 @@ class BarcodeHandler { "url": url, "statusCode": response.statusCode.toString(), "valid": response.isValid().toString(), + "error": response.error, + "errorDetail": response.errorDetail, } ); } else if (response.data.containsKey('error')) { diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart index 5f58c086..10eff329 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -162,6 +162,8 @@ class InvenTreeModel { "statusCode": response.statusCode.toString(), "data": response.data?.toString() ?? "null", "valid": response.isValid().toString(), + "error": response.error, + "errorDetail": response.errorDetail, } ); @@ -230,7 +232,9 @@ class InvenTreeModel { "url": url, "statusCode": response.statusCode.toString(), "data": response.data?.toString() ?? "null", - "valid": response.isValid().toString() + "valid": response.isValid().toString(), + "error": response.error, + "errorDetail": response.errorDetail, } ); @@ -270,6 +274,8 @@ class InvenTreeModel { "statusCode": response.statusCode.toString(), "data": response.data?.toString() ?? "null", "valid": response.isValid().toString(), + "error": response.error, + "errorDetail": response.errorDetail, } );