Skip to content

Commit eaf9231

Browse files
committed
Add pagination to Endpoint N-Plus-One insight
1 parent d5dd089 commit eaf9231

File tree

1 file changed

+76
-54
lines changed

1 file changed

+76
-54
lines changed

src/views/codeAnalytics/InsightListView/EndpointInsight.ts

Lines changed: 76 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -332,63 +332,86 @@ export class EPNPlusSpansListViewItemsCreator
332332
public async createListViewItem(
333333
codeObjectsInsight: EPNPlusSpansInsight
334334
): Promise<IListViewItem> {
335-
const spans = codeObjectsInsight.spans.filter((x) => x.internalSpan);
336-
337-
const hints: CodeObjectLocationHints[] =
338-
this._spanLinkResolver.codeHintsFromSpans(
339-
spans.map((x) => x.internalSpan)
340-
);
341-
342-
const spansLocations =
343-
await this._spanLinkResolver.searchForSpansByHints(hints);
335+
const items = [];
336+
for (const span of codeObjectsInsight.spans) {
337+
let result;
338+
if (span.internalSpan) {
339+
const hints: CodeObjectLocationHints[] =
340+
this._spanLinkResolver.codeHintsFromSpans([
341+
span.internalSpan
342+
]);
343+
344+
const spansLocations =
345+
await this._spanLinkResolver.searchForSpansByHints(hints);
346+
347+
result = spansLocations[0];
348+
}
344349

345-
const items: string[] = [];
350+
let fractionSt = "";
351+
const fraction =
352+
codeObjectsInsight.spans.firstOrDefault()?.fraction;
353+
if (fraction < 0.01) {
354+
fractionSt = "minimal";
355+
} else {
356+
fractionSt = `${fraction.toPrecision(1)} of request`;
357+
}
346358

347-
for (let i = 0; i < spansLocations.length; i++) {
348-
const result = spansLocations[i];
349-
const slowSpan = spans[i];
359+
const traceHtml = renderTraceLink(
360+
span.traceId,
361+
codeObjectsInsight.spanInfo?.name ||
362+
codeObjectsInsight.endpointSpan
363+
);
350364

351365
items.push(`
352-
<div class="endpoint-bottleneck-insight" >
353-
<div class="span-name flex-row ${
354-
result ? "link" : ""
355-
}" data-code-uri="${result?.documentUri}" data-code-line="${
356-
result?.range.end.line! + 1
357-
}">
358-
<span class="left-ellipsis">${
359-
slowSpan.internalSpan.displayName
360-
}</span>
366+
<div class="item vertical-spacer">
367+
<div class="endpoint-bottleneck-insight">
368+
<div class="span-name flex-row ${
369+
result ? "link" : ""
370+
}" data-code-uri="${
371+
result?.documentUri
372+
}" data-code-line="${result?.range.end.line! + 1}">
373+
<span class="left-ellipsis">${
374+
span.internalSpan
375+
? span.internalSpan.displayName
376+
: span.clientSpan.displayName
377+
}</span>
378+
</div>
361379
</div>
362-
</div>`);
380+
<div style="margin-top:0.5em" class="flex-row">
381+
${
382+
span.internalSpan
383+
? `
384+
<span class="error-property flex-stretch">
385+
<span class="label">Impact</span>
386+
<span>${fractionSt}</span>
387+
</span>`
388+
: `
389+
<span class="error-property flex-stretch">
390+
<span class="label">Repeats</span>
391+
<span>${span.occurrences}</span>
392+
</span>
393+
`
394+
}
395+
<span class="error-property flex-stretch">
396+
<span class="label">Duration</span>
397+
<span>${span.duration.value} ${
398+
span.duration.unit
399+
}</span>
400+
</span>
401+
${traceHtml}
402+
</div>
403+
</div>
404+
`);
363405
}
364406

365-
const traceHtml = renderTraceLink(
366-
codeObjectsInsight.spans.firstOrDefault()?.traceId,
367-
codeObjectsInsight.spanInfo?.name || codeObjectsInsight.endpointSpan
368-
);
369-
370-
let fractionSt = "";
371-
const fraction = codeObjectsInsight.spans.firstOrDefault()?.fraction;
372-
if (fraction < 0.01) {
373-
fractionSt = "minimal";
374-
} else {
375-
fractionSt = `${fraction.toPrecision(1)} of request`;
376-
}
377-
const statsHtml = `
378-
<div style="margin-top:0.5em" class="flex-row">
379-
380-
<span class="error-property flex-stretch">
381-
<span class="label">Impact</span>
382-
<span>${fractionSt}</span>
383-
</span>
384-
<span class="error-property flex-stretch">
385-
<span class="label">Duration</span>
386-
<span>${
387-
codeObjectsInsight.spans.firstOrDefault().duration.value
388-
} ${
389-
codeObjectsInsight.spans.firstOrDefault().duration.unit
390-
}</span>
391-
</span>
407+
const bodyHtml = /*html*/ `
408+
<div class="pagination-list" data-current-page="1" data-records-per-page="1">
409+
${items.join("")}
410+
<div class="pagination-nav">
411+
<a class="prev">Prev</a>
412+
<a class="next">Next</a>
413+
<span class="page"></span>
414+
</div>
392415
</div>
393416
`;
394417

@@ -401,11 +424,10 @@ export class EPNPlusSpansListViewItemsCreator
401424
},
402425
description: "Check the following locations:",
403426
icon: this._viewUris.image("sql.png"),
404-
body: ` <div>
405-
${items.join("")}
427+
body: `<div>
428+
${bodyHtml}
406429
</div>
407-
${statsHtml}`,
408-
buttons: [traceHtml],
430+
`,
409431
insight: codeObjectsInsight
410432
},
411433
this._viewUris

0 commit comments

Comments
 (0)