fastify .post('/', function (req, reply) { reply.send(req.body) })
fastify.get('/long', async (req, res) => { const measurement = req.startMeasurement('long'); await new Promise((resolve) => { setTimeout(resolve, 2000); }); req.finishMeasurement(measurement); res.send('Long job finished'); });
fastify.get('/', { schema }, ({ query }, res) => { const { number1, number2 } = query const calculation = sum(number1, number2) return res.send({ "hey": "ho! livereload" }) })
test('should throw an error "request.user does not exist" non existing request.user', function (t) { t.plan(4) var fastify = Fastify() fastify.register(jwtAuthz) fastify.get('/test3', function (request, reply) { request.jwtAuthz('baz') .catch(err => t.match(err.message, 'request.user does not exist')) reply.send({ foo: 'bar' }) }) fastify.listen(0, function (err) { fastify.server.unref() t.error(err) request({ method: 'GET', uri: 'http://localhost:' + fastify.server.address().port + '/test3', json: true }, function (err, response) { t.error(err) t.ok(response) }) }) })
/* Label Value Handler */ /* For retrieving the label values one can query on. Responses looks like this: { "values": [ "default", "cortex-ops", ... ] } */ fastify.get('/api/prom/label/:name/values', (req, res) => { if (debug) console.log('GET /api/prom/label/'+req.params.name+'/values'); if (debug) console.log('QUERY LABEL: ', req.params.name); var all_values = labels.get(req.params.name); var resp = { "values": all_values }; res.send(resp); });
/* Query Handler */ /* For doing queries, accepts the following parameters in the query-string: query: a logQL query limit: max number of entries to return start: the start time for the query, as a nanosecond Unix epoch (nanoseconds since 1970) end: the end time for the query, as a nanosecond Unix epoch (nanoseconds since 1970) direction: forward or backward, useful when specifying a limit regexp: a regex to filter the returned results, will eventually be rolled into the query language */ fastify.get('/api/prom/query', (req, res) => { if (debug) console.log('GET /api/prom/query'); if (debug) console.log('QUERY: ', req.query ); // console.log( req.urlData().query.replace('query=',' ') ); var params = req.query; var resp = { "streams": [] }; if (!req.query.query) { res.send(resp);return; } try { var label_rules = labelParser(req.query.query); var queries = req.query.query.replace(/\!?=/g,':'); var JSON_labels = toJSON(queries); } catch(e){ console.error(e, queries); res.send(resp); } if (debug) console.log('SCAN LABELS',JSON_labels,label_rules,params) scanFingerprints(JSON_labels,res,params,label_rules); });
test('should decorate request instance with jwtAuthz method', function (t) { t.plan(4) var fastify = Fastify() fastify.register(jwtAuthz) fastify.get('/test', function (request, reply) { t.ok(request.jwtAuthz) reply.send({ foo: 'bar' }) }) fastify.listen(0, function (err) { fastify.server.unref() t.error(err) request({ method: 'GET', uri: 'http://localhost:' + fastify.server.address().port + '/test', json: true }, function (err, response) { t.error(err) t.ok(response) }) }) })
test('should verify user scope', function (t) { t.plan(3) var fastify = Fastify() fastify.register(jwtAuthz) fastify.get('/test5', function (request, reply) { request.user = { name: 'sample', scope: 'user manager' } request.jwtAuthz(['user']) reply.send({ foo: 'bar' }) }) fastify.listen(0, function (err) { fastify.server.unref() t.error(err) request({ method: 'GET', uri: 'http://localhost:' + fastify.server.address().port + '/test5', json: true }, function (err, response) { t.error(err) t.ok(response) }) }) })
fastify.get('/stats', function (request, reply) { reply.send(swStats.getCoreStats()); });
/* Label Handlers */ /* For retrieving the names of the labels one can query on. Responses looks like this: { "values": [ "instance", "job", ... ] } */ fastify.get('/api/prom/label', (req, res) => { if (debug) console.log('GET /api/prom/label'); if (debug) console.log('QUERY: ', req.query); var all_labels = labels.get('_LABELS_'); var resp = { "values": all_labels }; res.send(resp); });
fastify.get('/', function (request, reply) { reply.send({ hello: 'world' }) });
fastify.get('/hello', (request, reply) => { reply.send({ hello: 'cloki' }) })
test('should throw an error "Scopes cannot be empty" with an empty scopes parameter', function (t) { t.plan(4) var fastify = Fastify() fastify.register(jwtAuthz) fastify.get('/test2', function (request, reply) { request.jwtAuthz([]) .catch(err => t.match(err.message, 'Scopes cannot be empty')) reply.send({ foo: 'bar' }) }) fastify.listen(0, function (err) { fastify.server.unref() t.error(err) request({ method: 'GET', uri: 'http://localhost:' + fastify.server.address().port + '/test2', json: true }, function (err, response) { t.error(err) t.ok(response) }) }) })
test('should throw an error "request.user.scope must be a string"', function (t) { t.plan(4) var fastify = Fastify() fastify.register(jwtAuthz) fastify.get('/test4', function (request, reply) { request.user = { name: 'sample', scope: 123 } request.jwtAuthz('baz') .catch(err => t.match(err.message, 'request.user.scope must be a string')) reply.send({ foo: 'bar' }) }) fastify.listen(0, function (err) { fastify.server.unref() t.error(err) request({ method: 'GET', uri: 'http://localhost:' + fastify.server.address().port + '/test4', json: true }, function (err, response) { t.error(err) t.ok(response) }) }) })
test('should throw an error "Insufficient scope"', function (t) { t.plan(4) var fastify = Fastify() fastify.register(jwtAuthz) fastify.get('/test5', function (request, reply) { request.user = { name: 'sample', scope: 'baz' } request.jwtAuthz(['foo']) .catch(err => t.match(err.message, 'Insufficient scope')) reply.send({ foo: 'bar' }) }) fastify.listen(0, function (err) { fastify.server.unref() t.error(err) request({ method: 'GET', uri: 'http://localhost:' + fastify.server.address().port + '/test5', json: true }, function (err, response) { t.error(err) t.ok(response) }) }) })