Skip to content

Commit 30183f0

Browse files
author
Marlin Cremers
committed
feat: add methods to get machine traffic usage
1 parent 567f836 commit 30183f0

12 files changed

Lines changed: 193 additions & 27 deletions

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
"require": {
1313
"php": "^8.1 || ^8.2 || ^8.3",
1414
"ext-grpc": "*",
15-
"cbws/php-cbws-grpc": "^0.10.0",
1615
"league/oauth2-client": "^2.6",
1716
"symfony/yaml": "^6.0 || ^7.0",
1817
"lcobucci/jwt": "^5.0",
1918
"google/common-protos": "^4.0",
20-
"ramsey/uuid": "^4.0"
19+
"ramsey/uuid": "^4.0",
20+
"cbws/protobufs": "^0.29"
2121
},
2222
"require-dev": {
2323
"phpunit/phpunit": "^10.0",

src/Compute/Client.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Cbws\Sdk\Compute;
66

77
use Cbws\Grpc\Compute\V1alpha1\ComputeServiceClient;
8+
use Cbws\Grpc\Private\Compute\Traffic\V1alpha1\TrafficServiceClient;
89
use Cbws\Sdk\Auth\Client\GrpcTrait;
910
use Cbws\Sdk\Common\Client as BaseClient;
1011
use Cbws\Sdk\Common\Longrunning\Operations;
@@ -40,6 +41,13 @@ public function getClient(): ComputeServiceClient
4041
]);
4142
}
4243

