@@ -42,6 +42,7 @@ export interface ExporterConfig {
42
42
43
43
export class PrometheusExporter extends MetricReader {
44
44
private readonly _abortController : AbortController ;
45
+ private readonly _server : Deno . HttpServer ;
45
46
46
47
// This will be required when histogram is implemented. Leaving here so it is not forgotten
47
48
// Histogram cannot have a attribute named 'le'
@@ -68,29 +69,32 @@ export class PrometheusExporter extends MetricReader {
68
69
this . _abortController = new AbortController ( ) ;
69
70
const { signal } = this . _abortController ;
70
71
71
- Deno . serve ( { hostname, port, signal, onError } , async ( request ) => {
72
- if ( new URL ( request . url ) . pathname !== "/metrics" ) {
73
- return new Response ( "not found" , { status : 404 } ) ;
74
- }
75
-
76
- try {
77
- const { resourceMetrics, errors } = await this . collect ( ) ;
78
- if ( errors . length ) {
79
- amLogger . trace (
80
- "PrometheusExporter: metrics collection errors" ,
81
- ...errors ,
82
- ) ;
72
+ this . _server = Deno . serve (
73
+ { hostname, port, signal, onError } ,
74
+ async ( request ) => {
75
+ if ( new URL ( request . url ) . pathname !== "/metrics" ) {
76
+ return new Response ( "not found" , { status : 404 } ) ;
83
77
}
84
78
85
- return new Response ( serializer . serialize ( resourceMetrics ) , {
86
- headers : HEADERS ,
87
- } ) ;
88
- } catch ( error ) {
89
- return new Response ( `# failed to export metrics: ${ error } ` , {
90
- headers : HEADERS ,
91
- } ) ;
92
- }
93
- } ) ;
79
+ try {
80
+ const { resourceMetrics, errors } = await this . collect ( ) ;
81
+ if ( errors . length ) {
82
+ amLogger . trace (
83
+ "PrometheusExporter: metrics collection errors" ,
84
+ ...errors ,
85
+ ) ;
86
+ }
87
+
88
+ return new Response ( serializer . serialize ( resourceMetrics ) , {
89
+ headers : HEADERS ,
90
+ } ) ;
91
+ } catch ( error ) {
92
+ return new Response ( `# failed to export metrics: ${ error } ` , {
93
+ headers : HEADERS ,
94
+ } ) ;
95
+ }
96
+ } ,
97
+ ) ;
94
98
95
99
amLogger . debug (
96
100
`Prometheus exporter server started: ${ hostname } :${ port } /metrics` ,
@@ -113,6 +117,6 @@ export class PrometheusExporter extends MetricReader {
113
117
*/
114
118
stopServer ( ) : Promise < void > {
115
119
this . _abortController . abort ( ) ;
116
- return Promise . resolve ( ) ;
120
+ return this . _server . finished ;
117
121
}
118
122
}
0 commit comments