Hive, requestlog, etc
This commit is contained in:
@@ -1 +1,29 @@
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
|
||||
part 'application_log.g.dart';
|
||||
|
||||
class ApplicationLog {}
|
||||
|
||||
enum SCNLogLevel { debug, info, warning, error, fatal }
|
||||
|
||||
@HiveType(typeId: 101)
|
||||
class SCNLog extends HiveObject {
|
||||
@HiveField(0)
|
||||
final DateTime timestamp;
|
||||
@HiveField(1)
|
||||
final SCNLogLevel level;
|
||||
@HiveField(2)
|
||||
final String message;
|
||||
@HiveField(3)
|
||||
final String additional;
|
||||
@HiveField(4)
|
||||
final String trace;
|
||||
|
||||
SCNLog(
|
||||
this.timestamp,
|
||||
this.level,
|
||||
this.message,
|
||||
this.additional,
|
||||
this.trace,
|
||||
);
|
||||
}
|
||||
|
53
flutter/lib/state/application_log.g.dart
Normal file
53
flutter/lib/state/application_log.g.dart
Normal file
@@ -0,0 +1,53 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'application_log.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class SCNLogAdapter extends TypeAdapter<SCNLog> {
|
||||
@override
|
||||
final int typeId = 101;
|
||||
|
||||
@override
|
||||
SCNLog read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return SCNLog(
|
||||
fields[0] as DateTime,
|
||||
fields[1] as SCNLogLevel,
|
||||
fields[2] as String,
|
||||
fields[3] as String,
|
||||
fields[4] as String,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, SCNLog obj) {
|
||||
writer
|
||||
..writeByte(5)
|
||||
..writeByte(0)
|
||||
..write(obj.timestamp)
|
||||
..writeByte(1)
|
||||
..write(obj.level)
|
||||
..writeByte(2)
|
||||
..write(obj.message)
|
||||
..writeByte(3)
|
||||
..write(obj.additional)
|
||||
..writeByte(4)
|
||||
..write(obj.trace);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is SCNLogAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
@@ -1,46 +0,0 @@
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||
import 'dart:io';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
class SCNDatabase {
|
||||
static SCNDatabase? instance = null;
|
||||
|
||||
final Database _db;
|
||||
|
||||
SCNDatabase._(this._db) {}
|
||||
|
||||
static create() async {
|
||||
var docPath = await getApplicationDocumentsDirectory();
|
||||
var dbpath = path.join(docPath.absolute.path, 'scn.db');
|
||||
|
||||
if (Platform.isWindows || Platform.isLinux) {
|
||||
sqfliteFfiInit();
|
||||
}
|
||||
|
||||
var db = await databaseFactoryFfi.openDatabase(dbpath,
|
||||
options: OpenDatabaseOptions(
|
||||
version: 1,
|
||||
onCreate: (db, version) async {
|
||||
initDatabase(db);
|
||||
},
|
||||
onUpgrade: (db, oldVersion, newVersion) async {
|
||||
upgradeDatabase(db, oldVersion, newVersion);
|
||||
},
|
||||
));
|
||||
|
||||
return instance = SCNDatabase._(db);
|
||||
}
|
||||
|
||||
static void initDatabase(Database db) async {
|
||||
await db.execute('CREATE TABLE requests (id INTEGER PRIMARY KEY, timestamp DATETIME, name TEXT, url TEXT, response_code INTEGER, response TEXT, status TEXT)');
|
||||
|
||||
await db.execute('CREATE TABLE logs (id INTEGER PRIMARY KEY, timestamp DATETIME, level TEXT, text TEXT, additional TEXT)');
|
||||
|
||||
await db.execute('CREATE TABLE messages (message_id INTEGER PRIMARY KEY, receive_timestamp DATETIME, channel_id TEXT, timestamp TEXT, data JSON)');
|
||||
}
|
||||
|
||||
static void upgradeDatabase(Database db, int oldVersion, int newVersion) {
|
||||
// ...
|
||||
}
|
||||
}
|
31
flutter/lib/state/globals.dart
Normal file
31
flutter/lib/state/globals.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
|
||||
class Globals {
|
||||
static final Globals _singleton = Globals._internal();
|
||||
|
||||
factory Globals() {
|
||||
return _singleton;
|
||||
}
|
||||
|
||||
Globals._internal();
|
||||
|
||||
String appName = '';
|
||||
String packageName = '';
|
||||
String version = '';
|
||||
String buildNumber = '';
|
||||
String platform = '';
|
||||
String hostname = '';
|
||||
|
||||
init() async {
|
||||
PackageInfo packageInfo = await PackageInfo.fromPlatform();
|
||||
|
||||
this.appName = packageInfo.appName;
|
||||
this.packageName = packageInfo.packageName;
|
||||
this.version = packageInfo.version;
|
||||
this.buildNumber = packageInfo.buildNumber;
|
||||
this.platform = Platform.operatingSystem;
|
||||
this.hostname = Platform.localHostname;
|
||||
}
|
||||
}
|
@@ -1 +1,144 @@
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:simplecloudnotifier/models/api_error.dart';
|
||||
|
||||
part 'request_log.g.dart';
|
||||
|
||||
class RequestLog {
|
||||
static void addRequestException(String name, DateTime tStart, String method, Uri uri, String reqbody, Map<String, String> reqheaders, dynamic e, StackTrace trace) {
|
||||
Hive.box<SCNRequest>('scn-requests').add(SCNRequest(
|
||||
timestampStart: tStart,
|
||||
timestampEnd: DateTime.now(),
|
||||
name: name,
|
||||
method: method,
|
||||
url: uri.toString(),
|
||||
requestHeaders: reqheaders,
|
||||
requestBody: reqbody,
|
||||
responseStatusCode: 0,
|
||||
responseHeaders: {},
|
||||
responseBody: '',
|
||||
type: 'EXCEPTION',
|
||||
error: (e is Exception) ? e.toString() : '$e',
|
||||
stackTrace: trace.toString(),
|
||||
));
|
||||
}
|
||||
|
||||
static void addRequestAPIError(String name, DateTime t0, String method, Uri uri, String reqbody, Map<String, String> reqheaders, int responseStatusCode, String responseBody, Map<String, String> responseHeaders, APIError apierr) {
|
||||
Hive.box<SCNRequest>('scn-requests').add(SCNRequest(
|
||||
timestampStart: t0,
|
||||
timestampEnd: DateTime.now(),
|
||||
name: name,
|
||||
method: method,
|
||||
url: uri.toString(),
|
||||
requestHeaders: reqheaders,
|
||||
requestBody: reqbody,
|
||||
responseStatusCode: responseStatusCode,
|
||||
responseHeaders: responseHeaders,
|
||||
responseBody: responseBody,
|
||||
type: 'API_ERROR',
|
||||
error: apierr.message,
|
||||
stackTrace: '',
|
||||
));
|
||||
}
|
||||
|
||||
static void addRequestErrorStatuscode(String name, DateTime t0, String method, Uri uri, String reqbody, Map<String, String> reqheaders, int responseStatusCode, String responseBody, Map<String, String> responseHeaders) {
|
||||
Hive.box<SCNRequest>('scn-requests').add(SCNRequest(
|
||||
timestampStart: t0,
|
||||
timestampEnd: DateTime.now(),
|
||||
name: name,
|
||||
method: method,
|
||||
url: uri.toString(),
|
||||
requestHeaders: reqheaders,
|
||||
requestBody: reqbody,
|
||||
responseStatusCode: responseStatusCode,
|
||||
responseHeaders: responseHeaders,
|
||||
responseBody: responseBody,
|
||||
type: 'ERROR_STATUSCODE',
|
||||
error: 'API request failed with status code $responseStatusCode',
|
||||
stackTrace: '',
|
||||
));
|
||||
}
|
||||
|
||||
static void addRequestSuccess(String name, DateTime t0, String method, Uri uri, String reqbody, Map<String, String> reqheaders, int responseStatusCode, String responseBody, Map<String, String> responseHeaders) {
|
||||
Hive.box<SCNRequest>('scn-requests').add(SCNRequest(
|
||||
timestampStart: t0,
|
||||
timestampEnd: DateTime.now(),
|
||||
name: name,
|
||||
method: method,
|
||||
url: uri.toString(),
|
||||
requestHeaders: reqheaders,
|
||||
requestBody: reqbody,
|
||||
responseStatusCode: responseStatusCode,
|
||||
responseHeaders: responseHeaders,
|
||||
responseBody: responseBody,
|
||||
type: 'SUCCESS',
|
||||
error: '',
|
||||
stackTrace: '',
|
||||
));
|
||||
}
|
||||
|
||||
static void addRequestDecodeError(String name, DateTime t0, String method, Uri uri, String reqbody, Map<String, String> reqheaders, int responseStatusCode, String responseBody, Map<String, String> responseHeaders, Object exc, StackTrace trace) {
|
||||
Hive.box<SCNRequest>('scn-requests').add(SCNRequest(
|
||||
timestampStart: t0,
|
||||
timestampEnd: DateTime.now(),
|
||||
name: name,
|
||||
method: method,
|
||||
url: uri.toString(),
|
||||
requestHeaders: reqheaders,
|
||||
requestBody: reqbody,
|
||||
responseStatusCode: responseStatusCode,
|
||||
responseHeaders: responseHeaders,
|
||||
responseBody: responseBody,
|
||||
type: 'DECODE_ERROR',
|
||||
error: (exc is Exception) ? exc.toString() : '$exc',
|
||||
stackTrace: trace.toString(),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@HiveType(typeId: 100)
|
||||
class SCNRequest extends HiveObject {
|
||||
@HiveField(0)
|
||||
final DateTime timestampStart;
|
||||
@HiveField(1)
|
||||
final DateTime timestampEnd;
|
||||
@HiveField(2)
|
||||
final String name;
|
||||
@HiveField(3)
|
||||
final String type;
|
||||
@HiveField(4)
|
||||
final String error;
|
||||
@HiveField(5)
|
||||
final String stackTrace;
|
||||
|
||||
@HiveField(6)
|
||||
final String method;
|
||||
@HiveField(7)
|
||||
final String url;
|
||||
@HiveField(8)
|
||||
final Map<String, String> requestHeaders;
|
||||
@HiveField(12)
|
||||
final String requestBody;
|
||||
|
||||
@HiveField(9)
|
||||
final int responseStatusCode;
|
||||
@HiveField(10)
|
||||
final Map<String, String> responseHeaders;
|
||||
@HiveField(11)
|
||||
final String responseBody;
|
||||
|
||||
SCNRequest({
|
||||
required this.timestampStart,
|
||||
required this.timestampEnd,
|
||||
required this.name,
|
||||
required this.method,
|
||||
required this.url,
|
||||
required this.requestHeaders,
|
||||
required this.requestBody,
|
||||
required this.responseStatusCode,
|
||||
required this.responseHeaders,
|
||||
required this.responseBody,
|
||||
required this.type,
|
||||
required this.error,
|
||||
required this.stackTrace,
|
||||
});
|
||||
}
|
||||
|
77
flutter/lib/state/request_log.g.dart
Normal file
77
flutter/lib/state/request_log.g.dart
Normal file
@@ -0,0 +1,77 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'request_log.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class SCNRequestAdapter extends TypeAdapter<SCNRequest> {
|
||||
@override
|
||||
final int typeId = 100;
|
||||
|
||||
@override
|
||||
SCNRequest read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return SCNRequest(
|
||||
timestampStart: fields[0] as DateTime,
|
||||
timestampEnd: fields[1] as DateTime,
|
||||
name: fields[2] as String,
|
||||
method: fields[6] as String,
|
||||
url: fields[7] as String,
|
||||
requestHeaders: (fields[8] as Map).cast<String, String>(),
|
||||
requestBody: fields[12] as String,
|
||||
responseStatusCode: fields[9] as int,
|
||||
responseHeaders: (fields[10] as Map).cast<String, String>(),
|
||||
responseBody: fields[11] as String,
|
||||
type: fields[3] as String,
|
||||
error: fields[4] as String,
|
||||
stackTrace: fields[5] as String,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, SCNRequest obj) {
|
||||
writer
|
||||
..writeByte(13)
|
||||
..writeByte(0)
|
||||
..write(obj.timestampStart)
|
||||
..writeByte(1)
|
||||
..write(obj.timestampEnd)
|
||||
..writeByte(2)
|
||||
..write(obj.name)
|
||||
..writeByte(3)
|
||||
..write(obj.type)
|
||||
..writeByte(4)
|
||||
..write(obj.error)
|
||||
..writeByte(5)
|
||||
..write(obj.stackTrace)
|
||||
..writeByte(6)
|
||||
..write(obj.method)
|
||||
..writeByte(7)
|
||||
..write(obj.url)
|
||||
..writeByte(8)
|
||||
..write(obj.requestHeaders)
|
||||
..writeByte(12)
|
||||
..write(obj.requestBody)
|
||||
..writeByte(9)
|
||||
..write(obj.responseStatusCode)
|
||||
..writeByte(10)
|
||||
..write(obj.responseHeaders)
|
||||
..writeByte(11)
|
||||
..write(obj.responseBody);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is SCNRequestAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
@@ -71,7 +71,7 @@ class UserAccount extends ChangeNotifier {
|
||||
throw Exception('Not authenticated');
|
||||
}
|
||||
|
||||
final user = await APIClient.getUser(_auth!.userId, _auth!.token);
|
||||
final user = await APIClient.getUser(_auth!, _auth!.userId);
|
||||
|
||||
setUser(user);
|
||||
|
||||
|
Reference in New Issue
Block a user