From 1772b383de490cf406fe93ef3aa3a941f6db513c Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 21 Apr 2023 15:05:27 +0200 Subject: Add peertube runner cli --- packages/peertube-runner/shared/ipc/ipc-client.ts | 74 +++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 packages/peertube-runner/shared/ipc/ipc-client.ts (limited to 'packages/peertube-runner/shared/ipc/ipc-client.ts') diff --git a/packages/peertube-runner/shared/ipc/ipc-client.ts b/packages/peertube-runner/shared/ipc/ipc-client.ts new file mode 100644 index 000000000..7f5951157 --- /dev/null +++ b/packages/peertube-runner/shared/ipc/ipc-client.ts @@ -0,0 +1,74 @@ +import CliTable3 from 'cli-table3' +import { ensureDir } from 'fs-extra' +import { Client as NetIPC } from 'net-ipc' +import { ConfigManager } from '../config-manager' +import { IPCReponse, IPCReponseData, IPCRequest } from './shared' + +export class IPCClient { + private netIPC: NetIPC + + async run () { + await ensureDir(ConfigManager.Instance.getSocketDirectory()) + + const socketPath = ConfigManager.Instance.getSocketPath() + this.netIPC = new NetIPC({ path: socketPath }) + await this.netIPC.connect() + } + + async askRegister (options: { + url: string + registrationToken: string + runnerName: string + runnerDescription?: string + }) { + const req: IPCRequest = { + type: 'register', + ...options + } + + const { success, error } = await this.netIPC.request(req) as IPCReponse + + if (success) console.log('PeerTube instance registered') + else console.error('Could not register PeerTube instance on runner server side', error) + } + + async askUnregister (options: { + url: string + }) { + const req: IPCRequest = { + type: 'unregister', + ...options + } + + const { success, error } = await this.netIPC.request(req) as IPCReponse + + if (success) console.log('PeerTube instance unregistered') + else console.error('Could not unregister PeerTube instance on runner server side', error) + } + + async askListRegistered () { + const req: IPCRequest = { + type: 'list-registered' + } + + const { success, error, data } = await this.netIPC.request(req) as IPCReponse + if (!success) { + console.error('Could not list registered PeerTube instances', error) + return + } + + const table = new CliTable3({ + head: [ 'instance', 'runner name', 'runner description' ] + }) + + for (const server of data.servers) { + table.push([ server.url, server.runnerName, server.runnerDescription ]) + } + + console.log(table.toString()) + } + + stop () { + this.netIPC.destroy() + } +} -- cgit v1.2.3