feat(platform-services): add platform service log retrieval and display in the services UI
This commit is contained in:
@@ -165,5 +165,42 @@ export class PlatformHandler {
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
// Get platform service logs
|
||||
this.typedrouter.addTypedHandler(
|
||||
new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_GetPlatformServiceLogs>(
|
||||
'getPlatformServiceLogs',
|
||||
async (dataArg) => {
|
||||
await requireValidIdentity(this.opsServerRef.adminHandler, dataArg);
|
||||
const service = this.opsServerRef.oneboxRef.database.getPlatformServiceByType(dataArg.serviceType);
|
||||
if (!service || !service.containerId) {
|
||||
throw new plugins.typedrequest.TypedResponseError('Platform service has no container');
|
||||
}
|
||||
|
||||
const tail = dataArg.tail || 100;
|
||||
const rawLogs = await this.opsServerRef.oneboxRef.docker.getContainerLogs(service.containerId, tail);
|
||||
|
||||
// Parse raw log output into structured entries
|
||||
const logLines = (rawLogs.stdout + rawLogs.stderr)
|
||||
.split('\n')
|
||||
.filter((line: string) => line.trim());
|
||||
|
||||
const logs = logLines.map((line: string, index: number) => {
|
||||
const isError = line.toLowerCase().includes('error') || line.toLowerCase().includes('fatal');
|
||||
const isWarn = line.toLowerCase().includes('warn');
|
||||
return {
|
||||
id: index,
|
||||
serviceId: 0,
|
||||
timestamp: Date.now(),
|
||||
message: line,
|
||||
level: (isError ? 'error' : isWarn ? 'warn' : 'info') as 'info' | 'warn' | 'error' | 'debug',
|
||||
source: 'stdout' as const,
|
||||
};
|
||||
});
|
||||
|
||||
return { logs };
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user