Skip to content

Commit c00d242

Browse files
authored
Merge pull request #6 from github-copilot-community/metrics-tiles
Metrics tiles
2 parents 37f5ef1 + 23017bf commit c00d242

File tree

1 file changed

+84
-8
lines changed

1 file changed

+84
-8
lines changed

src/components/MetricsViewer.vue

Lines changed: 84 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,34 @@
55
<!-- API Error Message -->
66
<div v-if="apiError" class="error-message" v-html="apiError"></div>
77
<div v-if="!apiError">
8+
<div class="tiles-container">
9+
<!-- Acceptance Rate Tile -->
10+
<div class="tile">
11+
<h3>Acceptance Rate Average</h3>
12+
<p>{{ acceptanceRateAverage.toFixed(2) }}%</p>
13+
<p>Over the last 28 days</p>
14+
</div>
15+
16+
<div class="tile">
17+
<h3>Cumulative Number of Suggestions</h3>
18+
<p>{{ cumulativeNumberSuggestions }}</p>
19+
<p>On the last 28 days</p>
20+
</div>
21+
22+
<div class="tile">
23+
<h3>Cumulative Number of Accepted Prompts</h3>
24+
<p>{{ cumulativeNumberAcceptances }}</p>
25+
<p>On the last 28 days</p>
26+
</div>
27+
28+
<div class="tile">
29+
<h3>Cumulative Number of Lines of Code Accepted</h3>
30+
<p>{{ cumulativeNumberLOCAccepted }}</p>
31+
<p>On the last 28 days</p>
32+
</div>
33+
</div>
34+
35+
836
<h2>Acceptance rate (%)</h2>
937
<Bar :data="acceptanceRateChartData" :options="chartOptions" />
1038

@@ -81,6 +109,12 @@ export default defineComponent({
81109
setup() {
82110
const metrics = ref<Metrics[]>([]);
83111
112+
//Tiles
113+
let acceptanceRateAverage = ref(0);
114+
let cumulativeNumberSuggestions = ref(0);
115+
let cumulativeNumberAcceptances = ref(0);
116+
let cumulativeNumberLOCAccepted = ref(0);
117+
84118
//Acceptance Rate
85119
const acceptanceRateChartData = ref<{ labels: string[]; datasets: any[] }>({ labels: [], datasets: [] });
86120
@@ -136,26 +170,45 @@ export default defineComponent({
136170
getGitHubCopilotMetricsApi().then(data => {
137171
metrics.value = data;
138172
173+
cumulativeNumberSuggestions.value = 0;
174+
const cumulativeSuggestionsData = data.map(m => {
175+
cumulativeNumberSuggestions.value += m.total_suggestions_count;
176+
return m.total_suggestions_count;
177+
});
178+
179+
cumulativeNumberAcceptances.value = 0;
180+
const cumulativeAcceptancesData = data.map(m => {
181+
cumulativeNumberAcceptances.value += m.total_acceptances_count;
182+
return m.total_acceptances_count;
183+
});
184+
139185
totalSuggestionsAndAcceptanceChartData.value = {
140186
labels: data.map(m => m.day),
141187
datasets: [
142188
{
143189
label: 'Total Suggestions',
144-
data: data.map(m => m.total_suggestions_count),
190+
data: cumulativeSuggestionsData,
145191
backgroundColor: 'rgba(75, 192, 192, 0.2)',
146192
borderColor: 'rgba(75, 192, 192, 1)'
147193
148194
},
149195
{
150196
label: 'Total Acceptance',
151-
data: data.map(m => m.total_acceptances_count),
197+
data: cumulativeAcceptancesData,
152198
backgroundColor: 'rgba(153, 102, 255, 0.2)',
153199
borderColor: 'rgba(153, 102, 255, 1)'
154200
},
155201
156202
]
157203
};
158204
205+
cumulativeNumberLOCAccepted.value = 0;
206+
const cumulativeLOCAcceptedData = data.map(m => {
207+
const total_lines_accepted = m.total_lines_accepted;
208+
cumulativeNumberLOCAccepted.value += total_lines_accepted;
209+
return total_lines_accepted;
210+
});
211+
159212
chartData.value = {
160213
labels: data.map(m => m.day),
161214
datasets: [
@@ -168,21 +221,28 @@ export default defineComponent({
168221
},
169222
{
170223
label: 'Total Lines Accepted',
171-
data: data.map(m => m.total_lines_accepted),
224+
data: cumulativeLOCAcceptedData,
172225
backgroundColor: 'rgba(153, 102, 255, 0.2)',
173226
borderColor: 'rgba(153, 102, 255, 1)'
174227
}
175228
]
176229
};
177230
231+
let sum = 0;
232+
const acceptanceRates = data.map(m => {
233+
const rate = m.total_lines_suggested !== 0 ? (m.total_lines_accepted / m.total_lines_suggested) * 100 : 0;
234+
sum += rate;
235+
return rate;
236+
});
237+
acceptanceRateAverage.value = sum / data.length;
238+
178239
acceptanceRateChartData.value = {
179-
labels: data
180-
.map(m => m.day),
240+
labels: data.map(m => m.day),
181241
datasets: [
182242
{
183243
type: 'line', // This makes the dataset a line in the chart
184244
label: 'Acceptance Rate',
185-
data: data.map(m => m.total_lines_suggested !== 0 ? (m.total_lines_accepted / m.total_lines_suggested) * 100 : 0),
245+
data: acceptanceRates,
186246
backgroundColor: 'rgba(173, 216, 230, 0.2)', // light blue
187247
borderColor: 'rgba(173, 216, 230, 1)', // darker blue
188248
fill: false // This makes the area under the line not filled
@@ -260,8 +320,8 @@ export default defineComponent({
260320
261321
return { totalSuggestionsAndAcceptanceChartData, chartData,
262322
chartOptions, totalActiveUsersChartData,
263-
totalActiveUsersChartOptions, acceptanceRateChartData, apiError,
264-
languages };
323+
totalActiveUsersChartOptions, acceptanceRateChartData, apiError, acceptanceRateAverage, cumulativeNumberSuggestions,
324+
cumulativeNumberAcceptances, cumulativeNumberLOCAccepted, languages };
265325
},
266326
267327
@@ -277,4 +337,20 @@ export default defineComponent({
277337
margin-left: auto;
278338
margin-right: auto;
279339
}
340+
341+
.tiles-container {
342+
display: flex;
343+
justify-content: flex-start;
344+
flex-wrap: wrap;
345+
}
346+
347+
.tile {
348+
border: 1px solid #ccc;
349+
box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.1),
350+
-3px -3px 5px rgba(255, 255, 255, 0.7);
351+
padding: 20px;
352+
border-radius: 10px;
353+
width: 20%;
354+
margin: 1%;
355+
}
280356
</style>

0 commit comments

Comments
 (0)