From 84f3c6ae7d8aea0fbb126bf270830976ade81821 Mon Sep 17 00:00:00 2001 From: Oleh Marchenko Date: Wed, 14 Jun 2023 23:48:01 +0300 Subject: [PATCH] added skeleton --- lib/app_analysis.dart | 5 ++ lib/src/collectors.dart | 6 +++ lib/src/collectors/collector.dart | 9 ++++ .../battery_level.collector.dart | 17 +++++++ .../battery_temperature.collector.dart | 17 +++++++ .../cpu_frequency.collector.dart | 18 +++++++ .../cpu_temperature.collector.dart | 17 +++++++ .../traffic_consumption.collector.dart | 17 +++++++ lib/src/models.dart | 4 ++ lib/src/models/cpu_frequencies.dart | 7 +++ lib/src/models/data.dart | 51 +++++++++++++++++++ lib/src/models/extremums.dart | 37 ++++++++++++++ lib/src/models/info.dart | 25 +++++++++ lib/src/service.dart | 27 ++++++++++ lib/src/storages.dart | 1 + lib/src/storages/storage.dart | 19 +++++++ 16 files changed, 277 insertions(+) create mode 100644 lib/src/collectors.dart create mode 100644 lib/src/collectors/collector.dart create mode 100644 lib/src/collectors/implementations/battery_level.collector.dart create mode 100644 lib/src/collectors/implementations/battery_temperature.collector.dart create mode 100644 lib/src/collectors/implementations/cpu_frequency.collector.dart create mode 100644 lib/src/collectors/implementations/cpu_temperature.collector.dart create mode 100644 lib/src/collectors/implementations/traffic_consumption.collector.dart create mode 100644 lib/src/models.dart create mode 100644 lib/src/models/cpu_frequencies.dart create mode 100644 lib/src/models/data.dart create mode 100644 lib/src/models/extremums.dart create mode 100644 lib/src/models/info.dart create mode 100644 lib/src/service.dart create mode 100644 lib/src/storages.dart create mode 100644 lib/src/storages/storage.dart diff --git a/lib/app_analysis.dart b/lib/app_analysis.dart index f68f81d..acacbe5 100644 --- a/lib/app_analysis.dart +++ b/lib/app_analysis.dart @@ -3,3 +3,8 @@ // BSD-style license that can be found in the LICENSE file. library app_analysis; + +export 'src/collectors.dart'; +export 'src/models.dart' hide AnalysisExtremums, AnalysisData; +export 'src/service.dart'; +export 'src/storages.dart'; diff --git a/lib/src/collectors.dart b/lib/src/collectors.dart new file mode 100644 index 0000000..a5a78ed --- /dev/null +++ b/lib/src/collectors.dart @@ -0,0 +1,6 @@ +export 'collectors/collector.dart'; +export 'collectors/implementations/battery_level.collector.dart'; +export 'collectors/implementations/battery_temperature.collector.dart'; +export 'collectors/implementations/cpu_frequency.collector.dart'; +export 'collectors/implementations/cpu_temperature.collector.dart'; +export 'collectors/implementations/traffic_consumption.collector.dart'; diff --git a/lib/src/collectors/collector.dart b/lib/src/collectors/collector.dart new file mode 100644 index 0000000..dd1fb0b --- /dev/null +++ b/lib/src/collectors/collector.dart @@ -0,0 +1,9 @@ +import '../models/extremums.dart'; + +abstract class AnalysisCollector { + const AnalysisCollector._(); + + void collect(T data); + + Extremum getExtremum(); +} diff --git a/lib/src/collectors/implementations/battery_level.collector.dart b/lib/src/collectors/implementations/battery_level.collector.dart new file mode 100644 index 0000000..ee3c778 --- /dev/null +++ b/lib/src/collectors/implementations/battery_level.collector.dart @@ -0,0 +1,17 @@ +import '../../models.dart'; +import '../collector.dart'; + +class AnalysisBatteryLevelCollector implements AnalysisCollector { + const AnalysisBatteryLevelCollector(); + + @override + void collect(double data) { + // TODO + } + + @override + Extremum getExtremum() { + // TODO: implement getExtremum + throw UnimplementedError(); + } +} diff --git a/lib/src/collectors/implementations/battery_temperature.collector.dart b/lib/src/collectors/implementations/battery_temperature.collector.dart new file mode 100644 index 0000000..163c340 --- /dev/null +++ b/lib/src/collectors/implementations/battery_temperature.collector.dart @@ -0,0 +1,17 @@ +import '../../models.dart'; +import '../collector.dart'; + +class AnalysisBatteryTemperatureCollector implements AnalysisCollector { + const AnalysisBatteryTemperatureCollector(); + + @override + void collect(double data) { + // TODO + } + + @override + Extremum getExtremum() { + // TODO: implement getExtremum + throw UnimplementedError(); + } +} diff --git a/lib/src/collectors/implementations/cpu_frequency.collector.dart b/lib/src/collectors/implementations/cpu_frequency.collector.dart new file mode 100644 index 0000000..54f4cde --- /dev/null +++ b/lib/src/collectors/implementations/cpu_frequency.collector.dart @@ -0,0 +1,18 @@ +import '../../models.dart'; +import '../collector.dart'; + +class AnalysisCpuFrequencyCollector + implements AnalysisCollector { + const AnalysisCpuFrequencyCollector(); + + @override + void collect(CpuFrequencies data) { + // TODO + } + + @override + Extremum getExtremum() { + // TODO: implement getExtremum + throw UnimplementedError(); + } +} diff --git a/lib/src/collectors/implementations/cpu_temperature.collector.dart b/lib/src/collectors/implementations/cpu_temperature.collector.dart new file mode 100644 index 0000000..f62a996 --- /dev/null +++ b/lib/src/collectors/implementations/cpu_temperature.collector.dart @@ -0,0 +1,17 @@ +import '../../models.dart'; +import '../collector.dart'; + +class AnalysisCpuTemperatureCollector implements AnalysisCollector { + const AnalysisCpuTemperatureCollector(); + + @override + void collect(double data) { + // TODO + } + + @override + Extremum getExtremum() { + // TODO: implement getExtremum + throw UnimplementedError(); + } +} diff --git a/lib/src/collectors/implementations/traffic_consumption.collector.dart b/lib/src/collectors/implementations/traffic_consumption.collector.dart new file mode 100644 index 0000000..5700210 --- /dev/null +++ b/lib/src/collectors/implementations/traffic_consumption.collector.dart @@ -0,0 +1,17 @@ +import '../../models.dart'; +import '../collector.dart'; + +class AnalysisTrafficConsumptionCollector implements AnalysisCollector { + const AnalysisTrafficConsumptionCollector(); + + @override + void collect(int data) { + // TODO + } + + @override + Extremum getExtremum() { + // TODO: implement getExtremum + throw UnimplementedError(); + } +} diff --git a/lib/src/models.dart b/lib/src/models.dart new file mode 100644 index 0000000..9973af4 --- /dev/null +++ b/lib/src/models.dart @@ -0,0 +1,4 @@ +export 'models/cpu_frequencies.dart'; +export 'models/data.dart'; +export 'models/extremums.dart'; +export 'models/info.dart'; diff --git a/lib/src/models/cpu_frequencies.dart b/lib/src/models/cpu_frequencies.dart new file mode 100644 index 0000000..9bb595c --- /dev/null +++ b/lib/src/models/cpu_frequencies.dart @@ -0,0 +1,7 @@ +class CpuFrequencies { + const CpuFrequencies(this.frequencies); + + static const empty = CpuFrequencies([]); + + final List frequencies; +} diff --git a/lib/src/models/data.dart b/lib/src/models/data.dart new file mode 100644 index 0000000..9a6860f --- /dev/null +++ b/lib/src/models/data.dart @@ -0,0 +1,51 @@ +import 'cpu_frequencies.dart'; + +abstract class AnalysisDataInterface { + const AnalysisDataInterface._(); + + Duration get testDuration; + + Map get batteryTemperature; + Map get batteryLevel; + + Map get cpuTemperature; + Map get cpuFrequencies; + + Map get trafficConsumption; +} + +class AnalysisData implements AnalysisDataInterface { + const AnalysisData({ + required this.testDuration, + required this.batteryTemperature, + required this.batteryLevel, + required this.cpuTemperature, + required this.cpuFrequencies, + required this.trafficConsumption, + }); + + static const empty = AnalysisData( + testDuration: Duration.zero, + batteryTemperature: {}, + batteryLevel: {}, + cpuTemperature: {}, + cpuFrequencies: {}, + trafficConsumption: {}, + ); + + @override + final Duration testDuration; + + @override + final Map batteryTemperature; + @override + final Map batteryLevel; + + @override + final Map cpuTemperature; + @override + final Map cpuFrequencies; + + @override + final Map trafficConsumption; +} diff --git a/lib/src/models/extremums.dart b/lib/src/models/extremums.dart new file mode 100644 index 0000000..b48dc83 --- /dev/null +++ b/lib/src/models/extremums.dart @@ -0,0 +1,37 @@ +import 'cpu_frequencies.dart'; + +class Extremum { + const Extremum(this.min, this.max); + + final T min; + final T max; +} + +abstract class AnalysisExtremumsInterface { + const AnalysisExtremumsInterface._(); + + Extremum get batteryTemperature; + Extremum get batteryLevel; + + Extremum get cpuTemperature; + Extremum get cpuFrequencies; +} + +class AnalysisExtremums implements AnalysisExtremumsInterface { + const AnalysisExtremums({ + required this.batteryTemperature, + required this.batteryLevel, + required this.cpuTemperature, + required this.cpuFrequencies, + }); + + @override + final Extremum batteryTemperature; + @override + final Extremum batteryLevel; + + @override + final Extremum cpuTemperature; + @override + final Extremum cpuFrequencies; +} diff --git a/lib/src/models/info.dart b/lib/src/models/info.dart new file mode 100644 index 0000000..9b75541 --- /dev/null +++ b/lib/src/models/info.dart @@ -0,0 +1,25 @@ +import 'data.dart'; +import 'extremums.dart'; + +class AnalysisInfo { + factory AnalysisInfo({ + required AnalysisData data, + required AnalysisExtremums extremums, + }) { + return AnalysisInfo._( + id: '', // TODO generate random id + data: data, + extremums: extremums, + ); + } + + const AnalysisInfo._({ + required this.id, + required this.data, + required this.extremums, + }); + + final String id; + final AnalysisData data; + final AnalysisExtremums extremums; +} diff --git a/lib/src/service.dart b/lib/src/service.dart new file mode 100644 index 0000000..ad0dc7d --- /dev/null +++ b/lib/src/service.dart @@ -0,0 +1,27 @@ +import 'models.dart'; + +class AnalysisService { + factory AnalysisService() => _instance; + const AnalysisService._(); + static const _instance = AnalysisService._(); + + void start() { + // TODO + } + + void stop() { + // TODO + } + + AnalysisExtremums getExtremums() { + // TODO: implement getExtremums + throw UnimplementedError(); + } +} + +// • Collector +// ○ Battery consumption % (every 30 sec) +// ○ RAM consumption (every 30 sec) +// ○ Network traffic consumption (per request) +// +// • Method to form ResultInfo (test duration, collectors results, RAM min max avg values) \ No newline at end of file diff --git a/lib/src/storages.dart b/lib/src/storages.dart new file mode 100644 index 0000000..a9a856c --- /dev/null +++ b/lib/src/storages.dart @@ -0,0 +1 @@ +export 'storages/storage.dart'; diff --git a/lib/src/storages/storage.dart b/lib/src/storages/storage.dart new file mode 100644 index 0000000..1260f1a --- /dev/null +++ b/lib/src/storages/storage.dart @@ -0,0 +1,19 @@ +import 'dart:async'; + +import '../models.dart'; + +abstract class AnalysisStorage { + FutureOr readAll(); + FutureOr read(String id); + + FutureOr create(AnalysisInfo info); + + FutureOr clear(String id); + FutureOr clearAll(); +} + +// • AnalysisStorage abstract model, ready to extend +// ○ File +// ○ Memory +// ○ Preferences +// • Methods to Clear One/Clear All analysis results \ No newline at end of file