PHpullh
학습 라이브러리/AI Prompts/콘텐츠 품질 대시보드 스크립트

AI PROMPTS · 인프라 & 자동화

콘텐츠 품질 대시보드 스크립트

항목 수, 카테고리 분포, 난이도 분포, 코드 길이 통계를 출력합니다.

인프라 & 자동화

핵심 설명

항목 수, 카테고리 분포, 난이도 분포, 코드 길이 통계를 출력합니다.

Node.js 18+

// scripts/dashboard.js
// 사용법: node scripts/dashboard.js

const vm  = require('vm');
const fs  = require('fs');

const LANGS = ['kotlin','python','go','java'];

console.log('\n╔═══════════════════════════════════════╗');
console.log('║      pullh 콘텐츠 현황 대시보드      ║');
console.log('╚═══════════════════════════════════════╝\n');

let grandTotal = 0;

for (const lang of LANGS) {
  const ctx  = { window: { DATA: {} } };
  vm.runInNewContext(fs.readFileSync(`data/${lang}.js`,'utf8'), ctx);
  const items = ctx.window.DATA[lang]?.items || [];
  grandTotal += items.length;

  // 카테고리 분포
  const catDist = {};
  items.forEach(i => catDist[i.cat] = (catDist[i.cat]||0) + 1);

  // 난이도 분포
  const diffDist = { b:0, i:0, a:0 };
  items.forEach(i => diffDist[i.diff] = (diffDist[i.diff]||0) + 1);

  // 코드 길이 통계
  const codeLens = items.map(i =>
    (i.code||'').replace(/<[^>]+>/g,'').length
  );
  const avgLen = Math.round(codeLens.reduce((s,n)=>s+n,0)/codeLens.length);
  const maxLen = Math.max(...codeLens);

  console.log(`📘 ${lang.toUpperCase().padEnd(8)} (${items.length}개)`);
  console.log(`   난이도: B:${diffDist.b} I:${diffDist.i} A:${diffDist.a}`);
  console.log(`   코드 길이: 평균 ${avgLen}자, 최대 ${maxLen}자`);
  console.log(`   카테고리:`, Object.entries(catDist)
    .sort((a,b)=>b[1]-a[1])
    .slice(0,5)
    .map(([k,v])=>`${k}(${v})`)
    .join(', '));
  console.log();
}

// AI/Vibe 통계
try {
  const ctx  = { window: { DATA: {} } };
  vm.runInNewContext(fs.readFileSync('data/ai-vibe.js','utf8'), ctx);
  const aiItems   = ctx.window.DATA.ai?.items   || [];
  const vibeItems = ctx.window.DATA.vibe?.items || [];
  console.log(`🤖 AI 필수 지식: ${aiItems.length}개`);
  console.log(`🎸 바이브 팁:     ${vibeItems.length}개`);
  grandTotal += aiItems.length + vibeItems.length;
} catch(e) {}

console.log(`\n──────────────────────────────────────────`);
console.log(`총 콘텐츠: ${grandTotal}개 항목`);
console.log(`──────────────────────────────────────────`);