Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 21
DockerServices
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 21
 run
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 21
1<?php
2
3namespace Qmp\Laravel\DockerScale\Retriever\Providers;
4
5use Qmp\Laravel\DockerScale\Models\DockerService;
6
7class DockerServices extends DockerAbstract
8{
9    protected $model = DockerService::class;
10
11    protected $matchUpdate = ['name'];
12
13    protected $cmd = 'docker service ls --format "{{.ID}}|{{.Name}}|{{.Mode}}|{{.Replicas}}|{{.Image}}|{{.Ports}}"';
14
15    protected $cmdServiceEnv = 'docker service inspect [[SERVICE]] --format "{{.Spec.TaskTemplate.ContainerSpec.Env}}"';
16    
17    public function run()
18    {
19        $output = $this->exec($this->cmd);
20        return array_map(function($item) {
21            $replicas = explode('/', $item[3]);
22            $result = [
23                'service_id' => $item[0],
24                'name' => $item[1],
25                'mode' => $item[2],
26                'current_replicas' => $replicas[0],
27                'total_replicas' => $replicas[1],
28                'image' => $item[4],
29                'ports' => $item[5]
30            ];
31
32            $update = $this->update($result);
33
34            try {
35                if ($update->service_name === null) {
36                    $cmd = str_replace('[[SERVICE]]', $update->name, $this->cmdServiceEnv);
37
38                    $serviceEnv = $this->exec($cmd, true);
39                    preg_match('/SERVICE_NAME=([0-9a-zA-Z-_]+)/', $serviceEnv, $matches);
40                    $update->service_name = !empty($matches[1]) ? $matches[1] : '';
41                    $update->save();
42                }
43            } catch (\Exception $e) {
44                dd($e->getMessage(), $serviceEnv, $update->name);
45            }
46
47            return $update;
48        }, $output);
49    }
50}