Skip to main content
Glama

LacyLights MCP Server

by bbernstein
analyze-ofl-modes.js3.7 kB
const fs = require('fs'); const path = require('path'); const OFL_PATH = '../open-fixture-library/fixtures'; let totalFixtures = 0; let totalModes = 0; let modeDistribution = {}; let maxModes = {count: 0, fixture: '', manufacturer: ''}; let exampleModes = []; const manufacturers = JSON.parse(fs.readFileSync(path.join(OFL_PATH, 'manufacturers.json'))); for (const manufacturer in manufacturers) { const manufacturerDir = path.join(OFL_PATH, manufacturer); if (fs.existsSync(manufacturerDir)) { const files = fs.readdirSync(manufacturerDir).filter(f => f.endsWith('.json')); for (const file of files) { const fixture = JSON.parse(fs.readFileSync(path.join(manufacturerDir, file))); if (fixture.modes) { totalFixtures++; const modeCount = fixture.modes.length; totalModes += modeCount; modeDistribution[modeCount] = (modeDistribution[modeCount] || 0) + 1; if (modeCount > maxModes.count) { maxModes = {count: modeCount, fixture: file.replace('.json',''), manufacturer}; } // Collect examples of fixtures with many modes if (modeCount >= 8 && exampleModes.length < 5) { exampleModes.push({ manufacturer, fixture: file.replace('.json',''), modeCount, modes: fixture.modes.map(m => m.name || m.shortName) }); } } } } } console.log('=== OPEN FIXTURE LIBRARY MODE STATISTICS ===\n'); console.log('Total Fixtures:', totalFixtures); console.log('Total Test Cases (Fixture×Mode combinations):', totalModes); console.log('Average Modes per Fixture:', (totalModes/totalFixtures).toFixed(2)); console.log('Max Modes in Single Fixture:', maxModes.count, `(${maxModes.manufacturer}/${maxModes.fixture})`); console.log('\n=== MODE DISTRIBUTION ==='); Object.keys(modeDistribution).sort((a,b) => parseInt(a)-parseInt(b)).forEach(count => { const percentage = ((modeDistribution[count] / totalFixtures) * 100).toFixed(1); const bar = '█'.repeat(Math.floor(percentage/2)); console.log(` ${count.padStart(2)} mode(s): ${modeDistribution[count].toString().padStart(3)} fixtures (${percentage.padStart(5)}%) ${bar}`); }); // Calculate test complexity const fixturesWithManyModes = Object.entries(modeDistribution) .filter(([count]) => parseInt(count) >= 5) .reduce((sum, [_, fixtureCount]) => sum + fixtureCount, 0); console.log('\n=== TEST COMPLEXITY ==='); console.log(`Fixtures with 1 mode: ${modeDistribution[1] || 0} (${((modeDistribution[1] || 0) / totalFixtures * 100).toFixed(1)}%)`); console.log(`Fixtures with 2-4 modes: ${ ((modeDistribution[2] || 0) + (modeDistribution[3] || 0) + (modeDistribution[4] || 0))} (${ (((modeDistribution[2] || 0) + (modeDistribution[3] || 0) + (modeDistribution[4] || 0)) / totalFixtures * 100).toFixed(1)}%)`); console.log(`Fixtures with 5+ modes: ${fixturesWithManyModes} (${(fixturesWithManyModes / totalFixtures * 100).toFixed(1)}%)`); console.log('\n=== EXAMPLES OF HIGH-MODE FIXTURES ==='); exampleModes.forEach(ex => { console.log(`\n${ex.manufacturer}/${ex.fixture} (${ex.modeCount} modes):`); ex.modes.forEach((mode, i) => console.log(` ${(i+1).toString().padStart(2)}. ${mode}`)); }); // Estimate test execution time const avgTimePerTest = 0.1; // 100ms per test (conservative estimate) const totalTestTime = totalModes * avgTimePerTest; console.log('\n=== TEST EXECUTION ESTIMATE ==='); console.log(`Estimated time per test: ${avgTimePerTest}s`); console.log(`Total test execution time: ${(totalTestTime/60).toFixed(1)} minutes`); console.log(`With parallel execution (4 workers): ${(totalTestTime/60/4).toFixed(1)} minutes`);

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bbernstein/lacylights-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server