File tree Expand file tree Collapse file tree 4 files changed +94
-0
lines changed Expand file tree Collapse file tree 4 files changed +94
-0
lines changed Original file line number Diff line number Diff line change @@ -554,6 +554,25 @@ $client->mirroredRepositories()->removePackages($mirroredRepositoryId);
554
554
##### Show a job
555
555
``` php
556
556
$job = $client->jobs()->show($jobId);
557
+ ```
558
+ Returns the job.
559
+
560
+ ##### Wait for a job to finish
561
+ This will periodically poll the job status until the job either finished or the maximum wait time was reached
562
+ ``` php
563
+ $numberOfSecondsToWait = 180;
564
+ $jobHelper = new \PrivatePackagist\ApiClient\JobHelper($client);
565
+ try {
566
+ $job = $jobHelper->waitForJob($jobId, $numberOfSecondsToWait);
567
+ } catch (\PrivatePackagist\ApiClient\Exception\JobTimeoutException $e) {
568
+ // Job didn't finish within the specified time
569
+ } catch (\PrivatePackagist\ApiClient\Exception\JobErrorException $e) {
570
+ // Job finished with an error. See the message for more information
571
+ echo $e->getMessage();
572
+ }
573
+
574
+
575
+
557
576
```
558
577
Returns the job.
559
578
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace PrivatePackagist \ApiClient \Exception ;
4
+
5
+ class JobErrorException extends RuntimeException
6
+ {
7
+ /** @var array */
8
+ private $ job ;
9
+
10
+ public function __construct (array $ job )
11
+ {
12
+ $ this ->job = $ job ;
13
+
14
+ parent ::__construct ($ job ['message ' ]);
15
+ }
16
+
17
+ /**
18
+ * @return array
19
+ */
20
+ public function getJob ()
21
+ {
22
+ return $ this ->job ;
23
+ }
24
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace PrivatePackagist \ApiClient \Exception ;
4
+
5
+ class JobTimeoutException extends RuntimeException
6
+ {
7
+
8
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace PrivatePackagist \ApiClient ;
4
+
5
+ use PrivatePackagist \ApiClient \Exception \JobErrorException ;
6
+ use PrivatePackagist \ApiClient \Exception \JobTimeoutException ;
7
+
8
+ class JobHelper
9
+ {
10
+ /** @var Client */
11
+ private $ packagistClient ;
12
+
13
+ public function __construct (Client $ packagistClient )
14
+ {
15
+ $ this ->packagistClient = $ packagistClient ;
16
+ }
17
+
18
+ /**
19
+ * @param string $jobId
20
+ * @param int $maxWaitSeconds
21
+ * @param int $waitInterval
22
+ * @return array
23
+ */
24
+ public function waitForJob ($ jobId , $ maxWaitSeconds = 180 , $ waitInterval = 5 )
25
+ {
26
+ $ maxWaitTime = new \DateTimeImmutable (sprintf ('+%s seconds ' , $ maxWaitSeconds ));
27
+ while ($ maxWaitTime > new \DateTimeImmutable ()) {
28
+ $ job = $ this ->packagistClient ->jobs ()->show ($ jobId );
29
+
30
+ if ($ job ['status ' ] === 'success ' ) {
31
+ return $ job ;
32
+ }
33
+
34
+ if ($ job ['status ' ] === 'error ' ) {
35
+ throw new JobErrorException ($ job );
36
+ }
37
+
38
+ sleep ($ waitInterval );
39
+ }
40
+
41
+ throw new JobTimeoutException (sprintf ('Job has not finish after %s seconds ' , $ maxWaitSeconds ));
42
+ }
43
+ }
You can’t perform that action at this time.
0 commit comments