Docker   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 149
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 13

Test Coverage

Coverage 36.73%

Importance

Changes 9
Bugs 1 Features 4
Metric Value
wmc 16
c 9
b 1
f 4
lcom 1
cbo 13
dl 0
loc 149
ccs 18
cts 49
cp 0.3673
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
B __construct() 0 24 4
A getContainerManager() 0 8 2
A getImageManager() 0 8 2
A getMiscManager() 0 8 2
A getExecManager() 0 8 2
A getVolumeManager() 0 8 2
A getNetworkManager() 0 8 2
1
<?php
2
3
namespace Docker;
4
5
use Docker\API\Normalizer\NormalizerFactory;
6
use Docker\Manager\ContainerManager;
7
use Docker\Manager\ExecManager;
8
use Docker\Manager\ImageManager;
9
use Docker\Manager\MiscManager;
10
use Docker\Manager\NetworkManager;
11
use Docker\Manager\VolumeManager;
12
use Http\Client\HttpClient;
13
use Http\Message\MessageFactory;
14
use Joli\Jane\Encoder\RawEncoder;
15
use Symfony\Component\Serializer\Encoder\JsonDecode;
16
use Symfony\Component\Serializer\Encoder\JsonEncode;
17
use Symfony\Component\Serializer\Encoder\JsonEncoder;
18
use Symfony\Component\Serializer\Serializer;
19
20
/**
21
 * Docker\Docker
22
 */
23
class Docker
24
{
25
    /**
26
     * @var HttpClient
27
     */
28
    private $httpClient;
29
30
    /**
31
     * @var Serializer
32
     */
33
    private $serializer;
34
35
    /**
36
     * @var MessageFactory
37
     */
38
    private $messageFactory;
39
40
    /**
41
     * @var ContainerManager
42
     */
43
    private $containerManager;
44
45
    /**
46
     * @var ImageManager
47
     */
48
    private $imageManager;
49
50
    /**
51
     * @var MiscManager
52
     */
53
    private $miscManager;
54
55
    /**
56
     * @var VolumeManager
57
     */
58
    private $volumeManager;
59
60
    /**
61
     * @var NetworkManager
62
     */
63
    private $networkManager;
64
65
    /**
66
     * @var ExecManager
67
     */
68
    private $execManager;
69
70
    /**
71
     * @param HttpClient|null     $httpClient     Http client to use with Docker
72
     * @param Serializer|null     $serializer     Deserialize docker response into php objects
73
     * @param MessageFactory|null $messageFactory How to create docker request (in PSR7)
74
     */
75
    public function __construct(HttpClient $httpClient = null, Serializer $serializer = null, MessageFactory $messageFactory = null)
76
    {
77
        $this->httpClient = $httpClient ?: DockerClient::createFromEnv();
78
79
        if ($serializer === null) {
80
            $serializer = new Serializer(
81
                NormalizerFactory::create(),
82
                [
83
                    new JsonEncoder(
84
                        new JsonEncode(),
85
                        new JsonDecode()
86
                    ),
87
                    new RawEncoder()
88
                ]
89
            );
90
        }
91
92
        if ($messageFactory === null) {
93
            $messageFactory = new MessageFactory\GuzzleMessageFactory();
94
        }
95
96
        $this->serializer = $serializer;
97
        $this->messageFactory = $messageFactory;
98
    }
99
100
    /**
101
     * @return ContainerManager
102
     */
103 3
    public function getContainerManager()
104
    {
105 3
        if (null === $this->containerManager) {
106 1
            $this->containerManager = new ContainerManager($this->httpClient, $this->messageFactory, $this->serializer);
107 1
        }
108
109 3
        return $this->containerManager;
110
    }
111
112
    /**
113
     * @return ImageManager
114
     */
115 7
    public function getImageManager()
116
    {
117 7
        if (null === $this->imageManager) {
118
            $this->imageManager = new ImageManager($this->httpClient, $this->messageFactory, $this->serializer);
119
        }
120
121 7
        return $this->imageManager;
122
    }
123
124
    /**
125
     * @return MiscManager
126
     */
127 2
    public function getMiscManager()
128
    {
129 2
        if (null === $this->miscManager) {
130 1
            $this->miscManager = new MiscManager($this->httpClient, $this->messageFactory, $this->serializer);
131 1
        }
132
133 2
        return $this->miscManager;
134
    }
135
136
    /**
137
     * @return ExecManager
138
     */
139 1
    public function getExecManager()
140
    {
141 1
        if (null === $this->execManager) {
142 1
            $this->execManager = new ExecManager($this->httpClient, $this->messageFactory, $this->serializer);
143 1
        }
144
145 1
        return $this->execManager;
146
    }
147
148
    /**
149
     * @return VolumeManager
150
     */
151
    public function getVolumeManager()
152
    {
153
        if (null === $this->volumeManager) {
154
            $this->volumeManager = new VolumeManager($this->httpClient, $this->messageFactory, $this->serializer);
155
        }
156
157
        return $this->volumeManager;
158
    }
159
160
    /**
161
     * @return NetworkManager
162
     */
163
    public function getNetworkManager()
164
    {
165
        if (null === $this->networkManager) {
166
            $this->networkManager = new NetworkManager($this->httpClient, $this->messageFactory, $this->serializer);
167
        }
168
169
        return $this->networkManager;
170
    }
171
}
172