@@ -131952,6 +131952,56 @@ title Editor Usage
131952131952        .join('\n')}
131953131953\`\`\`\n`;
131954131954};
131955+ const job_summary_generateXyChart = (data, title, yAxisTitle, dataForBar, dataForLine, maxData) => {
131956+     return `\n\`\`\`mermaid
131957+ ---
131958+ config:
131959+     xyChart:
131960+         width: ${data.length * 45}
131961+         height: 500
131962+         xAxis:
131963+             labelPadding: 20
131964+     themeVariables:
131965+         xyChart:
131966+             backgroundColor: "transparent"
131967+ ---
131968+ xychart-beta
131969+   title "${title}"
131970+   x-axis [${data.map((day) => `"${job_summary_dateFormat(day.date, { month: '2-digit', day: '2-digit' })}"`).join(', ')}]
131971+   y-axis "${yAxisTitle}" 0 --> ${maxData}
131972+   bar [${data.map(dataForBar).map(v => isFinite(v) ? v.toFixed(3) : '0.000').join(', ')}]
131973+   line [${data.map(dataForLine).map(v => isFinite(v) ? v.toFixed(3) : '0.000').join(', ')}]
131974+ \`\`\`\n`;
131975+ };
131976+ const job_summary_getXyChartAcceptanceRate = (data) => {
131977+     const maxAcceptances = Math.max(...data.map((day) => day.copilot_ide_code_completions?.editors?.reduce((sum, editor) => sum + (editor.models?.reduce((mSum, model) => mSum + (model.languages?.reduce((lSum, lang) => lSum + (lang.total_code_acceptances || 0), 0) || 0), 0) || 0), 0) || 0)) + 10;
131978+     return job_summary_generateXyChart(data, "Completion Accepts & Acceptance Rate", "Acceptances", (day) => day.copilot_ide_code_completions?.editors?.reduce((sum, editor) => sum + (editor.models?.reduce((mSum, model) => mSum + (model.languages?.reduce((lSum, lang) => lSum + (lang.total_code_acceptances || 0), 0) || 0), 0) || 0), 0) || 0, (day) => {
131979+         const accepts = day.copilot_ide_code_completions?.editors?.reduce((sum, editor) => sum + (editor.models?.reduce((mSum, model) => mSum + (model.languages?.reduce((lSum, lang) => lSum + (lang.total_code_acceptances || 0), 0) || 0), 0) || 0), 0) || 0;
131980+         const suggestions = day.copilot_ide_code_completions?.editors?.reduce((sum, editor) => sum + (editor.models?.reduce((mSum, model) => mSum + (model.languages?.reduce((lSum, lang) => lSum + (lang.total_code_suggestions || 0), 0) || 0), 0) || 0), 0) || 0;
131981+         return ((accepts / suggestions) * maxAcceptances) || 0;
131982+     }, maxAcceptances);
131983+ };
131984+ const job_summary_getXyChartDailyActiveUsers = (data) => {
131985+     const maxActiveUsers = Math.max(...data.map((day) => getTotalEngagedUsers(day))) + 10;
131986+     return `\n\`\`\`mermaid
131987+ ---
131988+ config:
131989+     xyChart:
131990+         width: ${data.length * 45}
131991+         height: 500
131992+         xAxis:
131993+             labelPadding: 20
131994+     themeVariables:
131995+         xyChart:
131996+             backgroundColor: "transparent"
131997+ ---
131998+ xychart-beta
131999+   title "Daily Active Users"
132000+   x-axis [${data.map((day) => `"${job_summary_dateFormat(day.date, { month: '2-digit', day: '2-digit' })}"`).join(', ')}]
132001+   y-axis "Active Users" 0 --> ${maxActiveUsers}
132002+   line [${data.map((day) => getTotalEngagedUsers(day)).join(', ')}]
132003+ \`\`\`\n`;
132004+ };
131955132005const job_summary_createJobSummaryUsage = (data, name) => {
131956132006    const languageMetrics = groupLanguageMetrics(data);
131957132007    const editorMetrics = groupEditorMetrics(data);
@@ -131974,10 +132024,12 @@ const job_summary_createJobSummaryUsage = (data, name) => {
131974132024        `Total Chat Interactions: ${totalChatTurns.toLocaleString()}`,
131975132025        `Most Active Day: ${job_summary_dateFormat(mostActiveDay.date)} (${getTotalEngagedUsers(mostActiveDay)} active users)`
131976132026    ])
131977-         .addRaw(job_summary_getPieChartLanguageUsage(languageMetrics))
132027+         .addRaw(job_summary_getXyChartAcceptanceRate(data))
132028+         .addRaw(job_summary_getXyChartDailyActiveUsers(data))
131978132029        .addHeading('Language Usage')
131979-         .addRaw(job_summary_getPieChartEditorUsage(editorMetrics))
131980-         .addHeading('Editor Usage');
132030+         .addRaw(job_summary_getPieChartLanguageUsage(languageMetrics))
132031+         .addHeading('Editor Usage')
132032+         .addRaw(job_summary_getPieChartEditorUsage(editorMetrics));
131981132033};
131982132034const getTotalEngagedUsers = (day) => {
131983132035    return day.copilot_ide_code_completions?.editors?.reduce((sum, editor) => sum + (editor.total_engaged_users ?? 0), 0) || 0;
0 commit comments