@@ -131952,6 +131952,56 @@ title Editor Usage
131952
131952
.join('\n')}
131953
131953
\`\`\`\n`;
131954
131954
};
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
+ };
131955
132005
const job_summary_createJobSummaryUsage = (data, name) => {
131956
132006
const languageMetrics = groupLanguageMetrics(data);
131957
132007
const editorMetrics = groupEditorMetrics(data);
@@ -131974,10 +132024,12 @@ const job_summary_createJobSummaryUsage = (data, name) => {
131974
132024
`Total Chat Interactions: ${totalChatTurns.toLocaleString()}`,
131975
132025
`Most Active Day: ${job_summary_dateFormat(mostActiveDay.date)} (${getTotalEngagedUsers(mostActiveDay)} active users)`
131976
132026
])
131977
- .addRaw(job_summary_getPieChartLanguageUsage(languageMetrics))
132027
+ .addRaw(job_summary_getXyChartAcceptanceRate(data))
132028
+ .addRaw(job_summary_getXyChartDailyActiveUsers(data))
131978
132029
.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));
131981
132033
};
131982
132034
const getTotalEngagedUsers = (day) => {
131983
132035
return day.copilot_ide_code_completions?.editors?.reduce((sum, editor) => sum + (editor.total_engaged_users ?? 0), 0) || 0;
0 commit comments