mirror of
https://github.com/meienberger/runtipi.git
synced 2024-10-26 20:19:56 +03:00
fix: runtipi dashboard logs project name
This commit is contained in:
parent
02a83e1b5f
commit
78225c3186
@ -12,7 +12,6 @@
|
||||
!**/build.js
|
||||
!next.config.mjs
|
||||
!sentry.*.config.ts
|
||||
!instrumentation.ts
|
||||
!public/**
|
||||
!src/**
|
||||
!tests/**
|
||||
|
7
.github/workflows/nightly-release.yml
vendored
7
.github/workflows/nightly-release.yml
vendored
@ -104,3 +104,10 @@ jobs:
|
||||
tag: nightly
|
||||
rm: true
|
||||
files: cli/runtipi-cli-*
|
||||
|
||||
e2e-tests:
|
||||
needs: [update-release]
|
||||
uses: './.github/workflows/e2e.yml'
|
||||
secrets: inherit
|
||||
with:
|
||||
version: ${{ needs.create-tag.outputs.tagname }}
|
||||
|
@ -46,8 +46,6 @@ COPY ./next.config.mjs ./next.config.mjs
|
||||
|
||||
# Sentry
|
||||
COPY ./sentry.client.config.ts ./sentry.client.config.ts
|
||||
COPY ./sentry.edge.config.ts ./sentry.edge.config.ts
|
||||
COPY ./sentry.server.config.ts ./sentry.server.config.ts
|
||||
|
||||
COPY ./start.dev.sh ./start.sh
|
||||
|
||||
|
@ -27,17 +27,32 @@ export const socketEventSchema = z.union([
|
||||
error: z.string().optional(),
|
||||
}),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal('app-logs-init'),
|
||||
event: z.literal('initLogs'),
|
||||
data: z.object({
|
||||
appId: z.string(),
|
||||
maxLines: z.number().optional(),
|
||||
}),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal('app-logs'),
|
||||
event: z.union([z.literal('newLogs'), z.literal('viewLogs'), z.literal('stopLogs')]),
|
||||
event: z.union([z.literal('newLogs'), z.literal('stopLogs')]),
|
||||
data: z.object({
|
||||
appId: z.string(),
|
||||
lines: z.array(z.string()).optional(),
|
||||
}),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal('runtipi-logs-init'),
|
||||
event: z.literal('initLogs'),
|
||||
data: z.object({
|
||||
maxLines: z.number().optional(),
|
||||
}),
|
||||
}),
|
||||
z.object({
|
||||
type: z.literal('runtipi-logs'),
|
||||
event: z.union([z.literal('newLogs'), z.literal('viewLogs'), z.literal('stopLogs')]),
|
||||
event: z.union([z.literal('newLogs'), z.literal('stopLogs')]),
|
||||
data: z.object({
|
||||
lines: z.array(z.string()).optional(),
|
||||
}),
|
||||
|
@ -55,7 +55,7 @@ const getBaseComposeArgsApp = async (appId: string) => {
|
||||
const getBaseComposeArgsTipi = async () => {
|
||||
const args: string[] = [`--env-file ${path.join(DATA_DIR, '.env')}`];
|
||||
|
||||
args.push(`--project-name tipi`);
|
||||
args.push(`--project-name runtipi`);
|
||||
|
||||
const composeFile = path.join(DATA_DIR, 'docker-compose.yml');
|
||||
args.push(`-f ${composeFile}`);
|
||||
@ -89,20 +89,22 @@ export const compose = async (appId: string, command: string) => {
|
||||
};
|
||||
|
||||
export const handleViewRuntipiLogsEvent = async (socket: Socket, event: SocketEvent) => {
|
||||
const parsedEvent = socketEventSchema.safeParse(event);
|
||||
const { success, data } = socketEventSchema.safeParse(event);
|
||||
|
||||
if (!parsedEvent.success) {
|
||||
if (!success) {
|
||||
logger.error('Invalid viewLogs event data:', event);
|
||||
return;
|
||||
}
|
||||
|
||||
if (parsedEvent.data.type !== 'runtipi-logs' && parsedEvent.data.event !== 'viewLogs') {
|
||||
if (data.type !== 'runtipi-logs-init') {
|
||||
return;
|
||||
}
|
||||
|
||||
const { maxLines } = data.data;
|
||||
|
||||
const args = await getBaseComposeArgsTipi();
|
||||
|
||||
args.push('logs --follow -n 25');
|
||||
args.push(`logs --follow -n ${maxLines || 25}`);
|
||||
|
||||
const logsCommand = `docker-compose ${args.join(' ')}`;
|
||||
|
||||
@ -114,7 +116,6 @@ export const handleViewRuntipiLogsEvent = async (socket: Socket, event: SocketEv
|
||||
|
||||
socket.on('runtipi-logs', (data) => {
|
||||
if (data.event === 'stopLogs') {
|
||||
console.log('Stopping logs');
|
||||
logs.kill('SIGINT');
|
||||
}
|
||||
});
|
||||
@ -146,18 +147,14 @@ export const handleViewAppLogsEvent = async (socket: Socket, event: SocketEvent)
|
||||
return;
|
||||
}
|
||||
|
||||
if (parsedEvent.data.type !== 'app-logs') {
|
||||
if (parsedEvent.data.type !== 'app-logs-init') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (parsedEvent.data.event !== 'viewLogs') {
|
||||
return;
|
||||
}
|
||||
|
||||
const { appId } = parsedEvent.data.data;
|
||||
const { appId, maxLines } = parsedEvent.data.data;
|
||||
|
||||
const args = await getBaseComposeArgsApp(appId);
|
||||
args.push('logs --follow -n 25');
|
||||
args.push(`logs --follow -n ${maxLines || 25}`);
|
||||
|
||||
const logsCommand = `docker-compose ${args.join(' ')}`;
|
||||
|
||||
|
@ -10,8 +10,8 @@ class SocketManager {
|
||||
const io = new Server(5001, { cors: { origin: '*' }, path: '/worker/socket.io' });
|
||||
|
||||
io.on('connection', async (socket) => {
|
||||
socket.on('app-logs', (event) => handleViewAppLogsEvent(socket, event));
|
||||
socket.on('runtipi-logs', (event) => handleViewRuntipiLogsEvent(socket, event));
|
||||
socket.on('app-logs-init', (event) => handleViewAppLogsEvent(socket, event));
|
||||
socket.on('runtipi-logs-init', (event) => handleViewRuntipiLogsEvent(socket, event));
|
||||
socket.on('disconnect', () => {});
|
||||
});
|
||||
|
||||
|
@ -12,7 +12,7 @@ export const AppLogs = ({ appId }: { appId: string }) => {
|
||||
useSocket({
|
||||
selector: { type: 'app-logs', event: 'newLogs', data: { property: 'appId', value: appId } },
|
||||
onCleanup: () => setLogs([]),
|
||||
emitOnConnect: { type: 'app-logs', event: 'viewLogs', data: { appId } },
|
||||
emitOnConnect: { type: 'app-logs-init', event: 'initLogs', data: { appId, maxLines } },
|
||||
emitOnDisconnect: { type: 'app-logs', event: 'stopLogs', data: { appId } },
|
||||
onEvent: (_, data) => {
|
||||
setLogs((prevLogs) => {
|
||||
|
@ -12,7 +12,7 @@ export const LogsContainer = () => {
|
||||
useSocket({
|
||||
selector: { type: 'runtipi-logs', event: 'newLogs' },
|
||||
onCleanup: () => setLogs([]),
|
||||
emitOnConnect: { type: 'runtipi-logs', event: 'viewLogs', data: {} },
|
||||
emitOnConnect: { type: 'runtipi-logs-init', event: 'initLogs', data: { maxLines } },
|
||||
emitOnDisconnect: { type: 'runtipi-logs', event: 'stopLogs', data: {} },
|
||||
onEvent: (_, data) => {
|
||||
setLogs((prevLogs) => {
|
||||
|
@ -37,7 +37,7 @@ describe('useSocket', () => {
|
||||
});
|
||||
|
||||
it('should emit on connect if emitOnConnect is provided', () => {
|
||||
const emitOnConnect = { type: 'runtipi-logs', event: 'viewLogs', data: {} } as const;
|
||||
const emitOnConnect = { type: 'runtipi-logs', event: 'stopLogs', data: {} } as const;
|
||||
renderHook(() => useSocket({ selector: { type: 'runtipi-logs' }, emitOnConnect }));
|
||||
|
||||
expect(mockSocket.on).toHaveBeenCalledWith('connect', expect.any(Function));
|
||||
|
Loading…
Reference in New Issue
Block a user