44+
public function getTrafficClient(): TrafficServiceClient
45+
{
46+
return new TrafficServiceClient($this->getEndpoint(), [
47+
'credentials' => $this->getChannelCredentials($this->getCallCredentials()),
48+
]);
49+
}
50+
4351
public function getEndpoint(): string
4452
{
4553
return 'compute.cbws.cloud:443';

src/Compute/Machines.php

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,22 @@
2020
use Cbws\Sdk\Compute\Requests\CreateMachineRequest;
2121
use Cbws\Sdk\Compute\Requests\DeleteMachineRequest;
2222
use Cbws\Sdk\Compute\Requests\GetMachineRequest;
23+
use Cbws\Sdk\Compute\Requests\GetTrafficUsageRequest;
2324
use Cbws\Sdk\Compute\Requests\ListMachinesRequest;
2425
use Cbws\Sdk\Compute\Requests\ReinstallMachineRequest;
2526
use Cbws\Sdk\Compute\Requests\RequestMachineConsoleRequest;
2627
use Cbws\Sdk\Compute\Requests\ResetMachineRequest;
2728
use Cbws\Sdk\Compute\Requests\StartMachineRequest;
2829
use Cbws\Sdk\Compute\Requests\StopMachineRequest;
2930
use Cbws\Sdk\Compute\Responses\CreateMachineResponse;
31+
use Cbws\Sdk\Compute\Responses\GetTrafficUsageResponse;
3032
use Cbws\Sdk\Compute\Responses\ListMachinesResponse;
3133
use Cbws\Sdk\Compute\Responses\ReinstallMachineResponse;
3234
use Cbws\Sdk\Compute\Responses\RequestMachineConsoleResponse;
3335
use Cbws\Sdk\Compute\Responses\ResetMachineResponse;
3436
use Cbws\Sdk\Compute\Responses\StartMachineResponse;
3537
use Cbws\Sdk\Compute\Responses\StopMachineResponse;
38+
use DateTime;
3639
use Generator;
3740

3841
class Machines
@@ -130,6 +133,31 @@ public function get(string $id, GetMachineRequest $request = new GetMachineReque
130133
return new Machine($data, $this);
131134
}
132135

136+
/**
137+
* @return RequestMachineConsoleResponse
138+
*
139+
* @throws StatusException
140+
*/
141+
public function getTrafficUsage(string $id, DateTime $start, DateTime $end, GetTrafficUsageRequest $request = new GetTrafficUsageRequest()): GetTrafficUsageResponse
142+
{
143+
$request = $request
144+
->withName("projects/{$this->client->getProject()}/machines/{$id}")
145+
->withStartTime($start)
146+
->withEndTime($end);
147+
148+
$call = $this->client->getTrafficClient()->GetTrafficUsage($request->toGrpc());
149+
150+
/** @var \Cbws\Grpc\Compute\Traffic\V1alpha1\GetTrafficUsageRequest $data */
151+
/** @var object{ code: int, details: string } $status */
152+
[$data, $status] = $call->wait();
153+
154+
if ($status->code !== 0) {
155+
throw StatusException::fromStatus($status);
156+
}
157+
158+
return new RequestMachineConsoleResponse($data);
159+
}
160+
133161
/**
134162
* @return Operation<StopMachineMetadata, StopMachineResponse>
135163
*
@@ -229,8 +257,6 @@ public function reinstall(string $id, string $image, ReinstallMachineRequest $re
229257
}
230258

231259
/**
232-
* @return RequestMachineConsoleResponse
233-
*
234260
* @throws StatusException
235261
*/
236262
public function requestConsole(string $id, RequestMachineConsoleRequest $request = new RequestMachineConsoleRequest()): RequestMachineConsoleResponse
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Cbws\Sdk\Compute\Requests;
6+
7+
use Cbws\Grpc\Private\Compute\Traffic\V1alpha1\GetTrafficUsageRequest as GetTrafficUsageRequestGrpc;
8+
use DateTime;
9+
use Google\Protobuf\Timestamp;
10+
11+
class GetTrafficUsageRequest
12+
{
13+
protected GetTrafficUsageRequestGrpc $object;
14+
15+
public function __construct(?GetTrafficUsageRequestGrpc $object = null)
16+
{
17+
$this->object = $object ?? new GetTrafficUsageRequestGrpc();
18+
}
19+
20+
public function getName(): string
21+
{
22+
return $this->object->getName();
23+
}
24+
25+
public function withName(?string $name = null): self
26+
{
27+
$this->object->setName($name ?? '');
28+
29+
return $this;
30+
}
31+
32+
public function getStartTime(): ?DateTime
33+
{
34+
if ($this->object->getStartTime() === null) {
35+
return null;
36+
}
37+
38+
return $this->object->getStartTime()->toDateTime();
39+
}
40+
41+
public function withStartTime(DateTime $startTime): self
42+
{
43+
$var = new Timestamp();
44+
$var->fromDateTime($startTime);
45+
$this->object->setStartTime($var);
46+
47+
return $this;
48+
}
49+
50+
public function getEndTime(): ?DateTime
51+
{
52+
if ($this->object->getEndTime() === null) {
53+
return null;
54+
}
55+
56+
return $this->object->getEndTime()->toDateTime();
57+
}
58+
59+
public function withEndTime(DateTime $endTime): self
60+
{
61+
$var = new Timestamp();
62+
$var->fromDateTime($endTime);
63+
$this->object->setStartTime($var);
64+
65+
return $this;
66+
}
67+
68+
public function toGrpc(): GetTrafficUsageRequestGrpc
69+
{
70+
return $this->object;
71+
}
72+
73+
public function __debugInfo()
74+
{
75+
return [
76+
'name' => $this->getName(),
77+
'startTime' => $this->getStartTime(),
78+
'endTime' => $this->getEndTime(),
79+
];
80+
}
81+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Cbws\Sdk\Compute\Responses;
6+
7+
use Cbws\Grpc\Private\Compute\Traffic\V1alpha1\GetTrafficUsageResponse as GetTrafficUsageResponseGrpc;
8+
use Cbws\Sdk\Common\Longrunning\ResponseInterface;
9+
use Google\Protobuf\Internal\Message;
10+
11+
/**
12+
* @implements ResponseInterface<GetTrafficUsageResponseGrpc>
13+
*/
14+
class GetTrafficUsageResponse implements ResponseInterface
15+
{
16+
protected GetTrafficUsageResponseGrpc $object;
17+
18+
/**
19+
* @param GetTrafficUsageResponseGrpc $object
20+
*/
21+
public function __construct(Message $object)
22+
{
23+
$this->object = $object;
24+
}
25+
26+
public function getBytes(): int|string
27+
{
28+
return $this->object->getBytes();
29+
}
30+
31+
public function toGrpc(): Message
32+
{
33+
return $this->object;
34+
}
35+
36+
public function __debugInfo()
37+
{
38+
return [
39+
'bytes' => $this->getBytes(),
40+
];
41+
}
42+
}

src/Private/Flows/V1alpha1/Client.php

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Cbws\Sdk\Private\Flows\V1alpha1;
46

57
use Cbws\API\Client\GrpcTrait;
68
use Cbws\API\Exception\StatusException;
7-
use Cbws\Private_\Flows\V1alpha1\GetTrafficUsageResponse as GrpcGetTrafficUsageResponse;
89
use Cbws\Private_\Flows\V1alpha1\GetTrafficPercentileResponse as GrpcGetTrafficPercentileResponse;
10+
use Cbws\Private_\Flows\V1alpha1\GetTrafficUsageResponse as GrpcGetTrafficUsageResponse;
911
use Cbws\Private_\Flows\V1alpha1\TrafficServiceClient;
1012
use Grpc\ChannelCredentials;
1113

@@ -20,27 +22,26 @@ class Client
2022

2123
public function __destruct()
2224
{
23-
if (!is_null($this->client)) {
25+
if ($this->client !== null) {
2426
$this->client->close();
2527
}
2628
}
2729

2830
/**
29-
* Get traffic usage in total bytes
31+
* Get traffic usage in total bytes.
3032
*
31-
* @param GetTrafficUsageRequest|null $request
32-
* @return GetTrafficUsageResponse
3333
* @throws StatusException
3434
*/
35-
public function getTrafficUsage(GetTrafficUsageRequest $request = null): GetTrafficUsageResponse
35+
public function getTrafficUsage(?GetTrafficUsageRequest $request = null): GetTrafficUsageResponse
3636
{
37-
if (is_null($request)) {
37+
if ($request === null) {
3838
$request = new GetTrafficUsageRequest();
3939
}
4040

4141
$call = $this->getClient()->GetTrafficUsage($request->toGrpc());
4242
/** @var GrpcGetTrafficUsageResponse $data */
43-
list($data, $status) = $call->wait();
43+
[$data, $status] = $call->wait();
44+
4445
if ($status->code !== 0) {
4546
throw StatusException::fromStatus($status);
4647
}
@@ -49,21 +50,20 @@ public function getTrafficUsage(GetTrafficUsageRequest $request = null): GetTraf
4950
}
5051

5152
/**
52-
* Get traffic usage in 95th percentile
53+
* Get traffic usage in 95th percentile.
5354
*
54-
* @param GetTrafficPercentileRequest|null $request
55-
* @return GetTrafficPercentileResponse
5655
* @throws StatusException
5756
*/
58-
public function getTrafficPercentile(GetTrafficPercentileRequest $request = null): GetTrafficPercentileResponse
57+
public function getTrafficPercentile(?GetTrafficPercentileRequest $request = null): GetTrafficPercentileResponse
5958
{
60-
if (is_null($request)) {
59+
if ($request === null) {
6160
$request = new GetTrafficPercentileRequest();
6261
}
6362

6463
$call = $this->getClient()->GetTrafficPercentile($request->toGrpc());
6564
/** @var GrpcGetTrafficPercentileResponse $data */
66-
list($data, $status) = $call->wait();
65+
[$data, $status] = $call->wait();
66+
6767
if ($status->code !== 0) {
6868
throw StatusException::fromStatus($status);
6969
}
@@ -73,7 +73,7 @@ public function getTrafficPercentile(GetTrafficPercentileRequest $request = null
7373

7474
protected function getClient(): TrafficServiceClient
7575
{
76-
if (!is_null($this->client)) {
76+
if ($this->client !== null) {
7777
return $this->client;
7878
}
7979

src/Private/Flows/V1alpha1/GetTrafficPercentileRequest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Cbws\Sdk\Private\Flows\V1alpha1;
46

57
use DateTime;
@@ -12,9 +14,9 @@ class GetTrafficPercentileRequest
1214
*/
1315
protected $object;
1416

15-
public function __construct(\Cbws\Private_\Flows\V1alpha1\GetTrafficPercentileRequest $object = null)
17+
public function __construct(?\Cbws\Private_\Flows\V1alpha1\GetTrafficPercentileRequest $object = null)
1618
{
17-
if (is_null($object)) {
19+
if ($object === null) {
1820
$object = new \Cbws\Private_\Flows\V1alpha1\GetTrafficPercentileRequest();
1921
}
2022

src/Private/Flows/V1alpha1/GetTrafficPercentileResponse.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Cbws\Sdk\Private\Flows\V1alpha1;
46

57
class GetTrafficPercentileResponse

src/Private/Flows/V1alpha1/GetTrafficUsageRequest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Cbws\Sdk\Private\Flows\V1alpha1;
46

57
use DateTime;
@@ -12,14 +14,13 @@ class GetTrafficUsageRequest
1214
*/
1315
protected $object;
1416

15-
public function __construct(\Cbws\Private_\Flows\V1alpha1\GetTrafficUsageRequest $object = null)
17+
public function __construct(?\Cbws\Private_\Flows\V1alpha1\GetTrafficUsageRequest $object = null)
1618
{
17-
if (is_null($object)) {
19+
if ($object === null) {
1820
$object = new \Cbws\Private_\Flows\V1alpha1\GetTrafficUsageRequest();
1921
}
2022

2123
$this->object = $object;
22-
2324
}
2425

2526
public function withStartTime(DateTime $time): self
@@ -66,7 +67,6 @@ public function toGrpc(): \Cbws\Private_\Flows\V1alpha1\GetTrafficUsageRequest
6667
public function __debugInfo()
6768
{
6869
return [
69-
7070
];
7171
}
7272

src/Private/Flows/V1alpha1/GetTrafficUsageResponse.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Cbws\Sdk\Private\Flows\V1alpha1;
46

57
class GetTrafficUsageResponse

0 commit comments

Comments
 (0)