mirror of
https://github.com/ajnart/homarr.git
synced 2025-11-10 07:25:48 +01:00
🏗️ Migrate docker containers query to tRPC
This commit is contained in:
@@ -2,6 +2,7 @@ import { createTRPCRouter } from '~/server/api/trpc';
|
||||
import { appRouter } from './routers/app';
|
||||
import { rssRouter } from './routers/rss';
|
||||
import { configRouter } from './routers/config';
|
||||
import { dockerRouter } from './routers/docker/router';
|
||||
|
||||
/**
|
||||
* This is the primary router for your server.
|
||||
@@ -12,6 +13,7 @@ export const rootRouter = createTRPCRouter({
|
||||
app: appRouter,
|
||||
rss: rssRouter,
|
||||
config: configRouter,
|
||||
docker: dockerRouter,
|
||||
});
|
||||
|
||||
// export type definition of API
|
||||
|
||||
21
src/server/api/routers/docker/DockerSingleton.ts
Normal file
21
src/server/api/routers/docker/DockerSingleton.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import Docker from 'dockerode';
|
||||
|
||||
export default class DockerSingleton extends Docker {
|
||||
private static dockerInstance: DockerSingleton;
|
||||
|
||||
private constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
public static getInstance(): DockerSingleton {
|
||||
if (!DockerSingleton.dockerInstance) {
|
||||
DockerSingleton.dockerInstance = new Docker({
|
||||
// If env variable DOCKER_HOST is not set, it will use the default socket
|
||||
...(process.env.DOCKER_HOST && { host: process.env.DOCKER_HOST }),
|
||||
// Same thing for docker port
|
||||
...(process.env.DOCKER_PORT && { port: process.env.DOCKER_PORT }),
|
||||
});
|
||||
}
|
||||
return DockerSingleton.dockerInstance;
|
||||
}
|
||||
}
|
||||
18
src/server/api/routers/docker/router.ts
Normal file
18
src/server/api/routers/docker/router.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { TRPCError } from '@trpc/server';
|
||||
import { createTRPCRouter, publicProcedure } from '../../trpc';
|
||||
import DockerSingleton from './DockerSingleton';
|
||||
|
||||
export const dockerRouter = createTRPCRouter({
|
||||
containers: publicProcedure.query(async () => {
|
||||
try {
|
||||
const docker = DockerSingleton.getInstance();
|
||||
const containers = await docker.listContainers({ all: true });
|
||||
return containers;
|
||||
} catch (err) {
|
||||
throw new TRPCError({
|
||||
code: 'INTERNAL_SERVER_ERROR',
|
||||
message: 'Unable to get containers',
|
||||
});
|
||||
}
|
||||
}),
|
||||
});
|
||||
Reference in New Issue
Block a user