metrics-endpoint.test.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { beforeEach, describe, expect, test } from 'bun:test';
  2. import {
  3. incCounter,
  4. observeHistogram,
  5. registerPoolGauges,
  6. renderPrometheus,
  7. resetMetrics,
  8. } from '../src/metrics.js';
  9. describe('metrics', () => {
  10. beforeEach(() => {
  11. resetMetrics();
  12. });
  13. test('renders counters in Prometheus format', () => {
  14. incCounter('test_counter', { label: 'a' });
  15. incCounter('test_counter', { label: 'a' });
  16. incCounter('test_counter', { label: 'b' });
  17. const out = renderPrometheus();
  18. expect(out).toContain('test_counter{label="a"} 2');
  19. expect(out).toContain('test_counter{label="b"} 1');
  20. expect(out).toContain('# TYPE test_counter counter');
  21. });
  22. test('renders histogram with buckets', () => {
  23. observeHistogram('test_histogram', 5);
  24. observeHistogram('test_histogram', 25);
  25. observeHistogram('test_histogram', 150);
  26. const out = renderPrometheus();
  27. expect(out).toContain('test_histogram_bucket{le="10"} 1');
  28. expect(out).toContain('test_histogram_bucket{le="50"} 2');
  29. expect(out).toContain('test_histogram_bucket{le="200"} 3');
  30. expect(out).toContain('test_histogram_bucket{le="+Inf"} 3');
  31. expect(out).toMatch(/test_histogram_count\s+3/);
  32. expect(out).toMatch(/test_histogram_sum\s+180/);
  33. expect(out).toContain('# TYPE test_histogram histogram');
  34. });
  35. test('exposes pool gauges from the registered provider', () => {
  36. const fakePool = {
  37. describeForMetrics: () => ({
  38. isolatesByState: { ready: 2, in_flight: 1, spawning: 0, retiring: 0, dead: 0 },
  39. poolSize: 3,
  40. }),
  41. };
  42. registerPoolGauges(fakePool);
  43. const out = renderPrometheus();
  44. expect(out).toContain('# TYPE briven_runtime_pool_size gauge');
  45. expect(out).toContain('briven_runtime_pool_size 3');
  46. expect(out).toContain('briven_runtime_isolates_by_state{state="ready"} 2');
  47. expect(out).toContain('briven_runtime_isolates_by_state{state="in_flight"} 1');
  48. });
  49. });