From 719a5a7274a78e832a91f705de8907cd29cb32c2 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Mon, 7 Aug 2023 04:08:54 -0300 Subject: [PATCH] fix(hetzner): Normalize CPU usage percentage by cached amount of cores --- .../providers/server_providers/hetzner.dart | 52 +++++++++++++++++-- .../server_details/charts/cpu_chart.dart | 6 +-- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/lib/logic/providers/server_providers/hetzner.dart b/lib/logic/providers/server_providers/hetzner.dart index ec15801e..fb32dc12 100644 --- a/lib/logic/providers/server_providers/hetzner.dart +++ b/lib/logic/providers/server_providers/hetzner.dart @@ -46,6 +46,7 @@ class HetznerServerProvider extends ServerProvider { ApiAdapter _adapter; final Currency currency = Currency.fromType(CurrencyType.eur); + int? cachedCoreAmount; @override ServerProviderType get type => ServerProviderType.hetzner; @@ -287,6 +288,8 @@ class HetznerServerProvider extends ServerProvider { provider: ServerProviderType.hetzner, ); + cachedCoreAmount = serverResult.data!.serverType.cores; + final createDnsResult = await _adapter.api().createReverseDns( serverId: serverDetails.id, ip4: serverDetails.ip4, @@ -775,7 +778,7 @@ class HetznerServerProvider extends ServerProvider { ) async { ServerMetrics? metrics; - List serializeTimeSeries( + List serializeTimeNetworkSeries( final Map json, final String type, ) { @@ -785,6 +788,47 @@ class HetznerServerProvider extends ServerProvider { .toList(); } + if (cachedCoreAmount == null) { + final serversResult = await _adapter.api().getServers(); + if (serversResult.data.isEmpty || !serversResult.success) { + return GenericResult( + success: false, + data: metrics, + code: serversResult.code, + message: serversResult.message, + ); + } + + for (final server in serversResult.data) { + if (server.id == serverId) { + cachedCoreAmount = server.serverType.cores; + } + } + + if (cachedCoreAmount == null) { + return GenericResult( + success: false, + data: metrics, + message: "Couldn't find active server to cache core amount", + ); + } + } + + List serializeTimeCpuSeries( + final Map json, + final String type, + ) { + final List list = json['time_series'][type]['values']; + return list + .map( + (final el) => TimeSeriesData( + el[0], + double.parse(el[1]) / cachedCoreAmount!, + ), + ) + .toList(); + } + final cpuResult = await _adapter.api().getMetrics( serverId, start, @@ -818,15 +862,15 @@ class HetznerServerProvider extends ServerProvider { } metrics = ServerMetrics( - cpu: serializeTimeSeries( + cpu: serializeTimeCpuSeries( cpuResult.data, 'cpu', ), - bandwidthIn: serializeTimeSeries( + bandwidthIn: serializeTimeNetworkSeries( netResult.data, 'network.0.bandwidth.in', ), - bandwidthOut: serializeTimeSeries( + bandwidthOut: serializeTimeNetworkSeries( netResult.data, 'network.0.bandwidth.out', ), diff --git a/lib/ui/pages/server_details/charts/cpu_chart.dart b/lib/ui/pages/server_details/charts/cpu_chart.dart index 2ec349a0..a11361d4 100644 --- a/lib/ui/pages/server_details/charts/cpu_chart.dart +++ b/lib/ui/pages/server_details/charts/cpu_chart.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:selfprivacy/logic/common_enum/common_enum.dart'; @@ -85,9 +83,7 @@ class CpuChart extends StatelessWidget { ], minY: 0, // Maximal value of data by 100 step - maxY: - ((data.map((final e) => e.value).reduce(max) - 1) / 100).ceil() * - 100.0, + maxY: 100, minX: 0, titlesData: FlTitlesData( topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)),