Skip to content

Commit 8d9b1ac

Browse files
authored
Merge pull request #234 from autonomys/add-interaction-metric
feat: send interaction to vmetrics
2 parents e4ef50a + cd946a8 commit 8d9b1ac

File tree

3 files changed

+50
-22
lines changed

3 files changed

+50
-22
lines changed

backend/src/drivers/vmetrics.ts

+27-21
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,35 @@ export interface Metric {
88
}
99

1010
export const sendMetricToVictoria = async (metric: Metric): Promise<void> => {
11-
const values = Object.entries(metric.fields).map(
12-
([key, value]) => `${key}=${value}`,
13-
)
14-
const data = `${metric.measurement},${metric.tag} ${values.join(',')}`
11+
try {
12+
const values = Object.entries(metric.fields).map(
13+
([key, value]) => `${key}=${value}`,
14+
)
15+
const data = `${metric.measurement},${metric.tag} ${values.join(',')}`
1516

16-
const basicAuthToken = Buffer.from(
17-
`${config.monitoring.auth.username}:${config.monitoring.auth.password}`,
18-
).toString('base64')
17+
const basicAuthToken = Buffer.from(
18+
`${config.monitoring.auth.username}:${config.monitoring.auth.password}`,
19+
).toString('base64')
1920

20-
if (!config.monitoring.victoriaEndpoint) {
21-
console.log(JSON.stringify(config.monitoring, null, 2))
22-
console.error('Victoria endpoint is not set')
23-
return
24-
}
21+
if (!config.monitoring.victoriaEndpoint) {
22+
console.log(JSON.stringify(config.monitoring, null, 2))
23+
console.error('Victoria endpoint is not set')
24+
return
25+
}
2526

26-
const response = await fetch(config.monitoring.victoriaEndpoint, {
27-
method: 'POST',
28-
body: data,
29-
headers: {
30-
Authorization: `Basic ${basicAuthToken}`,
31-
},
32-
})
33-
if (!response.ok) {
34-
throw new Error(`Failed to send metric to Victoria: ${response.statusText}`)
27+
const response = await fetch(config.monitoring.victoriaEndpoint, {
28+
method: 'POST',
29+
body: data,
30+
headers: {
31+
Authorization: `Basic ${basicAuthToken}`,
32+
},
33+
})
34+
if (!response.ok) {
35+
throw new Error(
36+
`Failed to send metric to Victoria: ${response.statusText}`,
37+
)
38+
}
39+
} catch (error) {
40+
console.error('Failed to send metric to Victoria', error)
3541
}
3642
}

backend/src/http/middlewares/requestTrace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,5 @@ export const requestTrace: RequestHandler = (req, res) => {
3333
},
3434
}
3535

36-
sendMetricToVictoria(metric).catch(console.error)
36+
sendMetricToVictoria(metric)
3737
}

backend/src/useCases/objects/interactions.ts

+22
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,34 @@
11
import { v4 } from 'uuid'
22
import { InteractionType } from '@auto-drive/models'
33
import { interactionsRepository } from '../../repositories/objects/interactions.js'
4+
import { Metric, sendMetricToVictoria } from '../../drivers/vmetrics.js'
5+
import { config } from '../../config.js'
6+
7+
const createMetric = (type: InteractionType, size: bigint): Metric => {
8+
const tags = {
9+
chain: config.monitoring.metricEnvironmentTag,
10+
type,
11+
}
12+
13+
const tag = Object.entries(tags)
14+
.map(([key, value]) => `${key}=${value}`)
15+
.join(',')
16+
17+
return {
18+
measurement: 'auto_drive_interactions',
19+
tag,
20+
fields: {
21+
size,
22+
},
23+
}
24+
}
425

526
const createInteraction = async (
627
subscriptionId: string,
728
type: InteractionType,
829
size: bigint,
930
): Promise<void> => {
31+
sendMetricToVictoria(createMetric(type, size))
1032
await interactionsRepository.createInteraction(
1133
v4(),
1234
subscriptionId,

0 commit comments

Comments
 (0)