🏗️ Migrate docker containers query to tRPC

This commit is contained in:
Meier Lukas
2023-06-10 12:35:37 +02:00
parent 0d2bbce8d7
commit b0b35c0f1c
4 changed files with 45 additions and 14 deletions

View File

@@ -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

View 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;
}
}

View 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',
});
}
}),
});