Skip to content
This repository was archived by the owner on Mar 7, 2025. It is now read-only.

Commit 1021f10

Browse files
committed
Workers management
1 parent e97c13a commit 1021f10

23 files changed

+738
-40
lines changed

CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77
## [Unreleased]
88
### Added
99
- Allow to set default credential ID for specific server providers;
10-
- `hasPayload` method added to `Provider` class.
10+
- `hasPayload` method added to `Provider` class;
11+
- Workers Management.
1112

1213
### Fixed
1314
- Fixed `ArrayAccessTrait`'s `offsetExists` method.

docs/getting-started.md

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ This SDK supports following Forge API features:
2121
## Coming soon
2222

2323
- SSL certificates management;
24-
- Workers;
2524
- Services configuration;
2625
- Recipes.
2726

docs/readme.md

+1
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414
- [Sites](./sites.md)
1515
+ [Site Applications](./site-applications.md)
1616
+ [Deployment](./deployment.md)
17+
+ [Workers](./workers.md)

docs/workers.md

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Overview
2+
3+
SDK provides Workers Manager that allows you to create, list and delete workers for your Forge sites.
4+
5+
# Usage
6+
7+
Documentation assumes that you've already retrieved site instance from `SitesManager` class.
8+
9+
All operations are performed via `Laravel\Forge\Sites\WorkersManager` instance.
10+
11+
All methods return either instance of `Laravel\Forge\Sites\Worker` or array of `Laravel\Forge\Sites\Worker` instances.
12+
13+
## Create new worker
14+
15+
You can specify worker connection, queue name, timeout, sleep seconds, max tries count and indicate that worker should be created as daemon.
16+
17+
```php
18+
<?php
19+
20+
use Laravel\Forge\Sites\WorkersManager;
21+
22+
$workers = new WorkersManager();
23+
24+
$worker = $workers()->start('sqs')
25+
->withTimeout(90)
26+
->sleepFor(3)
27+
->maxTries(3)
28+
->asDaemon()
29+
->onQueue('my-queue-name')
30+
->for($site);
31+
```
32+
33+
## List workers
34+
35+
```php
36+
<?php
37+
38+
use Laravel\Forge\Sites\WorkersManager;
39+
40+
$workers = new WorkersManager();
41+
42+
$siteWorkers = $workers->list()->for($site);
43+
44+
foreach ($siteWorkers as $worker) {
45+
echo 'Worker is running on '.$worker->connection().' connection, has timeout of '.$worker->timeout().' seconds and '.$worker->maxTries().'max tries.';
46+
}
47+
```
48+
49+
## Get single worker by ID
50+
51+
```php
52+
<?php
53+
54+
use Laravel\Forge\Sites\WorkersManager;
55+
56+
$workers = new WorkersManager();
57+
58+
$workerId = 1234;
59+
$worker = $workers->get($workerId)->for($site);
60+
61+
echo 'Worker is running on '.$worker->connection().' connection, has timeout of '.$worker->timeout().' seconds and '.$worker->maxTries().'max tries.';
62+
```
63+
64+
## Delete worker
65+
66+
```php
67+
<?php
68+
69+
use Laravel\Forge\Sites\WorkersManager;
70+
71+
$workers = new WorkersManager();
72+
73+
$worker = $workers->get($workerId)->for($site);
74+
75+
if ($worker->delete()) {
76+
echo 'Worker was deleted.';
77+
}
78+
```
79+
80+
[Back to Table of Contents](./readme.md)

src/ServerResources/Commands/ServerResourceCommand.php

+16-2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,18 @@ public function getItemId()
104104
return $this->itemId;
105105
}
106106

