From 75d97c41d526d2cd1bbdf41f9a7c37ab19238d8f Mon Sep 17 00:00:00 2001 From: Dmitrii Romashov Date: Wed, 27 Jul 2022 19:48:55 +0300 Subject: [PATCH] TASK SIO-4352 Add info about traffic --- modules/servers/solusiovps/lang/english.php | 3 ++ .../servers/solusiovps/lib/Helpers/Unit.php | 39 +++++++++++++++++++ modules/servers/solusiovps/solusiovps.php | 12 ++++++ .../servers/solusiovps/templates/overview.tpl | 11 +++++- tests/ClientAreaTest.php | 36 ++++++++++++++++- tests/lib/Helpers/UnitTest.php | 39 +++++++++++++++++++ 6 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 modules/servers/solusiovps/lib/Helpers/Unit.php create mode 100644 tests/lib/Helpers/UnitTest.php diff --git a/modules/servers/solusiovps/lang/english.php b/modules/servers/solusiovps/lang/english.php index eca173c..2dbe45f 100644 --- a/modules/servers/solusiovps/lang/english.php +++ b/modules/servers/solusiovps/lang/english.php @@ -65,3 +65,6 @@ $_LANG['solusiovps_chart_memory_title'] = 'Memory usage'; $_LANG['solusiovps_chart_memory_label_usage'] = 'Usage MiB'; + +$_LANG['solusvm2vps_traffic'] = 'Total traffic'; + diff --git a/modules/servers/solusiovps/lib/Helpers/Unit.php b/modules/servers/solusiovps/lib/Helpers/Unit.php new file mode 100644 index 0000000..a45c868 --- /dev/null +++ b/modules/servers/solusiovps/lib/Helpers/Unit.php @@ -0,0 +1,39 @@ + 1024, + self::MiB => 1024*1024, + self::GiB => 1024*1024*1024, + self::TiB => 1024*1024*1024*1024, + self::PiB => 1024*1024*1024*1024*1024, + ]; + + public static function convert(int $bytes, string $unit, int $decimal = 2): float + { + if (!array_key_exists($unit, self::MULTIPLIERS)) { + throw new InvalidArgumentException(sprintf('Unknown unit: "%s"', $unit)); + } + + $result = $bytes / self::MULTIPLIERS[$unit]; + + if ($decimal === 0) { + return floor($result); + } + + $k = 10**$decimal; + + return floor($result*$k)/$k; + } +} diff --git a/modules/servers/solusiovps/solusiovps.php b/modules/servers/solusiovps/solusiovps.php index 33bf3b3..09e7d7c 100644 --- a/modules/servers/solusiovps/solusiovps.php +++ b/modules/servers/solusiovps/solusiovps.php @@ -8,6 +8,7 @@ use \GuzzleHttp\Exception\RequestException; use WHMCS\Module\Server\SolusIoVps\Exceptions\SolusException; use WHMCS\Module\Server\SolusIoVps\Helpers\Arr; +use WHMCS\Module\Server\SolusIoVps\Helpers\Unit; use WHMCS\Module\Server\SolusIoVps\Logger\Logger; use WHMCS\Module\Server\SolusIoVps\SolusAPI\Helpers\Strings; use WHMCS\Module\Server\SolusIoVps\SolusAPI\Requests\ServerCreateRequestBuilder; @@ -423,6 +424,12 @@ function solusiovps_ClientArea(array $params): array $productId = (int)$params['pid']; $defaultOsId = (int)Arr::get($params, 'configoption3'); + $totalTraffic = Unit::convert( + Arr::get($serverResponse, 'data.usage.network.incoming.value') + + Arr::get($serverResponse, 'data.usage.network.outgoing.value'), + Arr::get($serverResponse, 'data.plan.limits.network_total_traffic.unit') + ); + return [ 'tabOverviewReplacementTemplate' => 'templates/overview.tpl', 'templateVariables' => [ @@ -433,6 +440,11 @@ function solusiovps_ClientArea(array $params): array 'default_os_id' => $defaultOsId, 'domain' => $params['domain'], 'boot_mode' => Arr::get($serverResponse, 'data.boot_mode'), + 'traffic_current' => $totalTraffic, + 'traffic_limit' => Arr::get($serverResponse, 'data.plan.limits.network_total_traffic.is_enabled') + ? Arr::get($serverResponse, 'data.plan.limits.network_total_traffic.limit') + : null, + 'traffic_unit' => Arr::get($serverResponse, 'data.plan.limits.network_total_traffic.unit'), ], ], ]; diff --git a/modules/servers/solusiovps/templates/overview.tpl b/modules/servers/solusiovps/templates/overview.tpl index ddac63e..70fee99 100644 --- a/modules/servers/solusiovps/templates/overview.tpl +++ b/modules/servers/solusiovps/templates/overview.tpl @@ -238,10 +238,19 @@ {$LANG.recurringamount} {$recurringamount} - + {$LANG.clientareahostingnextduedate} {$nextduedate} + + {$LANG.solusvm2vps_traffic} + + {$data['traffic_current']} {$data['traffic_unit']} + {if $data['traffic_limit']} + / {$data['traffic_limit']} {$data['traffic_unit']} + {/if} + + diff --git a/tests/ClientAreaTest.php b/tests/ClientAreaTest.php index 6b6d497..9680821 100644 --- a/tests/ClientAreaTest.php +++ b/tests/ClientAreaTest.php @@ -7,6 +7,7 @@ use Mockery; use WHMCS\Module\Server\SolusIoVps\Database\Models\ProductConfigOption; use WHMCS\Module\Server\SolusIoVps\Database\Models\SolusServer; +use WHMCS\Module\Server\SolusIoVps\Helpers\Unit; use WHMCS\Module\Server\SolusIoVps\SolusAPI\Connector; use WHMCS\Module\Server\SolusIoVps\SolusAPI\Resources\ServerResource; use WHMCS\Module\Server\SolusIoVps\WhmcsAPI\Language; @@ -89,7 +90,10 @@ public function testLoadServerPageServerNegative(string $status, string $title, ]); } - public function testLoadServerPageServer(): void + /** + * @dataProvider loadServerPageServerDataProvider + */ + public function testLoadServerPageServer(bool $isEnabledTrafficLimit, ?int $expectedTrafficLimit): void { $this->solusServer->shouldReceive('getByServiceId') ->with((int)$this->params['serviceid']) @@ -107,6 +111,25 @@ public function testLoadServerPageServer(): void ], ], ], + 'usage' => [ + 'network' => [ + 'incoming' => [ + 'value' => 1024*1024*1024 / 2 - 1, + ], + 'outgoing' => [ + 'value' => 1024*1024*1024 / 2 - 42, + ] + ], + ], + 'plan' => [ + 'limits' => [ + 'network_total_traffic' => [ + 'is_enabled' => $isEnabledTrafficLimit, + 'limit' => 1, + 'unit' => Unit::GiB, + ], + ], + ], ], ]); $this->productConfigOption->shouldReceive('getProductOptions') @@ -125,8 +148,19 @@ public function testLoadServerPageServer(): void 'default_os_id' => 1, 'domain' => 'test.domain.ltd', 'boot_mode' => 'resque', + 'traffic_current' => 0.99, + 'traffic_limit' => $expectedTrafficLimit, + 'traffic_unit' => Unit::GiB, ], ], ]); } + + public function loadServerPageServerDataProvider(): array + { + return [ + 'enabled traffic limit' => [true, 1], + 'disabled traffic limit' => [false, null], + ]; + } } diff --git a/tests/lib/Helpers/UnitTest.php b/tests/lib/Helpers/UnitTest.php new file mode 100644 index 0000000..a1f34eb --- /dev/null +++ b/tests/lib/Helpers/UnitTest.php @@ -0,0 +1,39 @@ +expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Unknown unit: "fake"'); + Unit::convert(42, 'fake'); + } +}