selfprivacy.org.app/lib/logic/cubit/hetzner_metrics/hetzner_metrics_repository....

61 lines
1.9 KiB
Dart
Raw Normal View History

import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/hetzner/hetzner.dart';
2021-04-10 06:04:23 +03:00
import 'package:selfprivacy/logic/common_enum/common_enum.dart';
import 'package:selfprivacy/logic/models/hetzner_metrics.dart';
2022-06-05 22:36:32 +03:00
import 'package:selfprivacy/logic/cubit/hetzner_metrics/hetzner_metrics_cubit.dart';
2021-04-10 06:04:23 +03:00
class HetznerMetricsRepository {
2022-06-05 22:36:32 +03:00
Future<HetznerMetricsLoaded> getMetrics(final Period period) async {
final DateTime end = DateTime.now();
2021-04-10 06:04:23 +03:00
DateTime start;
switch (period) {
case Period.hour:
2022-05-24 21:55:39 +03:00
start = end.subtract(const Duration(hours: 1));
2021-04-10 06:04:23 +03:00
break;
case Period.day:
2022-05-24 21:55:39 +03:00
start = end.subtract(const Duration(days: 1));
2021-04-10 06:04:23 +03:00
break;
case Period.month:
2022-05-24 21:55:39 +03:00
start = end.subtract(const Duration(days: 15));
2021-04-10 06:04:23 +03:00
break;
}
2022-06-05 22:36:32 +03:00
final HetznerApi api = HetznerApi(hasLogger: true);
2021-04-10 06:04:23 +03:00
2022-06-05 22:36:32 +03:00
final List<Map<String, dynamic>> results = await Future.wait([
2021-04-10 06:04:23 +03:00
api.getMetrics(start, end, 'cpu'),
api.getMetrics(start, end, 'network'),
]);
2022-06-05 22:36:32 +03:00
final cpuMetricsData = results[0]['metrics'];
final networkMetricsData = results[1]['metrics'];
2021-04-10 06:04:23 +03:00
return HetznerMetricsLoaded(
period: period,
start: start,
end: end,
2022-05-24 21:55:39 +03:00
stepInSeconds: cpuMetricsData['step'],
2021-04-10 06:04:23 +03:00
cpu: timeSeriesSerializer(cpuMetricsData, 'cpu'),
ppsIn: timeSeriesSerializer(networkMetricsData, 'network.0.pps.in'),
ppsOut: timeSeriesSerializer(networkMetricsData, 'network.0.pps.out'),
bandwidthIn:
timeSeriesSerializer(networkMetricsData, 'network.0.bandwidth.in'),
bandwidthOut: timeSeriesSerializer(
networkMetricsData,
'network.0.bandwidth.out',
),
);
}
}
List<TimeSeriesData> timeSeriesSerializer(
final Map<String, dynamic> json,
final String type,
) {
2022-06-05 22:36:32 +03:00
final List list = json['time_series'][type]['values'];
return list
.map((final el) => TimeSeriesData(el[0], double.parse(el[1])))
.toList();
2021-04-10 06:04:23 +03:00
}