61609de97e
* feat(preview-generator): add new preview generator webapp * wip(preview-service): reworking the preview service backend * feat(previews): logging * feat(preview-service): streamline payloads * fix(preview-service): do not log the full payload * feat(preview-service): build new preview service * feat(preview-service): add separate response queue * feat(previews): integrate preview queues with the server * feat(previews): use module alias * chore(previews): remove old preview service code * feat(previews): log stuff on job statuses * fix(previews): add missing deps and scripts * fix(previews): package deps fix * fix(server): moar typing fixes * Metrics related to jobs: total count, request failures, response errors & durations * duration should include unit. - histogram metric should be summary - error responses include duration in seconds - attempt to remove metric before adding it (prevent errors with duplicate metrics) * fix(server, frontend): some ts fixes * fixes * fix(frontend): remove unneeded ts-expect-error * chore(preview-service): eslint * TS fix * feat(previews): more smoal fixes * fix(preview-service): alias loading * feat(helm): updates for new preview service queue setup * feat(preview-service): launch new browser for each job * feat(preview-service): add timeout, fix liveliness * fix(helm): add access to new secret in service accounts * tidy metrics into a separate file * Remove broken preview service acceptance test * fix broken import * Add metrics to test * feat(preview-service): handle preview service shutdown properly * fix(previews): merge bork --------- Co-authored-by: Iain Sproat <68657+iainsproat@users.noreply.github.com> Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import Bull from 'bull'
|
|
import { type Registry, Counter, Summary, Gauge } from 'prom-client'
|
|
|
|
export const initializeMetrics = (params: {
|
|
registers: Registry[]
|
|
previewRequestQueue: Bull.Queue
|
|
}) => {
|
|
const { registers, previewRequestQueue } = params
|
|
// add a metric to gauge the length of the preview job queue
|
|
registers.forEach((r) =>
|
|
r.removeSingleMetric('speckle_server_preview_jobs_queue_pending')
|
|
)
|
|
new Gauge({
|
|
name: 'speckle_server_preview_jobs_queue_pending',
|
|
help: 'Number of preview jobs waiting in the job queue',
|
|
async collect() {
|
|
this.set(await previewRequestQueue.count())
|
|
}
|
|
})
|
|
|
|
registers.forEach((r) => r.removeSingleMetric('speckle_server_preview_jobs_count'))
|
|
const previewJobsCounter = new Counter({
|
|
name: 'speckle_server_preview_jobs_count',
|
|
help: 'Total number of preview jobs which have been requested to be processed.'
|
|
})
|
|
|
|
registers.forEach((r) =>
|
|
r.removeSingleMetric('speckle_server_preview_jobs_request_failed_count')
|
|
)
|
|
const previewJobsFailedCounter = new Counter({
|
|
name: 'speckle_server_preview_jobs_request_failed_count',
|
|
help: 'Total number of preview jobs which have been requested but failed to be processed.'
|
|
})
|
|
|
|
registers.forEach((r) =>
|
|
r.removeSingleMetric('speckle_server_preview_jobs_processed_duration_seconds')
|
|
)
|
|
const previewJobsProcessedSummary = new Summary<'status'>({
|
|
name: 'speckle_server_preview_jobs_processed_duration_seconds',
|
|
help: 'Duration of preview job processing, in seconds',
|
|
labelNames: ['status']
|
|
})
|
|
|
|
previewRequestQueue.on('added', () => {
|
|
previewJobsCounter.inc()
|
|
})
|
|
previewRequestQueue.on('failed', () => {
|
|
previewJobsFailedCounter.inc()
|
|
})
|
|
|
|
return { previewJobsProcessedSummary }
|
|
}
|