Skip to content

Commit

Permalink
TASK SIO-4352 Add info about traffic
Browse files Browse the repository at this point in the history
  • Loading branch information
Dmitrii Romashov committed Jul 27, 2022
1 parent 8b08e02 commit 75d97c4
Show file tree
Hide file tree
Showing 6 changed files with 138 additions and 2 deletions.
3 changes: 3 additions & 0 deletions modules/servers/solusiovps/lang/english.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,6 @@

$_LANG['solusiovps_chart_memory_title'] = 'Memory usage';
$_LANG['solusiovps_chart_memory_label_usage'] = 'Usage MiB';

$_LANG['solusvm2vps_traffic'] = 'Total traffic';

39 changes: 39 additions & 0 deletions modules/servers/solusiovps/lib/Helpers/Unit.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace WHMCS\Module\Server\SolusIoVps\Helpers;

use InvalidArgumentException;

class Unit
{
public const KiB = 'KiB';
public const MiB = 'MiB';
public const GiB = 'GiB';
public const TiB = 'TiB';
public const PiB = 'PiB';

private const MULTIPLIERS = [
self::KiB => 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;
}
}
12 changes: 12 additions & 0 deletions modules/servers/solusiovps/solusiovps.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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' => [
Expand All @@ -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'),
],
],
];
Expand Down
11 changes: 10 additions & 1 deletion modules/servers/solusiovps/templates/overview.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -238,10 +238,19 @@
<td>{$LANG.recurringamount}</td>
<td>{$recurringamount}</td>
</tr>
<tr style="border-bottom: 1px solid #dddddd">
<tr>
<td>{$LANG.clientareahostingnextduedate}</td>
<td>{$nextduedate}</td>
</tr>
<tr style="border-bottom: 1px solid #dddddd">
<td>{$LANG.solusvm2vps_traffic}</td>
<td>
{$data['traffic_current']} {$data['traffic_unit']}
{if $data['traffic_limit']}
/ {$data['traffic_limit']} {$data['traffic_unit']}
{/if}
</td>
</tr>
</table>
</div>
</div>
Expand Down
36 changes: 35 additions & 1 deletion tests/ClientAreaTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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'])
Expand All @@ -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')
Expand All @@ -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],
];
}
}
39 changes: 39 additions & 0 deletions tests/lib/Helpers/UnitTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace Tests\lib\Helpers;

use InvalidArgumentException;
use Tests\AbstractModuleTest;
use WHMCS\Module\Server\SolusIoVps\Helpers\Unit;

class UnitTest extends AbstractModuleTest
{
/**
* @dataProvider convertDataProvider
*/
public function testConvert(int $bytes, string $unit, float $expected): void
{
self::assertEquals($expected, Unit::convert($bytes, $unit));
}

public function convertDataProvider(): array
{
return [
[1024, Unit::KiB, 1],
[100*1024*1024, Unit::MiB, 100],
[30*1024*1024, Unit::KiB, 30*1024],
[512*1024*1024, Unit::GiB, 0.5],
[(int)(0.5*1024*1024*1024), Unit::MiB, 512],
[1023*1024*1024, Unit::GiB, 0.99],
[1025*1024*1024, Unit::GiB, 1],
[1988*1024*1024, Unit::GiB, 1.94],
];
}

public function testConvertUnknownUnit(): void
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Unknown unit: "fake"');
Unit::convert(42, 'fake');
}
}

0 comments on commit 75d97c4

Please sign in to comment.