stacker.news/pages/api/log/index.js

26 lines
1.0 KiB
JavaScript
Raw Normal View History

import models from '@/api/models'
import slackClient from '@/api/slack'
const channelId = process.env.SLACK_CHANNEL_ID
const toKV = (obj) => {
return obj ? Object.entries(obj).reduce((text, [k, v]) => text + ` ${k}=${v}`, '').trimStart() : '-'
}
const slackPostMessage = ({ id, level, name, message, env, context }) => {
const text = `\`${new Date().toISOString()}\` | \`${id} [${level}] ${name}\` | ${message} | ${toKV(context)} | ${toKV({ os: env.os })}`
return slackClient.chat.postMessage({ channel: channelId, text })
}
export default async (req, res) => {
const { level, name, message, env, context } = req.body
if (!name) return res.status(400).json({ status: 400, message: 'name required' })
if (!message) return res.status(400).json({ status: 400, message: 'message required' })
const { id } = await models.log.create({ data: { level: level.toUpperCase(), name, message, env, context } })
if (slackClient) slackPostMessage({ id, ...req.body }).catch(console.error)
return res.status(200).json({ status: 200, message: 'ok' })
}