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 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 20
ServicesController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 3
42
0.00% covered (danger)
0.00%
0 / 20
 __construct
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 scale
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 8
 exec
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 10
1<?php
2
3namespace Qmp\Laravel\DockerScale\Controllers;
4
5use Illuminate\Http\JsonResponse;
6use Illuminate\Http\Response;
7use Illuminate\Http\Request;
8use Illuminate\Support\Facades\Log;
9use Qmp\Laravel\DockerScale\Scaler\DockerScaler;
10use Qmp\Laravel\MicroService\Controllers\AbstractMicroServiceController;
11
12class ServicesController extends AbstractMicroServiceController
13{
14    public function __construct(Request $request)
15    {
16        parent::__construct($request);
17    }
18
19    /**
20     * @param \Illuminate\Http\Request $request
21     * @return \Illuminate\Http\JsonResponse
22     */
23    public function scale(Request $request): JsonResponse
24    {
25        $request->validate([
26            'services' => 'required|array'
27        ]);
28
29        try {
30
31            $dockerScaler = new DockerScaler();
32            $dockerScaler->manualScale($request->services);
33
34            return response()->json(['status' => 'ok']);
35
36        } catch (\Exception $e) {
37            Log::debug('Unable to scale services : ' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
38            return response()->json(['status' => 'ko', 'message' => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
39        }
40    }
41
42    /**
43     * @param \Illuminate\Http\Request $request
44     * @return \Illuminate\Http\JsonResponse
45     */
46    public function exec(Request $request): JsonResponse
47    {
48        $request->validate([
49            'command' => 'required|string',
50            'service' => 'required|string'
51        ]);
52
53        try {
54            $container = exec('docker ps -qf name=' . $request->service);
55
56            if (strlen($container) == 0) {
57                throw new \Exception($request->service . ' not found');
58            }
59
60            $output = processExec("docker exec $container $request->command");
61            return response()->json(['output' => $output]);
62
63        } catch (\Exception $e) {
64            Log::debug('Unable to exec command : ' . var_export(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], true));
65            return response()->json(['status' => 'ko', 'message' => $e->getMessage()], Response::HTTP_UNPROCESSABLE_ENTITY);
66        }
67    }
68}