diff --git a/packages/api/src/jobs/update_home.ts b/packages/api/src/jobs/update_home.ts index d97b0b260..b57f71adc 100644 --- a/packages/api/src/jobs/update_home.ts +++ b/packages/api/src/jobs/update_home.ts @@ -494,8 +494,6 @@ const latency = new client.Histogram({ buckets: [0.1, 0.5, 1, 2, 5, 10], }) -latency.observe(10) - registerMetric(latency) export const updateHome = async (data: UpdateHomeJobData) => { diff --git a/packages/api/src/services/score.ts b/packages/api/src/services/score.ts index cae0bebf0..aed8f4b7b 100644 --- a/packages/api/src/services/score.ts +++ b/packages/api/src/services/score.ts @@ -1,5 +1,7 @@ import axios from 'axios' +import client from 'prom-client' import { env } from '../env' +import { registerMetric } from '../prometheus' import { logError } from '../utils/logger' export interface Feature { @@ -38,6 +40,15 @@ export type ScoreBody = { score: number } +// use prometheus to monitor the latency of digest score api +const latency = new client.Histogram({ + name: 'omnivore_digest_score_latency', + help: 'Latency of digest score API in seconds', + buckets: [0.1, 0.5, 1, 2, 5, 10, 20, 30, 60], +}) + +registerMetric(latency) + export type ScoreApiResponse = Record // item_id -> score interface ScoreClient { getScores(data: ScoreApiRequestBody): Promise @@ -65,6 +76,8 @@ class ScoreClientImpl implements ScoreClient { async getScores(data: ScoreApiRequestBody): Promise { try { + const start = Date.now() + const response = await axios.post(this.apiUrl, data, { headers: { 'Content-Type': 'application/json', @@ -72,6 +85,9 @@ class ScoreClientImpl implements ScoreClient { timeout: 5000, }) + const duration = (Date.now() - start) / 1000 // in seconds + latency.observe(duration) + return response.data } catch (error) { logError(error)