Files
speckle-server/packages/server/logging/apolloSubscriptionMonitoring.ts
T

60 lines
2.1 KiB
TypeScript

import prometheusClient from 'prom-client'
let apolloSubscriptionMonitoringIsInitialized = false
let metricConnectCounter: prometheusClient.Counter<string>
let metricConnectedClients: prometheusClient.Gauge<string>
let metricSubscriptionTotalOperations: prometheusClient.Counter<'subscriptionType'>
let metricSubscriptionTotalResponses: prometheusClient.Counter<
'subscriptionType' | 'status'
>
export const initApolloSubscriptionMonitoring = () => {
if (apolloSubscriptionMonitoringIsInitialized)
return {
metricConnectCounter,
metricConnectedClients,
metricSubscriptionTotalOperations,
metricSubscriptionTotalResponses
}
// Init metrics
prometheusClient.register.removeSingleMetric('speckle_server_apollo_connect')
metricConnectCounter = new prometheusClient.Counter({
name: 'speckle_server_apollo_connect',
help: 'Number of connects'
})
prometheusClient.register.removeSingleMetric('speckle_server_apollo_clients')
metricConnectedClients = new prometheusClient.Gauge({
name: 'speckle_server_apollo_clients',
help: 'Number of currently connected clients'
})
prometheusClient.register.removeSingleMetric(
'speckle_server_apollo_graphql_total_subscription_operations'
)
metricSubscriptionTotalOperations = new prometheusClient.Counter({
name: 'speckle_server_apollo_graphql_total_subscription_operations',
help: 'Number of total subscription operations served by this instance',
labelNames: ['subscriptionType'] as const
})
prometheusClient.register.removeSingleMetric(
'speckle_server_apollo_graphql_total_subscription_responses'
)
metricSubscriptionTotalResponses = new prometheusClient.Counter({
name: 'speckle_server_apollo_graphql_total_subscription_responses',
help: 'Number of total subscription responses served by this instance',
labelNames: ['subscriptionType', 'status'] as const
})
apolloSubscriptionMonitoringIsInitialized = true
return {
metricConnectCounter,
metricConnectedClients,
metricSubscriptionTotalOperations,
metricSubscriptionTotalResponses
}
}