mirror of
https://github.com/tale/headplane.git
synced 2026-08-12 22:56:53 +00:00
feat: add ws server for agent
This commit is contained in:
+5
-1
@@ -10,6 +10,7 @@ import { createServer } from 'node:http'
|
||||
import { join, resolve } from 'node:path'
|
||||
import { env } from 'node:process'
|
||||
import { log } from './utils.mjs'
|
||||
import { getWss, registerWss } from './ws.mjs'
|
||||
|
||||
log('SRVX', 'INFO', `Running with Node.js ${process.versions.node}`)
|
||||
|
||||
@@ -142,7 +143,9 @@ const http = createServer(async (req, res) => {
|
||||
})
|
||||
|
||||
// Pass our request to the Remix handler and get a response
|
||||
const response = await handler(remixReq, {}) // No context
|
||||
const response = await handler(remixReq, {
|
||||
ws: getWss()
|
||||
})
|
||||
|
||||
// Handle our response and reply
|
||||
res.statusCode = response.status
|
||||
@@ -160,6 +163,7 @@ const http = createServer(async (req, res) => {
|
||||
res.end()
|
||||
})
|
||||
|
||||
registerWss(http)
|
||||
http.listen(port, host, () => {
|
||||
log('SRVX', 'INFO', `Running on ${host}:${port}`)
|
||||
})
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
// The Websocket server is wholly responsible for ingesting messages from
|
||||
// Headplane agent instances (hopefully not more than 1 is running lol)
|
||||
import { WebSocketServer } from 'ws'
|
||||
import { log } from './utils.mjs'
|
||||
|
||||
const wss = new WebSocketServer({ noServer: true })
|
||||
wss.on('connection', (ws, req) => {
|
||||
// On connection the agent will send its NodeID via Headers
|
||||
// We store this for later use to validate and show on the UI
|
||||
const nodeID = req.headers['x-headplane-ts-node-id']
|
||||
if (!nodeID) {
|
||||
ws.close(1008, 'ERR_NO_HP_TS_NODE_ID')
|
||||
return
|
||||
}
|
||||
})
|
||||
|
||||
export async function registerWss(server) {
|
||||
log('SRVX', 'INFO', 'Registering Websocket Server')
|
||||
server.on('upgrade', (request, socket, head) => {
|
||||
wss.handleUpgrade(request, socket, head, ws => {
|
||||
wss.emit('connection', ws, request)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export function getWss() {
|
||||
return wss
|
||||
}
|
||||
Reference in New Issue
Block a user