@@ -9,6 +9,7 @@ import * as utils from './lib/utils';
99import { Worker } from './lib/worker' ;
1010import HawkCatcher from '@hawk.so/nodejs' ;
1111import * as dotenv from 'dotenv' ;
12+ import { startMetricsPushing } from './lib/metrics' ;
1213
1314dotenv . config ( ) ;
1415
@@ -57,19 +58,17 @@ class WorkerRunner {
5758 . then ( ( workerConstructors ) => {
5859 this . constructWorkers ( workerConstructors ) ;
5960 } )
60- // .then(() => {
61- // try {
62- // this.startMetrics();
63- // } catch (e) {
64- // HawkCatcher.send(e);
65- // console.error(`Metrics not started: ${e}`);
66- // }
67- //
68- // return Promise.resolve();
69- // })
7061 . then ( ( ) => {
7162 return this . startWorkers ( ) ;
7263 } )
64+ . then ( ( ) => {
65+ try {
66+ this . startMetrics ( ) ;
67+ } catch ( e ) {
68+ HawkCatcher . send ( e ) ;
69+ console . error ( `Metrics not started: ${ e } ` ) ;
70+ }
71+ } )
7372 . then ( ( ) => {
7473 this . observeProcess ( ) ;
7574 } )
@@ -82,67 +81,15 @@ class WorkerRunner {
8281 /**
8382 * Run metrics exporter
8483 */
85- // private startMetrics(): void {
86- // if (!process.env.PROMETHEUS_PUSHGATEWAY_URL) {
87- // return;
88- // }
89- //
90- // const PUSH_INTERVAL = parseInt(process.env.PROMETHEUS_PUSHGATEWAY_INTERVAL);
91- //
92- // if (isNaN(PUSH_INTERVAL)) {
93- // throw new Error('PROMETHEUS_PUSHGATEWAY_INTERVAL is invalid or not set');
94- // }
95- //
96- // const collectDefaultMetrics = promClient.collectDefaultMetrics;
97- // const Registry = promClient.Registry;
98- //
99- // const register = new Registry();
100- // const startGcStats = gcStats(register);
101- //
102- // const hostname = os.hostname();
103- //
104- // const ID_SIZE = 5;
105- // const id = nanoid(ID_SIZE);
106- //
107- // // eslint-disable-next-line node/no-deprecated-api
108- // const instance = url.parse(process.env.PROMETHEUS_PUSHGATEWAY_URL).host;
109- //
110- // // Initialize metrics for workers
111- // this.workers.forEach((worker) => {
112- // // worker.initMetrics();
113- // worker.getMetrics().forEach((metric: promClient.Counter<string>) => register.registerMetric(metric));
114- // });
115- //
116- // collectDefaultMetrics({ register });
117- // startGcStats();
118- //
119- // this.gateway = new promClient.Pushgateway(process.env.PROMETHEUS_PUSHGATEWAY_URL, null, register);
120- //
121- // console.log(`Start pushing metrics to ${process.env.PROMETHEUS_PUSHGATEWAY_URL}`);
122- //
123- // // Pushing metrics to the pushgateway every PUSH_INTERVAL
124- // this.pushIntervalNumber = setInterval(() => {
125- // this.workers.forEach((worker) => {
126- // if (!this.gateway || !instance) {
127- // return;
128- // }
129- // // Use pushAdd not to overwrite previous metrics
130- // this.gateway.pushAdd({
131- // jobName: 'workers',
132- // groupings: {
133- // worker: worker.type.replace('/', '_'),
134- // host: hostname,
135- // id,
136- // },
137- // }, (err?: Error) => {
138- // if (err) {
139- // HawkCatcher.send(err);
140- // console.log(`Error of pushing metrics to gateway: ${err}`);
141- // }
142- // });
143- // });
144- // }, PUSH_INTERVAL);
145- // }
84+ private startMetrics ( ) : void {
85+ if ( ! process . env . PROMETHEUS_PUSHGATEWAY_URL ) {
86+ return ;
87+ }
88+
89+ this . workers . forEach ( ( worker ) => {
90+ startMetricsPushing ( worker . type . replace ( '/' , '_' ) ) ;
91+ } ) ;
92+ }
14693
14794 /**
14895 * Dynamically loads workers through the yarn workspaces
0 commit comments