import { collectDefaultMetrics, register } from 'prom-client';
import http from 'http';

const reqListener = (req: http.IncomingMessage, res: http.ServerResponse) => {
  register.metrics().then((metrics) => {
    res.writeHead(200, { 'Content-Type': register.contentType });
    res.end(metrics);
  }).catch((e) => {
    res.writeHead(500);
    res.end(e.message);
  });
};

export function runPrometheusExporter(port: number) {
  collectDefaultMetrics();

  if (isNaN(port)) {
    throw new Error(`Invalid port: ${process.env.GRIST_PROMCLIENT_PORT}`);
  }
  const server = http.createServer(reqListener);
  server.listen(port, '0.0.0.0');

  console.log(`Prometheus exporter listening on port ${port}.`);
  return server;
}