c2085d6b13
* gergo/apolloQueryDuration (#1949) * add apollo query duration * feat: add more details to apollo query logging * fix: pr review * feat: format log messages as clef (#1950) * fix(logging): pinoClef log levels must be a string * chore(fe2): reducing log level for some spammy req logs * minor adjustment * more robust path resolution * better req log text * feat(fe2): improved and more thorough logging to help with observability (#1948) * better req log text * minor improvements to server logging * WIP FE2 req logging * FE2 apollo operation logging * undid apolloPlugin changes due to Gergos PR * seq message templates introduced * fix: request logs (#1964) * fix: request logs * chore: remove comments * feat: add graphql subscription metrics (#1970) * optimized preview msg resultListener * fix(server): locking to avoid postgres notification listeners processing the same message multiple times (#1972) * fix(server): locking to avoid postgres notification listeners processing the same message multiple times * optimized locking * minor cleanup * msg update * log level adjustments * reduce failsafe expiry --------- Co-authored-by: Iain Sproat <68657+iainsproat@users.noreply.github.com> Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com> Co-authored-by: Kristaps Fabians Geikins <fabians@speckle.systems>
86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
/* istanbul ignore file */
|
|
const {
|
|
insertNewUploadAndNotify
|
|
} = require('@/modules/fileuploads/services/management')
|
|
const request = require('request')
|
|
const { streamWritePermissions } = require('@/modules/shared/authz')
|
|
const { authMiddlewareCreator } = require('@/modules/shared/middleware')
|
|
const { moduleLogger } = require('@/logging/logging')
|
|
const {
|
|
listenForImportUpdates
|
|
} = require('@/modules/fileuploads/services/resultListener')
|
|
|
|
const saveFileUploads = async ({ userId, streamId, branchName, uploadResults }) => {
|
|
await Promise.all(
|
|
uploadResults.map(async (upload) => {
|
|
await insertNewUploadAndNotify({
|
|
fileId: upload.blobId,
|
|
streamId,
|
|
branchName,
|
|
userId,
|
|
fileName: upload.fileName,
|
|
fileType: upload.fileName.split('.').pop(),
|
|
fileSize: upload.fileSize
|
|
})
|
|
})
|
|
)
|
|
}
|
|
|
|
exports.init = async (app, isInitial) => {
|
|
if (process.env.DISABLE_FILE_UPLOADS) {
|
|
moduleLogger.warn('📄 FileUploads module is DISABLED')
|
|
return
|
|
} else {
|
|
moduleLogger.info('📄 Init FileUploads module')
|
|
}
|
|
|
|
app.post(
|
|
'/api/file/:fileType/:streamId/:branchName?',
|
|
authMiddlewareCreator(streamWritePermissions),
|
|
async (req, res) => {
|
|
const branchName = req.params.branchName || 'main'
|
|
req.log = req.log.child({
|
|
streamId: req.params.streamId,
|
|
userId: req.context.userId,
|
|
branchName
|
|
})
|
|
req.pipe(
|
|
request(
|
|
`${process.env.CANONICAL_URL}/api/stream/${req.params.streamId}/blob`,
|
|
async (err, response, body) => {
|
|
if (err) {
|
|
res.log.error(err, 'Error while uploading blob.')
|
|
res.status(500).send(err.message)
|
|
return
|
|
}
|
|
if (response.statusCode === 201) {
|
|
const { uploadResults } = JSON.parse(body)
|
|
await saveFileUploads({
|
|
userId: req.context.userId,
|
|
streamId: req.params.streamId,
|
|
branchName,
|
|
uploadResults
|
|
})
|
|
} else {
|
|
res.log.error(
|
|
{
|
|
statusCode: response.statusCode,
|
|
path: `${process.env.CANONICAL_URL}/api/stream/${req.params.streamId}/blob`
|
|
},
|
|
'Error while uploading file.'
|
|
)
|
|
}
|
|
res.status(response.statusCode).send(body)
|
|
}
|
|
)
|
|
)
|
|
}
|
|
)
|
|
|
|
if (isInitial) {
|
|
listenForImportUpdates()
|
|
}
|
|
}
|
|
|
|
exports.finalize = () => {}
|