feat: add importer metrics collector
This commit is contained in:
@ -10,6 +10,7 @@ import { promisify } from 'util'
|
||||
import { v4 as uuid } from 'uuid'
|
||||
import { importCsv } from './csv'
|
||||
import { importMatterArchive } from './matterHistory'
|
||||
import { ImportStatus, updateMetrics } from './metrics'
|
||||
import { createRedisClient } from './redis'
|
||||
import { CONTENT_FETCH_URL, createCloudTask, emailUserUrl } from './task'
|
||||
|
||||
@ -62,6 +63,15 @@ export type ImportContext = {
|
||||
|
||||
type importHandlerFunc = (ctx: ImportContext, stream: Stream) => Promise<void>
|
||||
|
||||
interface UpdateMetricsRequest {
|
||||
taskId: string
|
||||
status: ImportStatus
|
||||
}
|
||||
|
||||
function isUpdateMetricsRequest(body: any): body is UpdateMetricsRequest {
|
||||
return 'taskId' in body && 'status' in body
|
||||
}
|
||||
|
||||
interface StorageEvent {
|
||||
name: string
|
||||
bucket: string
|
||||
@ -328,3 +338,43 @@ export const importHandler = Sentry.GCPFunction.wrapHttpFunction(
|
||||
res.send('ok')
|
||||
}
|
||||
)
|
||||
|
||||
export const importMetricsCollector = Sentry.GCPFunction.wrapHttpFunction(
|
||||
async (req, res) => {
|
||||
if (!process.env.JWT_SECRET) {
|
||||
console.error('JWT_SECRET not exists')
|
||||
return res.status(500).send({ errorCodes: 'JWT_SECRET_NOT_EXISTS' })
|
||||
}
|
||||
const token = (req.query.token || req.headers.authorization) as string
|
||||
if (!token) {
|
||||
return res.status(401).send({ errorCode: 'INVALID_TOKEN' })
|
||||
}
|
||||
|
||||
let userId: string
|
||||
|
||||
try {
|
||||
const decoded = jwt.verify(token, process.env.JWT_SECRET) as {
|
||||
uid: string
|
||||
}
|
||||
userId = decoded.uid
|
||||
} catch (e) {
|
||||
console.error('Authentication error:', e)
|
||||
return res.status(401).send({ errorCode: 'UNAUTHENTICATED' })
|
||||
}
|
||||
|
||||
const redisClient = await createRedisClient(
|
||||
process.env.REDIS_URL,
|
||||
process.env.REDIS_CERT
|
||||
)
|
||||
if (!isUpdateMetricsRequest(req.body)) {
|
||||
console.log('Invalid request body')
|
||||
return res.status(400).send('Bad Request')
|
||||
}
|
||||
|
||||
// update metrics
|
||||
await updateMetrics(redisClient, userId, req.body.taskId, req.body.status)
|
||||
await redisClient.quit()
|
||||
|
||||
res.send('ok')
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user