UNPKG

@flowfuse/flowfuse

Version:

An open source low-code development platform

82 lines (76 loc) 2.85 kB
const projectShared = require('../../../routes/api/shared/project.js') module.exports = async function (app) { app.config.features.register('instanceResources', true, true) app.addHook('preHandler', projectShared.defaultPreHandler.bind(null, app)) app.addHook('preHandler', async (request, reply) => { if (!request.project) { reply.code(404).send({ code: 'not_found', error: 'Not Found' }) return } await request.project.Team.ensureTeamTypeExists() if (!request.project.Team.getFeatureProperty('instanceResources', false)) { reply.code(404).send({ code: 'not_found', error: 'Not Found' }) return // eslint-disable-line no-useless-return } }) /** * * @name /api/v1/projects/:id/resources * @memberof forge.routes.api.project */ app.get('/', { preHandler: app.needsPermission('project:read'), schema: { summary: 'Returns resource usage history for an Instance', tags: ['Instances'], params: { type: 'object', properties: { instanceId: { type: 'string' } } }, response: { 200: { type: 'object', properties: { meta: { $ref: 'PaginationMeta' }, resources: { type: 'array', items: { type: 'object', properties: { src: { type: 'string' }, ps: { type: 'number' }, cpu: { type: 'number' }, hs: { type: 'number' }, hu: { type: 'number' }, ts: { type: 'number' } } } }, count: { type: 'number' } } }, '4xx': { $ref: 'APIError' }, 500: { $ref: 'APIError' } } } }, async (request, reply) => { try { const resources = await app.containers.resources(request.project) reply.send(resources) } catch (err) { reply.code(500).send({ code: 'unknown_error', error: 'unknown error' }) } }) app.get('/stream', { preHandler: app.needsPermission('project:read'), websocket: true }, async (socket, request) => { await app.containers.resourcesStream(request.project, socket) }) }