Skip to content

Commit

Permalink
added skeleton
Browse files Browse the repository at this point in the history
  • Loading branch information
OlehMarch committed Jun 14, 2023
1 parent 301c60e commit 84f3c6a
Show file tree
Hide file tree
Showing 16 changed files with 277 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/app_analysis.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
6 changes: 6 additions & 0 deletions lib/src/collectors.dart
Original file line number Diff line number Diff line change
@@ -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';
9 changes: 9 additions & 0 deletions lib/src/collectors/collector.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import '../models/extremums.dart';

abstract class AnalysisCollector<T> {
const AnalysisCollector._();

void collect(T data);

Extremum<T> getExtremum();
}
17 changes: 17 additions & 0 deletions lib/src/collectors/implementations/battery_level.collector.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import '../../models.dart';
import '../collector.dart';

class AnalysisBatteryLevelCollector implements AnalysisCollector<double> {
const AnalysisBatteryLevelCollector();

@override
void collect(double data) {
// TODO
}

@override
Extremum<double> getExtremum() {
// TODO: implement getExtremum
throw UnimplementedError();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import '../../models.dart';
import '../collector.dart';

class AnalysisBatteryTemperatureCollector implements AnalysisCollector<double> {
const AnalysisBatteryTemperatureCollector();

@override
void collect(double data) {
// TODO
}

@override
Extremum<double> getExtremum() {
// TODO: implement getExtremum
throw UnimplementedError();
}
}
18 changes: 18 additions & 0 deletions lib/src/collectors/implementations/cpu_frequency.collector.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import '../../models.dart';
import '../collector.dart';

class AnalysisCpuFrequencyCollector
implements AnalysisCollector<CpuFrequencies> {
const AnalysisCpuFrequencyCollector();

@override
void collect(CpuFrequencies data) {
// TODO
}

@override
Extremum<CpuFrequencies> getExtremum() {
// TODO: implement getExtremum
throw UnimplementedError();
}
}
17 changes: 17 additions & 0 deletions lib/src/collectors/implementations/cpu_temperature.collector.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import '../../models.dart';
import '../collector.dart';

class AnalysisCpuTemperatureCollector implements AnalysisCollector<double> {
const AnalysisCpuTemperatureCollector();

@override
void collect(double data) {
// TODO
}

@override
Extremum<double> getExtremum() {
// TODO: implement getExtremum
throw UnimplementedError();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import '../../models.dart';
import '../collector.dart';

class AnalysisTrafficConsumptionCollector implements AnalysisCollector<int> {
const AnalysisTrafficConsumptionCollector();

@override
void collect(int data) {
// TODO
}

@override
Extremum<int> getExtremum() {
// TODO: implement getExtremum
throw UnimplementedError();
}
}
4 changes: 4 additions & 0 deletions lib/src/models.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export 'models/cpu_frequencies.dart';
export 'models/data.dart';
export 'models/extremums.dart';
export 'models/info.dart';
7 changes: 7 additions & 0 deletions lib/src/models/cpu_frequencies.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class CpuFrequencies {
const CpuFrequencies(this.frequencies);

static const empty = CpuFrequencies([]);

final List<double> frequencies;
}
51 changes: 51 additions & 0 deletions lib/src/models/data.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import 'cpu_frequencies.dart';

abstract class AnalysisDataInterface {
const AnalysisDataInterface._();

Duration get testDuration;

Map<DateTime, double> get batteryTemperature;
Map<DateTime, double> get batteryLevel;

Map<DateTime, double> get cpuTemperature;
Map<DateTime, CpuFrequencies> get cpuFrequencies;

Map<DateTime, int> 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<DateTime, double> batteryTemperature;
@override
final Map<DateTime, double> batteryLevel;

@override
final Map<DateTime, double> cpuTemperature;
@override
final Map<DateTime, CpuFrequencies> cpuFrequencies;

@override
final Map<DateTime, int> trafficConsumption;
}
37 changes: 37 additions & 0 deletions lib/src/models/extremums.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import 'cpu_frequencies.dart';

class Extremum<T> {
const Extremum(this.min, this.max);

final T min;
final T max;
}

abstract class AnalysisExtremumsInterface {
const AnalysisExtremumsInterface._();

Extremum<double> get batteryTemperature;
Extremum<double> get batteryLevel;

Extremum<double> get cpuTemperature;
Extremum<CpuFrequencies> get cpuFrequencies;
}

class AnalysisExtremums implements AnalysisExtremumsInterface {
const AnalysisExtremums({
required this.batteryTemperature,
required this.batteryLevel,
required this.cpuTemperature,
required this.cpuFrequencies,
});

@override
final Extremum<double> batteryTemperature;
@override
final Extremum<double> batteryLevel;

@override
final Extremum<double> cpuTemperature;
@override
final Extremum<CpuFrequencies> cpuFrequencies;
}
25 changes: 25 additions & 0 deletions lib/src/models/info.dart
Original file line number Diff line number Diff line change
@@ -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;
}
27 changes: 27 additions & 0 deletions lib/src/service.dart
Original file line number Diff line number Diff line change
@@ -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)
1 change: 1 addition & 0 deletions lib/src/storages.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'storages/storage.dart';
19 changes: 19 additions & 0 deletions lib/src/storages/storage.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import 'dart:async';

import '../models.dart';

abstract class AnalysisStorage {
FutureOr<AnalysisInfo> readAll();
FutureOr<AnalysisInfo> read(String id);

FutureOr<void> create(AnalysisInfo info);

FutureOr<void> clear(String id);
FutureOr<void> clearAll();
}

// • AnalysisStorage abstract model, ready to extend
// ○ File
// ○ Memory
// ○ Preferences
// • Methods to Clear One/Clear All analysis results

0 comments on commit 84f3c6a

Please sign in to comment.