feat(api): add 'show_timestamps' parameter to logs endpoints

This commit is contained in:
Yanluis Fermin committed 2025-07-30 21:32:11 -04:00
1 parent c239b8bbba
commit 0eb2ea86e8
4 files changed
+38 -14

No files matched your search

@@ -1553,6 +1553,13 @@ class ApplicationsController extends Controller
default: 100, default: 100,
) )
), ),
new OA\Parameter(
name: 'show_timestamps',
in: 'query',
description: 'Show timestamps in the logs.',
required: false,
schema: new OA\Schema(type: 'boolean', default: false),
),
], ],
responses: [ responses: [
new OA\Response( new OA\Response(
@@ -1616,8 +1623,9 @@ class ApplicationsController extends Controller
], 400); ], 400);
} }
$lines = $request->query->get('lines', 100) ?: 100; $lines = $request->query->get('lines', 100);
$logs = getContainerLogs($application->destination->server, $container['ID'], $lines); $showTimestamps = $request->query->get('show_timestamps', false);
$logs = getContainerLogs($application->destination->server, $container['ID'], $lines, $showTimestamps);
return response()->json([ return response()->json([
'logs' => $logs, 'logs' => $logs,
@@ -1566,6 +1566,13 @@ class DatabasesController extends Controller
default: 100, default: 100,
) )
), ),
new OA\Parameter(
name: 'show_timestamps',
in: 'query',
description: 'Show timestamps in the logs.',
required: false,
schema: new OA\Schema(type: 'boolean', default: false),
),
], ],
responses: [ responses: [
new OA\Response( new OA\Response(
@@ -1629,8 +1636,9 @@ class DatabasesController extends Controller
], 400); ], 400);
} }
$lines = $request->query->get('lines', 100) ?: 100; $lines = $request->query->get('lines', 100);
$logs = getContainerLogs($database->destination->server, $container['ID'], $lines); $showTimestamps = $request->query->get('show_timestamps', false);
$logs = getContainerLogs($database->destination->server, $container['ID'], $lines, $showTimestamps);
return response()->json([ return response()->json([
'logs' => $logs, 'logs' => $logs,
@@ -486,6 +486,13 @@ class ServicesController extends Controller
default: 100, default: 100,
) )
), ),
new OA\Parameter(
name: 'show_timestamps',
in: 'query',
description: 'Show timestamps in the logs.',
required: false,
schema: new OA\Schema(type: 'boolean', default: false),
),
], ],
responses: [ responses: [
new OA\Response( new OA\Response(
@@ -551,8 +558,9 @@ class ServicesController extends Controller
], 400); ], 400);
} }
$lines = $request->query->get('lines', 100) ?: 100; $lines = $request->query->get('lines', 100);
$logs = getContainerLogs($service->destination->server, $container['ID'], $lines); $showTimestamps = $request->query->get('show_timestamps', false);
$logs = getContainerLogs($service->destination->server, $container['ID'], $lines, $showTimestamps);
return response()->json([ return response()->json([
'logs' => $logs, 'logs' => $logs,
+8 -8
View File
@@ -1115,18 +1115,18 @@ function validateComposeFile(string $compose, int $server_id): string|Throwable
} }
} }
function getContainerLogs(Server $server, string $container_id, int $lines = 100): string function getContainerLogs(Server $server, string $container_id, int $lines = 100, bool $showTimestamps = false): string
{ {
$command = "docker logs -n {$lines} {$container_id}";
if ($server->isSwarm()) { if ($server->isSwarm()) {
$output = instant_remote_process([ $command = "docker service logs -n {$lines} {$container_id}";
"docker service logs -n {$lines} {$container_id}",
], $server);
} else {
$output = instant_remote_process([
"docker logs -n {$lines} {$container_id}",
], $server);
} }
if ($showTimestamps) {
$command .= ' --timestamps';
}
$output = instant_remote_process([$command], $server);
$output .= removeAnsiColors($output); $output .= removeAnsiColors($output);
return $output; return $output;