Ctrl K
ComunidadGuías…

stable-diffusion-cpp/metrics-exporter.test.js

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import assert from 'node:assert/strict';
import test from 'node:test';

import { buildMetricsLines, escapeLabelValue, fetchModelsList, queryManagerStatus } from './metrics-exporter.js';

test('escapeLabelValue escapes backslashes, quotes, and newlines', () => {
  assert.equal(escapeLabelValue('a"b\\c\nd'), 'a\\"b\\\\c\\nd');
});

test('queryManagerStatus returns parsed status when the manager responds', async () => {
  const status = await queryManagerStatus((url) => {
    assert.equal(url, 'http://sd-manager:8000/status');
    return new Response(JSON.stringify({ active: false, activeProxyRequests: 2, lastActivityAt: 1000 }), {
      status: 200,
    });
  });

  assert.deepEqual(status, { active: false, activeProxyRequests: 2, lastActivityAt: 1000, reachable: true });
});

test('queryManagerStatus falls back to active/unreachable when the manager errors', async () => {
  const status = await queryManagerStatus(() => {
    throw new Error('connection refused');
  });

  assert.deepEqual(status, { active: true, activeProxyRequests: 0, lastActivityAt: 0, reachable: false });
});

test('fetchModelsList normalizes the /v1/models payload', async () => {
  const result = await fetchModelsList((url) => {
    assert.equal(url, 'http://stable-diffusion-cpp:8000/v1/models');
    return new Response(JSON.stringify({ data: [{ id: 'ideogram-4' }, { id: 'ideogram-4' }, { id: '' }] }), {
      status: 200,
    });
  });

  assert.deepEqual(result, { models: [{ id: 'ideogram-4' }], reachable: true });
});

test('fetchModelsList reports unreachable when sd-server errors', async () => {
  const result = await fetchModelsList(() => {
    throw new Error('connection refused');
  });

  assert.deepEqual(result, { models: [], reachable: false });
});

test('buildMetricsLines reports idle only when the manager is reachable and inactive', () => {
  const lines = buildMetricsLines(
    { active: false, activeProxyRequests: 0, lastActivityAt: 2000, reachable: true },
    { models: [{ id: 'ideogram-4' }], reachable: true }
  );

  assert.ok(lines.includes('sd_metrics_exporter_idle 1'));
  assert.ok(lines.includes('sd_metrics_exporter_server_up 1'));
  assert.ok(lines.includes('sd_metrics_exporter_manager_up 1'));
  assert.ok(lines.includes('sd_metrics_exporter_active_requests 0'));
  assert.ok(lines.includes('sd_metrics_exporter_last_activity_timestamp_seconds 2'));
  assert.ok(lines.includes('sd_metrics_exporter_discovered_models 1'));
  assert.ok(lines.includes('sd_metrics_exporter_model_available{model="ideogram-4"} 1'));
});

test('buildMetricsLines never reports idle while requests are in flight', () => {
  const lines = buildMetricsLines(
    { active: true, activeProxyRequests: 3, lastActivityAt: 5000, reachable: true },
    { models: [], reachable: true }
  );

  assert.ok(lines.includes('sd_metrics_exporter_idle 0'));
  assert.ok(lines.includes('sd_metrics_exporter_active_requests 3'));
});

test('buildMetricsLines is not idle when the manager is unreachable', () => {
  const lines = buildMetricsLines(
    { active: true, activeProxyRequests: 0, lastActivityAt: 0, reachable: false },
    { models: [], reachable: false }
  );

  assert.ok(lines.includes('sd_metrics_exporter_idle 0'));
  assert.ok(lines.includes('sd_metrics_exporter_manager_up 0'));
  assert.ok(lines.includes('sd_metrics_exporter_server_up 0'));
});