@@ -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