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 / 17
DockerNodes
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 17
 run
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 17
1<?php
2
3namespace Qmp\Laravel\DockerScale\Retriever\Providers;
4
5use Qmp\Laravel\DockerScale\Models\DockerNode;
6
7class DockerNodes extends DockerAbstract
8{
9    protected $model = DockerNode::class;
10
11    protected $matchUpdate = ['hostname'];
12
13    protected $cmd = 'docker node ls --format "{{.ID}}|{{.Hostname}}|{{.Status}}|{{.Availability}}|{{.ManagerStatus}}|{{.TLSStatus}}|{{.EngineVersion}}"';
14    protected $eachCmd = 'docker node inspect --format "{{.ID}}|{{.Description.Resources.NanoCPUs}}|{{.Description.Resources.MemoryBytes}}|{{.Status.Addr}}|{{.UpdatedAt}}" ';
15
16    public function run()
17    {
18        $output = $this->exec($this->cmd);
19        return array_map(function($item) {
20            $nodes = $this->exec($this->eachCmd . $item[0]);
21            $node = array_shift($nodes);
22
23            $result = [
24                'docker_id' => $item[0],
25                'hostname' => $item[1],
26                'status' => $item[2],
27                'avaibility' => $item[3],
28                'manager_status' => $item[4],
29                'tls_status' => $item[5],
30                'engine_version' => $item[6],
31                'cpu' => number_format($node[1] / 1000000000, 2),
32                'memory' => number_format($node[2] / 1024 / 1024 / 1024, 3), // GiB
33                'ip' => $node[3],
34                'last_update' => $node[4]
35            ];
36
37            return $this->update($result);
38        }, $output);
39    }
40}