1
+ export enum ServerStatusMetric {
2
+ stopped = 0 ,
3
+ started = 1
4
+ }
5
+
6
+ export function getMetrics ( register : MetricsRegister ) {
7
+ return {
8
+ serverStatus : register . gauge ( {
9
+ name : 'libp2p_tcp_server_status' ,
10
+ help : 'Current status of the TCP server'
11
+ } ) ,
12
+
13
+ connections : register . gauge ( {
14
+ name : 'libp2p_tcp_connections_count' ,
15
+ help : 'Current active connections in TCP listener'
16
+ } ) ,
17
+
18
+ listenerErrors : register . gauge < { error : string } > ( {
19
+ name : 'libp2p_tcp_listener_errors_total' ,
20
+ help : 'Total count of TCP listener errors by error type' ,
21
+ labelNames : [ 'error' ]
22
+ } ) ,
23
+
24
+ socketEvents : register . gauge < { event : string } > ( {
25
+ name : 'libp2p_tcp_socket_events' ,
26
+ help : 'Total count of TCP socket events by event' ,
27
+ labelNames : [ 'event' ]
28
+ } )
29
+ }
30
+ }
31
+
32
+ export type Metrics = ReturnType < typeof getMetrics >
33
+
1
34
/* eslint-disable etc/prefer-interface, @typescript-eslint/method-signature-style */
2
35
36
+ export interface MetricsRegister {
37
+ gauge < T extends LabelsGeneric > ( config : GaugeConfig < T > ) : Gauge < T >
38
+ }
39
+
40
+ interface GaugeConfig < Labels extends LabelsGeneric > {
41
+ name : string
42
+ help : string
43
+ labelNames ?: keyof Labels extends string ? Array < keyof Labels > : undefined
44
+ }
45
+
3
46
type LabelsGeneric = Record < string , string | undefined >
4
47
type CollectFn < Labels extends LabelsGeneric > = ( metric : Gauge < Labels > ) => void
5
48
6
49
interface Gauge < Labels extends LabelsGeneric = never > {
7
- // Sorry for this mess, `prom-client` API choices are not great
8
- // If the function signature was `inc(value: number, labels?: Labels)`, this would be simpler
50
+ // Follows `prom-client` API choices, to require less middleware on consumer
9
51
inc ( value ?: number ) : void
10
52
inc ( labels : Labels , value ?: number ) : void
11
53
inc ( arg1 ?: Labels | number , arg2 ?: number ) : void
@@ -20,15 +62,3 @@ interface Gauge<Labels extends LabelsGeneric = never> {
20
62
21
63
addCollect ( collectFn : CollectFn < Labels > ) : void
22
64
}
23
-
24
- export enum ServerStatusMetric {
25
- stopped = 0 ,
26
- started = 1
27
- }
28
-
29
- export interface TcpMetrics {
30
- serverStatus : Gauge
31
- connections : Gauge
32
- listenerErrors : Gauge < { error : string } >
33
- socketEvents : Gauge < { event : string } >
34
- }
0 commit comments