diff --git a/src/assets/img/technologies/HTTPDARK.png b/src/assets/img/technologies/HTTPDARK.png index 917a85ec..71a12772 100644 Binary files a/src/assets/img/technologies/HTTPDARK.png and b/src/assets/img/technologies/HTTPDARK.png differ diff --git a/src/assets/img/technologies/HTTPS.png b/src/assets/img/technologies/HTTPS.png index 5a0cad4d..80757120 100644 Binary files a/src/assets/img/technologies/HTTPS.png and b/src/assets/img/technologies/HTTPS.png differ diff --git a/src/hooks/data.ts b/src/hooks/data.ts index 73eef8d1..1656122f 100644 --- a/src/hooks/data.ts +++ b/src/hooks/data.ts @@ -37,6 +37,7 @@ export enum Calculations { PercentageAvg = "percentageAvg", ApdexAvg = "apdexAvg", SecondToDay = "secondToDay", + NanosecondToMillisecond = "nanosecondToMillisecond", } export enum sizeEnum { XS = "XS", diff --git a/src/hooks/useProcessor.ts b/src/hooks/useProcessor.ts index dea25185..55f2edc7 100644 --- a/src/hooks/useProcessor.ts +++ b/src/hooks/useProcessor.ts @@ -397,7 +397,7 @@ export function aggregation( data = (val / 1024 / 1024 / 1024).toFixed(2); break; case Calculations.Apdex: - data = val / 10000; + data = (val / 10000).toFixed(2); break; case Calculations.ConvertSeconds: data = dayjs(val * 1000).format("YYYY-MM-DD HH:mm:ss"); @@ -414,6 +414,9 @@ export function aggregation( case Calculations.SecondToDay: data = (val / 86400).toFixed(2); break; + case Calculations.NanosecondToMillisecond: + data = (val / 1000 / 1000).toFixed(2); + break; default: data; break; diff --git a/src/views/dashboard/configuration/widget/AssociateOptions.vue b/src/views/dashboard/configuration/widget/AssociateOptions.vue index 967bc337..765baa95 100644 --- a/src/views/dashboard/configuration/widget/AssociateOptions.vue +++ b/src/views/dashboard/configuration/widget/AssociateOptions.vue @@ -40,15 +40,16 @@ const widgetIds = ref( associate.map((d: { widgetId: string }) => d.widgetId) ); const widgets: any = computed(() => { - const all = getDashboard(dashboardStore.currentDashboard).widgets; - const items = all.filter((d: any) => { + const widgetList = getDashboard(dashboardStore.currentDashboard).widgets; + const items = []; + for (const d of widgetList) { const isLinear = ["Bar", "Line", "Area"].includes( (d.graph && d.graph.type) || "" ); if (isLinear && d.id && dashboardStore.selectedGrid.id !== d.id) { - return { value: d.id, label: (d.widget && d.widget.name) || d.id }; + items.push({ value: d.id, label: (d.widget && d.widget.name) || d.id }); } - }); + } return items; }); function updateWidgetConfig(options: Option[]) { diff --git a/src/views/dashboard/controls/NetworkProfiling.vue b/src/views/dashboard/controls/NetworkProfiling.vue index d5dfd490..5dc6ab59 100644 --- a/src/views/dashboard/controls/NetworkProfiling.vue +++ b/src/views/dashboard/controls/NetworkProfiling.vue @@ -30,7 +30,7 @@ limitations under the License. --> {{ t("delete") }} - + @@ -52,7 +59,7 @@ const { t } = useI18n(); } .text { - width: calc(100% - 330px); + width: 100%; text-align: center; margin-top: 30px; } diff --git a/src/views/dashboard/related/network-profiling/components/Graph/linkProcess.ts b/src/views/dashboard/related/network-profiling/components/Graph/linkProcess.ts index df32310d..858e090a 100644 --- a/src/views/dashboard/related/network-profiling/components/Graph/linkProcess.ts +++ b/src/views/dashboard/related/network-profiling/components/Graph/linkProcess.ts @@ -25,18 +25,21 @@ export const linkElement = (graph: any) => { .attr("stroke", "#97B0F8") .attr("d", (d: Call) => { const controlPos = computeControlPoint( - [d.source.x, d.source.y], - [d.target.x, d.target.y], + [d.source.x, d.source.y - 5], + [d.target.x, d.target.y - 5], 0.5 ); if (d.lowerArc) { - controlPos[1] = -controlPos[1]; + controlPos[1] = + Math.abs(controlPos[1]) < 50 + ? -controlPos[1] + 90 + : -controlPos[1] - 10; } return ( "M" + d.source.x + " " + - d.source.y + + (d.source.y - 5) + " " + "Q" + controlPos[0] + @@ -45,7 +48,7 @@ export const linkElement = (graph: any) => { " " + d.target.x + " " + - d.target.y + (d.target.y - 5) ); }); return linkEnter; @@ -53,7 +56,7 @@ export const linkElement = (graph: any) => { export const anchorElement = (graph: any, funcs: any, tip: any) => { const linkEnter = graph .append("g") - .attr("style", "cursor: move;") + .attr("class", "topo-line-anchor") .on("mouseover", function (event: unknown, d: unknown) { tip.html(funcs.tipHtml).show(d, this); }) @@ -63,44 +66,17 @@ export const anchorElement = (graph: any, funcs: any, tip: any) => { .on("click", (event: unknown, d: unknown) => { funcs.handleLinkClick(event, d); }); - linkEnter - .append("text") - .attr("fill", "#444") - .attr("text-anchor", "middle") - .attr("x", (d: Call) => { - const p = getMidpoint(d); - return p[0] + 10; - }) - .attr("y", (d: Call) => { - const p = getMidpoint(d); - return p[1] + 3; - }) - .text((d: Call) => { - const types = [...d.sourceComponents, ...d.targetComponents]; - if (types.includes("tcp")) { - return "TCP"; - } - if (types.includes("https")) { - return "HTTPS"; - } - if (types.includes("http")) { - return "HTTP"; - } - if (types.includes("tls")) { - return "TLS"; - } - }); linkEnter .append("image") .attr("width", 15) .attr("height", 15) .attr("x", (d: Call) => { const p = getMidpoint(d); - return p[0] - 16; + return p[0] - 8; }) .attr("y", (d: Call) => { const p = getMidpoint(d); - return p[1] - 9; + return p[1] - 13; }) .attr("xlink:href", (d: Call) => { const types = [...d.sourceComponents, ...d.targetComponents]; @@ -168,7 +144,8 @@ function getMidpoint(d: Call) { 0.5 ); if (d.lowerArc) { - controlPos[1] = -controlPos[1]; + controlPos[1] = + Math.abs(controlPos[1]) < 50 ? -controlPos[1] + 100 : -controlPos[1] - 10; } const p = quadraticBezier( 0.5, diff --git a/src/views/dashboard/related/network-profiling/components/ProcessTopology.vue b/src/views/dashboard/related/network-profiling/components/ProcessTopology.vue index 6a9b9518..23df6290 100644 --- a/src/views/dashboard/related/network-profiling/components/ProcessTopology.vue +++ b/src/views/dashboard/related/network-profiling/components/ProcessTopology.vue @@ -14,14 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. -->