107+
/**
108+
* Processes new response item.
109+
*
110+
* @param mixed $item
111+
*
112+
* @return mixed
113+
*/
114+
public function processResponseItem($item)
115+
{
116+
return $item;
117+
}
118+
107119
/**
108120
* Handle command response.
109121
*
@@ -120,7 +132,9 @@ public function handleResponse(ResponseInterface $response, Server $server)
120132

121133
$className = $this->resourceClass();
122134

123-
return $className::createFromResponse($response, $server);
135+
return $this->processResponseItem(
136+
$className::createFromResponse($response, $server)
137+
);
124138
}
125139

126140
/**
@@ -147,7 +161,7 @@ public function handleListCommandResponse(ResponseInterface $response, Server $s
147161
$className = $this->resourceClass();
148162

149163
foreach ($json[$itemsKey] as $item) {
150-
$items[] = new $className($server, $item);
164+
$items[] = $this->processResponseItem(new $className($server, $item));
151165
}
152166

153167
return $items;

src/Sites/Commands/DeployCommand.php renamed to src/Sites/Commands/Deployment/DeployCommand.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
<?php
22

3-
namespace Laravel\Forge\Sites\Commands;
3+
namespace Laravel\Forge\Sites\Commands\Deployment;
44

55
use Laravel\Forge\Server;
66
use Psr\Http\Message\ResponseInterface;
7+
use Laravel\Forge\Sites\Commands\SiteResourceCommand;
78

89
class DeployCommand extends SiteResourceCommand
910
{

src/Sites/Commands/DisableDeploymentCommand.php renamed to src/Sites/Commands/Deployment/DisableDeploymentCommand.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22

3-
namespace Laravel\Forge\Sites\Commands;
3+
namespace Laravel\Forge\Sites\Commands\Deployment;
4+
5+
use Laravel\Forge\Sites\Commands\SiteResourceCommand;
46

57
class DisableDeploymentCommand extends SiteResourceCommand
68
{

src/Sites/Commands/EnableDeploymentCommand.php renamed to src/Sites/Commands/Deployment/EnableDeploymentCommand.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?php
22

3-
namespace Laravel\Forge\Sites\Commands;
3+
namespace Laravel\Forge\Sites\Commands\Deployment;
4+
5+
use Laravel\Forge\Sites\Commands\SiteResourceCommand;
46

57
class EnableDeploymentCommand extends SiteResourceCommand
68
{

src/Sites/Commands/GetDeploymentLogCommand.php renamed to src/Sites/Commands/Deployment/GetDeploymentLogCommand.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
<?php
22

3-
namespace Laravel\Forge\Sites\Commands;
3+
namespace Laravel\Forge\Sites\Commands\Deployment;
44

55
use Laravel\Forge\Server;
66
use Psr\Http\Message\ResponseInterface;
7+
use Laravel\Forge\Sites\Commands\SiteResourceCommand;
78

89
class GetDeploymentLogCommand extends SiteResourceCommand
910
{

src/Sites/Commands/GetDeploymentScriptCommand.php renamed to src/Sites/Commands/Deployment/GetDeploymentScriptCommand.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
<?php
22

3-
namespace Laravel\Forge\Sites\Commands;
3+
namespace Laravel\Forge\Sites\Commands\Deployment;
44

55
use Laravel\Forge\Server;
66
use Psr\Http\Message\ResponseInterface;
7+
use Laravel\Forge\Sites\Commands\SiteResourceCommand;
78

89
class GetDeploymentScriptCommand extends SiteResourceCommand
910
{

src/Sites/Commands/ResetDeploymentStatusCommand.php renamed to src/Sites/Commands/Deployment/ResetDeploymentStatusCommand.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
<?php
22

3-
namespace Laravel\Forge\Sites\Commands;
3+
namespace Laravel\Forge\Sites\Commands\Deployment;
44

55
use Laravel\Forge\Server;
66
use Psr\Http\Message\ResponseInterface;
7+
use Laravel\Forge\Sites\Commands\SiteResourceCommand;
78

89
class ResetDeploymentStatusCommand extends SiteResourceCommand
910
{

src/Sites/Commands/UpdateDeploymentScriptCommand.php renamed to src/Sites/Commands/Deployment/UpdateDeploymentScriptCommand.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
<?php
22

3-
namespace Laravel\Forge\Sites\Commands;
3+
namespace Laravel\Forge\Sites\Commands\Deployment;
44

55
use Laravel\Forge\Server;
66
use Psr\Http\Message\ResponseInterface;
7+
use Laravel\Forge\Sites\Commands\SiteResourceCommand;
78

89
class UpdateDeploymentScriptCommand extends SiteResourceCommand
910
{

src/Sites/Commands/SiteCommand.php

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public function resourcePath()
2424
*/
2525
public function resourceClass()
2626
{
27+
// Check if we're working with site resource.
28+
if (method_exists($this, 'siteResourceClass') && !is_null($this->siteResourceClass())) {
29+
return $this->siteResourceClass();
30+
}
31+
2732
return Site::class;
2833
}
2934
}

src/Sites/Commands/SiteResourceCommand.php

+71-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ abstract class SiteResourceCommand extends SiteCommand
1515
*/
1616
protected $site;
1717

18+
/**
19+
* Resource ID.
20+
*
21+
* @var int
22+
*/
23+
protected $siteResourceId = 0;
24+
1825
/**
1926
* Site resource path.
2027
*
@@ -23,7 +30,17 @@ abstract class SiteResourceCommand extends SiteCommand
2330
abstract public function siteResourcePath();
2431

2532
/**
26-
* Set associated site.
33+
* Site resource class.
34+
*
35+
* @return string|null
36+
*/
37+
public function siteResourceClass()
38+
{
39+
//
40+
}
41+
42+
/**
43+
* Set associated site and execute command on site server.
2744
*
2845
* @param \Laravel\Forge\Sites\Site $site
2946
*
@@ -34,9 +51,43 @@ public function for(Site $site)
3451
$this->site = $site;
3552
$this->setItemId($site->id());
3653

54+
return $this->on($site->getServer());
55+
}
56+
57+
/**
58+
* Set site resource ID.
59+
*
60+
* @param int $resourceId
61+
*
62+
* @return static
63+
*/
64+
public function setSiteResourceId(int $resourceId)
65+
{
66+
$this->siteResourceId = $resourceId;
67+
3768
return $this;
3869
}
3970

71+
/**
72+
* Get site resource ID.
73+
*
74+
* @return int
75+
*/
76+
public function getSiteResourceId(): int
77+
{
78+
return $this->siteResourceId;
79+
}
80+
81+
/**
82+
* Get associated site.
83+
*
84+
* @return \Laravel\Forge\Sites\Site
85+
*/
86+
public function getSite(): Site
87+
{
88+
return $this->site;
89+
}
90+
4091
/**
4192
* HTTP request URL.
4293
*
@@ -51,6 +102,18 @@ public function requestUrl(Server $server)
51102
return $requestUrl.'/'.$this->siteResourcePath();
52103
}
53104

105+
/**
106+
* Processes new response item.
107+
*
108+
* @param mixed $item
109+
*
110+
* @return mixed
111+
*/
112+
public function processResponseItem($item)
113+
{
114+
return $item->setSite($this->getSite());
115+
}
116+
54117
/**
55118
* Handle command response.
56119
*
@@ -61,6 +124,12 @@ public function requestUrl(Server $server)
61124
*/
62125
public function handleResponse(ResponseInterface $response, Server $server)
63126
{
64-
return true;
127+
$siteResourceClass = $this->siteResourceClass();
128+
129+
if (is_null($siteResourceClass)) {
130+
return true;
131+
}
132+
133+
return parent::handleResponse($response, $server);
65134
}
66135
}

0 commit comments

Comments
 (0)