Report all errors to Crashlytivs if in production

This commit is contained in:
Yegor Vialov 2020-05-01 14:34:31 +00:00
parent 101569d6ee
commit 58842d1ebb
2 changed files with 21 additions and 17 deletions

View File

@ -122,9 +122,9 @@ class HomeAssistant {
await prefs.setString('cached_panels', json.encode(_rawPanels)); await prefs.setString('cached_panels', json.encode(_rawPanels));
await prefs.setString('cached_services', json.encode(services)); await prefs.setString('cached_services', json.encode(services));
await prefs.setBool('cached', true); await prefs.setBool('cached', true);
} catch (e) { } catch (e, stacktrace) {
await prefs.setBool('cached', false); await prefs.setBool('cached', false);
Logger.e('Error saving cache: $e'); Logger.e('Error saving cache: $e', stacktrace: stacktrace);
} }
Logger.d('Done saving cache'); Logger.d('Done saving cache');
} }
@ -145,12 +145,12 @@ class HomeAssistant {
var data = json.decode(sharedPrefs.getString('cached_config') ?? '{}'); var data = json.decode(sharedPrefs.getString('cached_config') ?? '{}');
_parseConfig(data); _parseConfig(data);
} catch (e, stacktrace) { } catch (e, stacktrace) {
Crashlytics.instance.recordError('Error gettong config from cache: $e', stacktrace); Logger.e('Error gettong config from cache: $e', stacktrace: stacktrace);
throw HACException("Error getting config: $e"); throw HACException("Error getting config: $e");
} }
} else { } else {
await ConnectionManager().sendSocketMessage(type: "get_config").then((data) => _parseConfig(data)).catchError((e) { await ConnectionManager().sendSocketMessage(type: "get_config").then((data) => _parseConfig(data)).catchError((e) {
Crashlytics.instance.recordError('get_config error: $e', null); Logger.e('get_config error: $e');
throw HACException("Error getting config: $e"); throw HACException("Error getting config: $e");
}); });
} }
@ -166,14 +166,14 @@ class HomeAssistant {
var data = json.decode(sharedPrefs.getString('cached_states') ?? '[]'); var data = json.decode(sharedPrefs.getString('cached_states') ?? '[]');
_parseStates(data); _parseStates(data);
} catch (e, stacktrace) { } catch (e, stacktrace) {
Crashlytics.instance.recordError('Error getting cached states: $e', stacktrace); Logger.e('Error getting cached states: $e', stacktrace: stacktrace);
throw HACException("Error getting states: $e"); throw HACException("Error getting states: $e");
} }
} else { } else {
await ConnectionManager().sendSocketMessage(type: "get_states").then( await ConnectionManager().sendSocketMessage(type: "get_states").then(
(data) => _parseStates(data) (data) => _parseStates(data)
).catchError((e) { ).catchError((e) {
Crashlytics.instance.recordError('get_states error: $e', null); Logger.e('get_states error: $e');
throw HACException("Error getting states: $e"); throw HACException("Error getting states: $e");
}); });
} }
@ -213,7 +213,7 @@ class HomeAssistant {
_rawLovelaceData = null; _rawLovelaceData = null;
completer.complete(); completer.complete();
} else { } else {
Crashlytics.instance.recordError('lovelace/config error: $e', null); Logger.e('lovelace/config error: $e');
completer.completeError(HACException("Error getting lovelace config: $e")); completer.completeError(HACException("Error getting lovelace config: $e"));
} }
}); });
@ -228,11 +228,11 @@ class HomeAssistant {
var data = json.decode(prefs.getString('cached_services') ?? '{}'); var data = json.decode(prefs.getString('cached_services') ?? '{}');
_parseServices(data); _parseServices(data);
} catch (e, stacktrace) { } catch (e, stacktrace) {
Crashlytics.instance.recordError(e, stacktrace); Logger.e(e, stacktrace: stacktrace);
} }
} }
await ConnectionManager().sendSocketMessage(type: "get_services").then((data) => _parseServices(data)).catchError((e) { await ConnectionManager().sendSocketMessage(type: "get_services").then((data) => _parseServices(data)).catchError((e) {
Crashlytics.instance.recordError('get_services error: $e', null); Logger.e('get_services error: $e');
}); });
} }
@ -243,7 +243,7 @@ class HomeAssistant {
Future _getUserInfo(SharedPreferences sharedPrefs) async { Future _getUserInfo(SharedPreferences sharedPrefs) async {
_userName = null; _userName = null;
await ConnectionManager().sendSocketMessage(type: "auth/current_user").then((data) => _parseUserInfo(data)).catchError((e) { await ConnectionManager().sendSocketMessage(type: "auth/current_user").then((data) => _parseUserInfo(data)).catchError((e) {
Crashlytics.instance.recordError('auth/current_user error: $e', null); Logger.e('auth/current_user error: $e');
}); });
} }
@ -259,11 +259,11 @@ class HomeAssistant {
var data = json.decode(sharedPrefs.getString('cached_panels') ?? '{}'); var data = json.decode(sharedPrefs.getString('cached_panels') ?? '{}');
_parsePanels(data); _parsePanels(data);
} catch (e, stacktrace) { } catch (e, stacktrace) {
Crashlytics.instance.recordError(e, stacktrace); Logger.e(e, stacktrace: stacktrace);
} }
} else { } else {
await ConnectionManager().sendSocketMessage(type: "get_panels").then((data) => _parsePanels(data)).catchError((e, stacktrace) { await ConnectionManager().sendSocketMessage(type: "get_panels").then((data) => _parsePanels(data)).catchError((e, stacktrace) {
Crashlytics.instance.recordError('get_panels error: $e', stacktrace); Logger.e('get_panels error: $e', stacktrace: stacktrace);
throw HACException('Can\'t get panles: $e'); throw HACException('Can\'t get panles: $e');
}); });
} }

View File

@ -1,7 +1,9 @@
import 'package:date_format/date_format.dart'; import 'package:date_format/date_format.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
enum ErrorLevel {ERROR, WARNING, DEBUG}
class Logger { class Logger {
@ -27,21 +29,23 @@ class Logger {
print(data); print(data);
} }
static void e(String message) { static void e(String message, {dynamic stacktrace}) {
_writeToLog("Error", message); _writeToLog(ErrorLevel.ERROR, message, stacktrace);
} }
static void w(String message) { static void w(String message) {
_writeToLog("Warning", message); _writeToLog(ErrorLevel.WARNING, message, null);
} }
static void d(String message) { static void d(String message) {
_writeToLog("Debug", message); _writeToLog(ErrorLevel.DEBUG, message, null);
} }
static void _writeToLog(String level, String message) { static void _writeToLog(ErrorLevel level, String message, dynamic stacktrace) {
if (isInDebugMode) { if (isInDebugMode) {
debugPrint('$message'); debugPrint('$message');
} else if (level == ErrorLevel.ERROR) {
Crashlytics.instance.recordError('$message', stacktrace);
} }
DateTime t = DateTime.now(); DateTime t = DateTime.now();
_log.add("${formatDate(t, ["mm","dd"," ","HH",":","nn",":","ss"])} [$level] : $message"); _log.add("${formatDate(t, ["mm","dd"," ","HH",":","nn",":","ss"])} [$level] : $message");