mirror of
https://github.com/apache/skywalking-booster-ui.git
synced 2025-05-14 17:05:10 +00:00
Merge branch 'apache:main' into main
This commit is contained in:
commit
d3f8ceeccf
@ -23,6 +23,7 @@ export enum TimeType {
|
|||||||
export const Languages = [
|
export const Languages = [
|
||||||
{ label: "English", value: "en" },
|
{ label: "English", value: "en" },
|
||||||
{ label: "Chinese", value: "zh" },
|
{ label: "Chinese", value: "zh" },
|
||||||
|
{ label: "Spanish", value: "es" },
|
||||||
];
|
];
|
||||||
|
|
||||||
export const RoutesMap: { [key: string]: string } = {
|
export const RoutesMap: { [key: string]: string } = {
|
||||||
|
@ -45,6 +45,5 @@ export const Alarm = {
|
|||||||
endTime
|
endTime
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
total
|
|
||||||
}`,
|
}`,
|
||||||
};
|
};
|
||||||
|
@ -75,9 +75,9 @@ export const queryEBPFSchedules = {
|
|||||||
|
|
||||||
export const analysisEBPFResult = {
|
export const analysisEBPFResult = {
|
||||||
variable:
|
variable:
|
||||||
"$scheduleIdList: [ID!]!, $timeRanges: [EBPFProfilingAnalyzeTimeRange!]!",
|
"$scheduleIdList: [ID!]!, $timeRanges: [EBPFProfilingAnalyzeTimeRange!]!, $aggregateType: EBPFProfilingAnalyzeAggregateType",
|
||||||
query: `
|
query: `
|
||||||
analysisEBPFResult: analysisEBPFProfilingResult(scheduleIdList: $scheduleIdList, timeRanges: $timeRanges) {
|
analysisEBPFResult: analysisEBPFProfilingResult(scheduleIdList: $scheduleIdList, timeRanges: $timeRanges, aggregateType: $aggregateType) {
|
||||||
tip
|
tip
|
||||||
trees {
|
trees {
|
||||||
elements {
|
elements {
|
||||||
|
@ -35,6 +35,5 @@ export const FetchEvents = {
|
|||||||
startTime
|
startTime
|
||||||
endTime
|
endTime
|
||||||
}
|
}
|
||||||
total
|
|
||||||
}`,
|
}`,
|
||||||
};
|
};
|
||||||
|
@ -30,7 +30,6 @@ export const QueryBrowserErrorLogs = {
|
|||||||
stack
|
stack
|
||||||
grade
|
grade
|
||||||
}
|
}
|
||||||
total
|
|
||||||
}`,
|
}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -54,7 +53,6 @@ export const QueryServiceLogs = {
|
|||||||
value
|
value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
total
|
|
||||||
}`,
|
}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@ export const Traces = {
|
|||||||
isError
|
isError
|
||||||
traceIds
|
traceIds
|
||||||
}
|
}
|
||||||
total
|
|
||||||
}`,
|
}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ limitations under the License. -->
|
|||||||
<el-icon class="menu-icons" :style="{ marginRight: '12px' }">
|
<el-icon class="menu-icons" :style="{ marginRight: '12px' }">
|
||||||
<Icon size="lg" :iconName="menu.meta.icon" />
|
<Icon size="lg" :iconName="menu.meta.icon" />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
<span :class="isCollapse ? 'collapse' : ''">
|
<span class="title" :class="isCollapse ? 'collapse' : ''">
|
||||||
{{ t(menu.meta.title) }}
|
{{ t(menu.meta.title) }}
|
||||||
</span>
|
</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
@ -57,7 +57,7 @@ limitations under the License. -->
|
|||||||
:to="m.path"
|
:to="m.path"
|
||||||
:exact="m.meta.exact || false"
|
:exact="m.meta.exact || false"
|
||||||
>
|
>
|
||||||
<span>{{ t(m.meta.title) }}</span>
|
<span class="title">{{ t(m.meta.title) }}</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</el-menu-item-group>
|
</el-menu-item-group>
|
||||||
@ -82,7 +82,7 @@ limitations under the License. -->
|
|||||||
:to="menu.children[0].path"
|
:to="menu.children[0].path"
|
||||||
:exact="menu.meta.exact"
|
:exact="menu.meta.exact"
|
||||||
>
|
>
|
||||||
<span>{{ t(menu.meta.title) }}</span>
|
<span class="title">{{ t(menu.meta.title) }}</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
</template>
|
</template>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
@ -208,4 +208,11 @@ span.collapse {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
display: inline-block;
|
||||||
|
max-width: 110px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -17,10 +17,12 @@
|
|||||||
import { createI18n } from "vue-i18n";
|
import { createI18n } from "vue-i18n";
|
||||||
import zh from "./lang/zh";
|
import zh from "./lang/zh";
|
||||||
import en from "./lang/en";
|
import en from "./lang/en";
|
||||||
|
import es from "./lang/es";
|
||||||
|
|
||||||
const messages = {
|
const messages = {
|
||||||
en,
|
en,
|
||||||
zh,
|
zh,
|
||||||
|
es,
|
||||||
};
|
};
|
||||||
|
|
||||||
const savedLanguage = window.localStorage.getItem("language");
|
const savedLanguage = window.localStorage.getItem("language");
|
||||||
|
@ -136,6 +136,7 @@ const msg = {
|
|||||||
targetType: "Target Type",
|
targetType: "Target Type",
|
||||||
ebpfTip: "Don't have a process for profiling",
|
ebpfTip: "Don't have a process for profiling",
|
||||||
processSelect: "Click to select processes",
|
processSelect: "Click to select processes",
|
||||||
|
page: "Page",
|
||||||
hourTip: "Select Hour",
|
hourTip: "Select Hour",
|
||||||
minuteTip: "Select Minute",
|
minuteTip: "Select Minute",
|
||||||
secondTip: "Select Second",
|
secondTip: "Select Second",
|
||||||
|
333
src/locales/lang/es.ts
Normal file
333
src/locales/lang/es.ts
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
const msg = {
|
||||||
|
general: "Servicio General",
|
||||||
|
services: "Servicios",
|
||||||
|
service: "Servicio",
|
||||||
|
traces: "Trazas",
|
||||||
|
metrics: "Métricas",
|
||||||
|
serviceMesh: "Malla de Servicios",
|
||||||
|
infrastructure: "Infraestructura",
|
||||||
|
virtualMachine: "Máquina Virtual",
|
||||||
|
dashboardNew: "Nuevo Panel",
|
||||||
|
dashboardList: "Listado Paneles",
|
||||||
|
logs: "Logs",
|
||||||
|
events: "Eventos",
|
||||||
|
alerts: "Alertas",
|
||||||
|
settings: "Ajustes",
|
||||||
|
dashboards: "Paneles",
|
||||||
|
profiles: "Perfiles",
|
||||||
|
database: "Base de Datos",
|
||||||
|
serviceName: "Nombre Servicio",
|
||||||
|
technologies: "Tecnologías",
|
||||||
|
generalServicePanel: "Panel Servicio General",
|
||||||
|
health: "Salud",
|
||||||
|
groupName: "Nombre Grupo",
|
||||||
|
topologies: "Topologías",
|
||||||
|
dataPanel: "Plano de Datos",
|
||||||
|
controlPanel: "Plano de Control",
|
||||||
|
eventList: "Listado Eventos",
|
||||||
|
newDashboard: "Crear panel nuevo",
|
||||||
|
dashboardEdit: "Editar el panel",
|
||||||
|
edit: "Editar",
|
||||||
|
delete: "Eliminar",
|
||||||
|
confirm: "Confirmar",
|
||||||
|
layer: "Capa",
|
||||||
|
endpoint: "Endpoint",
|
||||||
|
instance: "Instancia",
|
||||||
|
create: "Crear",
|
||||||
|
loading: "Cargando",
|
||||||
|
selectVisualization: "Visualiza tus métricas",
|
||||||
|
visualization: "Visualizaciones",
|
||||||
|
graphStyles: "Estilo de gráficas",
|
||||||
|
widgetOptions: "Opciones widget",
|
||||||
|
standardOptions: "Opciones estandar",
|
||||||
|
max: "Máx",
|
||||||
|
min: "Mín",
|
||||||
|
plus: "Más",
|
||||||
|
minus: "Menoss",
|
||||||
|
multiply: "Multiplcar",
|
||||||
|
divide: "Dividir",
|
||||||
|
convertToMilliseconds: "Convertir Unix Timestamp(milisegundos)",
|
||||||
|
convertToSeconds: "Convertir Unix Timestamp(segundos)",
|
||||||
|
smooth: "Suabe",
|
||||||
|
showSymbol: "Mostrar Símbolo",
|
||||||
|
step: "Paso",
|
||||||
|
showValues: "Mostrar Valores",
|
||||||
|
fontSize: "Tamaño Fuente",
|
||||||
|
showBackground: "Mostrar Fondo",
|
||||||
|
areaOpacity: "Opacidad Área",
|
||||||
|
editGraph: "Editar Opciones",
|
||||||
|
dashboardName: "Selecciona Nombre del Panel",
|
||||||
|
linkDashboard: "Nombre del panel relacionado con llamadas de la topología",
|
||||||
|
linkServerMetrics: "Métricas de servidor relacionadas con llamadas de la topología",
|
||||||
|
linkClientMetrics: "Métricas de cliente relacionadas con llamadas de la topología",
|
||||||
|
nodeDashboard: "Nombre del panel relacionado con nodos de la topología",
|
||||||
|
nodeMetrics: "Mêtricas relacionas con nodos de la topología",
|
||||||
|
instanceDashboard: "Nombre del panel relacionado con instancias de servicio",
|
||||||
|
endpointDashboard: "Nombre del panel relacionado con endpoints",
|
||||||
|
callSettings: "Ajustes Llamada",
|
||||||
|
nodeSettings: "Ajustes Nodo",
|
||||||
|
conditions: "Condiciones",
|
||||||
|
legendSettings: "Ajustes Leyenda",
|
||||||
|
setLegend: "Poner Leyenda",
|
||||||
|
backgroundColors: "Colores Fondo",
|
||||||
|
fontColors: "Colores Fuente",
|
||||||
|
iconTheme: "Tema Iconos",
|
||||||
|
default: "Por Defecto",
|
||||||
|
topSlow: "Top 5 lentos",
|
||||||
|
topChildren: "Top 5 hijos",
|
||||||
|
taskList: "Listado Tareas",
|
||||||
|
sampledTraces: "Trazas Muestreadas",
|
||||||
|
editTab: "Habilitar edición nombre pestanyas",
|
||||||
|
label: "Nombre Servicio",
|
||||||
|
id: "ID Servicio",
|
||||||
|
setRoot: "Ponerlo a raíz",
|
||||||
|
setNormal: "Ponerlo a normal",
|
||||||
|
export: "Exportar Plantilla Panel",
|
||||||
|
import: "Importar Plantilla Panel",
|
||||||
|
yes: "Sí",
|
||||||
|
no: "No",
|
||||||
|
tableHeaderCol1: "Nombre de la primera columna de la tabla",
|
||||||
|
tableHeaderCol2: "Nombre de la segunda columna de la tabla",
|
||||||
|
showXAxis: "Mostrar Eje X",
|
||||||
|
showYAxis: "Mostrar Eje Y",
|
||||||
|
nameError: "El nombre del panel no puede ser duplicado",
|
||||||
|
showGroup: "Mostrar Grupo",
|
||||||
|
noRoot: "Por favor ponga la raíz del panel",
|
||||||
|
noWidget: "Por favor añada widgets.",
|
||||||
|
rename: "Renombrar",
|
||||||
|
deleteTitle: "¿Está seguro que quiere eliminarlo?",
|
||||||
|
rootTitle: "¿Está seguro que quiere establecerlo?",
|
||||||
|
selfObservability: "Autoobservabilidad",
|
||||||
|
satellite: "Satéllite",
|
||||||
|
skyWalkingServer: "Servidor SkyWalking",
|
||||||
|
functions: "Funciones",
|
||||||
|
browser: "Navegador",
|
||||||
|
linux: "Linux",
|
||||||
|
editWarning: "Estás entrando en modo edición",
|
||||||
|
viewWarning: "Estás entrando en modo visualización",
|
||||||
|
virtualDatabase: "Base de Datos Virtual",
|
||||||
|
reloadDashboards: "Recargar Panel",
|
||||||
|
kubernetesService: "Servicio",
|
||||||
|
kubernetesCluster: "Cluster",
|
||||||
|
kubernetes: "Kubernetes",
|
||||||
|
textUrl: "Hipervínculo de Texto",
|
||||||
|
textAlign: "Alineación de Texto",
|
||||||
|
metricLabel: "Etiqueta de Métrica",
|
||||||
|
showUnit: "Mostrar Unidad",
|
||||||
|
noGraph: "Ningún Gráfico",
|
||||||
|
taskId: "ID Tarea",
|
||||||
|
triggerType: "Tipo de Disparador",
|
||||||
|
targetType: "Tipo de Objetivo",
|
||||||
|
ebpfTip: "Le falta el proceso para perfilar",
|
||||||
|
processSelect: "Click para seleccionar proceso",
|
||||||
|
page: "Página",
|
||||||
|
hourTip: "Seleccione Hora",
|
||||||
|
minuteTip: "Seleccione Minuto",
|
||||||
|
secondTip: "Seleccione Segundo",
|
||||||
|
second: "s",
|
||||||
|
yearSuffix: "Año",
|
||||||
|
monthsHead: "Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Set_Oct_Nov_Dic",
|
||||||
|
months: "Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Set_Oct_Nov_Dic",
|
||||||
|
weeks: "Lun_Mar_Mier_Jue_Vie_Sáb_Dom",
|
||||||
|
hello: "Hola",
|
||||||
|
helloMessage: "Bienvenido de vuelta, Apache SkyWalking APM System !",
|
||||||
|
username: "Usuario",
|
||||||
|
password: "Contraseña",
|
||||||
|
title: "Título",
|
||||||
|
width: "Ancho",
|
||||||
|
height: "Alto",
|
||||||
|
dashboard: "Panel",
|
||||||
|
topology: "Topología",
|
||||||
|
trace: "Traza",
|
||||||
|
alarm: "Alarmas",
|
||||||
|
auto: "Auto",
|
||||||
|
reload: "Recargar",
|
||||||
|
version: "Versión",
|
||||||
|
copy: "Copiar",
|
||||||
|
reset: "Resetear",
|
||||||
|
apply: "Aplicar",
|
||||||
|
template: "Plantilla",
|
||||||
|
cancel: "Cancelar",
|
||||||
|
createTab: "Crear Pestanya",
|
||||||
|
tabName: "Nombre de la Pestaña",
|
||||||
|
detectPoint: "Detectar Punto",
|
||||||
|
name: "Nombre",
|
||||||
|
types: "Tipos",
|
||||||
|
all: "Todo",
|
||||||
|
endpoints: "Endpoints",
|
||||||
|
cache: "Cache",
|
||||||
|
serviceinstance: "InstanciaServicio",
|
||||||
|
databaseaccess: "AccesoBaseDeDatos",
|
||||||
|
servicerelation: "RelaciónServicio",
|
||||||
|
serviceinstancerelation: "RelaciónInstanciaServicio",
|
||||||
|
endpointrelation: "RelaciónEndpoint",
|
||||||
|
status: "Estado",
|
||||||
|
endpointName: "Nombre Endpoint",
|
||||||
|
search: "Buscar",
|
||||||
|
clear: "Limpiar",
|
||||||
|
more: "Más",
|
||||||
|
traceID: "ID Traza",
|
||||||
|
range: "Rango",
|
||||||
|
timeRange: "Rango de Tiempo",
|
||||||
|
duration: "Duración",
|
||||||
|
startTime: "Hora Inicio",
|
||||||
|
start: "Incio",
|
||||||
|
spans: "Lapso",
|
||||||
|
spanInfo: "Info Lapso",
|
||||||
|
spanType: "Tipo de Lapso",
|
||||||
|
time: "Tiempo",
|
||||||
|
tags: "Etiquetas",
|
||||||
|
component: "Componente",
|
||||||
|
table: "Tabla",
|
||||||
|
list: "Lista",
|
||||||
|
tree: "Árbol",
|
||||||
|
filterScope: "Alcance de Filtro",
|
||||||
|
searchKeyword: "Palabra Clave",
|
||||||
|
quarterHourCutTip: "Últimos 15 mins",
|
||||||
|
halfHourCutTip: "Últimos 30 mins",
|
||||||
|
hourCutTip: "Última 1 hora",
|
||||||
|
dayCutTip: "Último 1 día",
|
||||||
|
weekCutTip: "Última 1 semana",
|
||||||
|
monthCutTip: "Última 1 mes",
|
||||||
|
serverZone: "Zona Horaria Servidor OAP",
|
||||||
|
exportImage: "Exportar imagen",
|
||||||
|
object: "Objecto",
|
||||||
|
profile: "Perfil",
|
||||||
|
newTask: "Nueva Tarea",
|
||||||
|
monitorTime: "Tiempo Monitorización",
|
||||||
|
monitorDuration: "Duración Monitorización",
|
||||||
|
minThreshold: "Mínn Umbral Duración",
|
||||||
|
dumpPeriod: "Volcar Periodo",
|
||||||
|
createTask: "Crear Tarea",
|
||||||
|
maxSamplingCount: "Máx Cantidad Mostreo",
|
||||||
|
analyze: "Analizar",
|
||||||
|
noData: "Ningún Dato",
|
||||||
|
taskInfo: "Información Tarea",
|
||||||
|
task: "Tarea",
|
||||||
|
operationType: "Tipo Operación",
|
||||||
|
operationTime: "Tiempo Operación",
|
||||||
|
taskView: "Ver Tarea",
|
||||||
|
includeChildren: "Incluir Hijos",
|
||||||
|
excludeChildren: "Excluir Hijos",
|
||||||
|
view: "Ver",
|
||||||
|
timeTips: "Intervalo de tiempo no puede excedir 60 dias",
|
||||||
|
entityType: "Tipo Entidad",
|
||||||
|
maxItemNum: "Máx número artículos",
|
||||||
|
unknownMetrics: "Métrica desconocida",
|
||||||
|
labels: "Etiquetas",
|
||||||
|
aggregation: "Cálculo",
|
||||||
|
unit: "Unidad",
|
||||||
|
labelsIndex: "Subíndice Etiqueta",
|
||||||
|
group: "Grupo Servicio",
|
||||||
|
browserView: "Navegador",
|
||||||
|
sortOrder: "Orden de clasificación",
|
||||||
|
chartType: "Tipo Gráfico",
|
||||||
|
currentDepth: "Profundidad actual",
|
||||||
|
showDepth: "Mostrar Selector Profundidad",
|
||||||
|
defaultDepth: "Profundidad Por Defecto",
|
||||||
|
traceTagsTip: `Solamente etiquetas definidas en core/default/searchableTracesTags pueden ser buscadas.
|
||||||
|
Más información en la página de Vocabulario de Configuración`,
|
||||||
|
logTagsTip: `Solamente etiquetas definidas en core/default/searchableLogsTags pueden ser buscadas.
|
||||||
|
Más información en la página de Vocabulario de Configuración`,
|
||||||
|
alarmTagsTip: `Solamente etiquetas definidas en core/default/searchableAlarmTags pueden ser buscadas.
|
||||||
|
Más información en la página de Vocabulario de Configuración`,
|
||||||
|
tagsLink: "Página de Vocabulario de Configuración",
|
||||||
|
addTag: "Por favor introduzca una etiqueta",
|
||||||
|
log: "Registro de Datos",
|
||||||
|
logCategory: "Categoría Registro de Datos",
|
||||||
|
errorCatalog: "Catálogo de Errores",
|
||||||
|
logDetail: "Detalle Registro de Datos",
|
||||||
|
timeReload: "Aviso: El intervalo de tiempo tiene que ser mayor que 0",
|
||||||
|
errorInfo: "Info Error",
|
||||||
|
stack: "Pila",
|
||||||
|
serviceVersion: "Versión Servicio",
|
||||||
|
errorPage: "Página de Error",
|
||||||
|
category: "Categoría",
|
||||||
|
grade: "Grado",
|
||||||
|
relatedTraceLogs: "Registro de Datos Relacionados",
|
||||||
|
setConditions: "Más Condiciones",
|
||||||
|
metricName: "Seleccionar Nombre Métrica",
|
||||||
|
keywordsOfContent: "Claves de Contenido",
|
||||||
|
excludingKeywordsOfContent: "Excluir Claves de Contenido",
|
||||||
|
return: "Volver",
|
||||||
|
isError: "Error",
|
||||||
|
contentType: "Tipo de Contenido",
|
||||||
|
content: "Contenido",
|
||||||
|
viewLogs: "Ver Registro de Datos",
|
||||||
|
logsTagsTip: `Solamente etiquetas definidas en core/default/searchableLogsTags pueden ser buscadas.
|
||||||
|
Más información en la página de Vocabulario de Configuración`,
|
||||||
|
keywordsOfContentLogTips:
|
||||||
|
"El almacenamiento actual del servidor SkyWalking OAP no lo soporta.",
|
||||||
|
setEvent: "Establecer Evento",
|
||||||
|
viewAttributes: "Ver",
|
||||||
|
serviceEvents: "Eventos Servico",
|
||||||
|
select: "Seleccionar",
|
||||||
|
eventID: "ID Evento",
|
||||||
|
eventName: "Nombre Evento",
|
||||||
|
endTime: "Hora Finalización",
|
||||||
|
instanceEvents: "Eventos Instancia",
|
||||||
|
endpointEvents: "Eventos Endpoint",
|
||||||
|
enableEvents: "Habilitar Eventos",
|
||||||
|
disableEvents: "Deshabilitar Eventos",
|
||||||
|
eventSeries: "Serie de Eventos",
|
||||||
|
eventsType: "Tipo de Evento",
|
||||||
|
eventsMessage: "Mensaje del Evento",
|
||||||
|
eventsParameters: "Parámetro del Evento",
|
||||||
|
eventDetail: "Detalle del Evento",
|
||||||
|
value: "Valor",
|
||||||
|
show: "Mostrar",
|
||||||
|
hide: "Oculatr",
|
||||||
|
statistics: "Estadísticas",
|
||||||
|
message: "Mensaje",
|
||||||
|
tooltipsContent: "Contenido de Información de Herramienta",
|
||||||
|
alarmDetail: "Detalle Alarma",
|
||||||
|
scope: "Alcance",
|
||||||
|
destService: "Servicio Destinación",
|
||||||
|
destServiceInstance: "Instancia Servicio Destinación",
|
||||||
|
destEndpoint: "Endpoint Destinación",
|
||||||
|
eventSource: "Fuente Envento",
|
||||||
|
modalTitle: "Inspección",
|
||||||
|
selectRedirectPage: "Quiere inspeccionar las Trazas or Registros de datos del servicio %s?",
|
||||||
|
logAnalysis: "Lenguaje de Análisis de Registro de Datos",
|
||||||
|
logDataBody: "Contenido del Registro de Datos",
|
||||||
|
addType: "Por favor introduzca un tipo",
|
||||||
|
traceContext: "Registro de datos con contexto de traza",
|
||||||
|
traceSegmentId: "ID Segmento Traza",
|
||||||
|
spanId: "ID Lapso",
|
||||||
|
inputTraceSegmentId: "Por favor introduzca el ID del segmento de la traza",
|
||||||
|
inputSpanId: "Por favor introduzca el ID del lapso",
|
||||||
|
inputTraceId: "Por favor introduzca el ID de la traza",
|
||||||
|
dsl: "Entrada de guión para LAL",
|
||||||
|
logContentType: "Tipo del registro de datos",
|
||||||
|
logRespContent: "Contenido Registro de Datos",
|
||||||
|
analysis: "Análisis",
|
||||||
|
waitLoading: "Cargando",
|
||||||
|
dslEmpty: "Entrada de guión de LAL no puede estar vacio",
|
||||||
|
logContentEmpty: "El contenido del registro de datos no puede estar vacio.",
|
||||||
|
debug: "Debugar",
|
||||||
|
addTraceID: "Por favor introduzca el ID de la traza",
|
||||||
|
addTags: "Por favor introduzaca una etiqueta",
|
||||||
|
addKeywordsOfContent: "Por favor introduzca una clave de contenido",
|
||||||
|
addExcludingKeywordsOfContent: "Por favor introduzca una clave excluyente de contenido",
|
||||||
|
noticeTag: "Por favor presione Intro después de introducir una etiqueta(clave=valor).",
|
||||||
|
conditionNotice:
|
||||||
|
"Aviso: Por favor presione Intro después de introducir una clave de contenido, excluir clave de contenido(clave=valor).",
|
||||||
|
language: "Lenguaje",
|
||||||
|
};
|
||||||
|
export default msg;
|
@ -134,6 +134,7 @@ const msg = {
|
|||||||
targetType: "目标类型",
|
targetType: "目标类型",
|
||||||
processSelect: "点击选择进程",
|
processSelect: "点击选择进程",
|
||||||
ebpfTip: "没有进程可以分析",
|
ebpfTip: "没有进程可以分析",
|
||||||
|
page: "页面",
|
||||||
hourTip: "选择小时",
|
hourTip: "选择小时",
|
||||||
minuteTip: "选择分钟",
|
minuteTip: "选择分钟",
|
||||||
secondTip: "选择秒数",
|
secondTip: "选择秒数",
|
||||||
|
@ -22,7 +22,6 @@ import {
|
|||||||
EBPFTaskList,
|
EBPFTaskList,
|
||||||
AnalyzationTrees,
|
AnalyzationTrees,
|
||||||
} from "@/types/ebpf";
|
} from "@/types/ebpf";
|
||||||
import { Trace, Span } from "@/types/trace";
|
|
||||||
import { store } from "@/store";
|
import { store } from "@/store";
|
||||||
import graphql from "@/graphql";
|
import graphql from "@/graphql";
|
||||||
import { AxiosResponse } from "axios";
|
import { AxiosResponse } from "axios";
|
||||||
@ -35,6 +34,7 @@ interface EbpfStore {
|
|||||||
labels: Option[];
|
labels: Option[];
|
||||||
couldProfiling: boolean;
|
couldProfiling: boolean;
|
||||||
tip: string;
|
tip: string;
|
||||||
|
selectedTask: Recordable<EBPFTaskList>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ebpfStore = defineStore({
|
export const ebpfStore = defineStore({
|
||||||
@ -47,14 +47,18 @@ export const ebpfStore = defineStore({
|
|||||||
labels: [{ value: "", label: "" }],
|
labels: [{ value: "", label: "" }],
|
||||||
couldProfiling: false,
|
couldProfiling: false,
|
||||||
tip: "",
|
tip: "",
|
||||||
|
selectedTask: {},
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
setCurrentSpan(span: Span) {
|
setSelectedTask(task: EBPFTaskList) {
|
||||||
this.currentSpan = span;
|
this.selectedTask = task;
|
||||||
},
|
},
|
||||||
setCurrentSchedule(s: Trace) {
|
setCurrentSchedule(s: EBPFProfilingSchedule) {
|
||||||
this.currentSchedule = s;
|
this.currentSchedule = s;
|
||||||
},
|
},
|
||||||
|
setAnalyzeTrees(tree: AnalyzationTrees[]) {
|
||||||
|
this.analyzeTrees = tree;
|
||||||
|
},
|
||||||
async getCreateTaskData(serviceId: string) {
|
async getCreateTaskData(serviceId: string) {
|
||||||
const res: AxiosResponse = await graphql
|
const res: AxiosResponse = await graphql
|
||||||
.query("getCreateTaskData")
|
.query("getCreateTaskData")
|
||||||
@ -93,7 +97,7 @@ export const ebpfStore = defineStore({
|
|||||||
if (res.data.errors) {
|
if (res.data.errors) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
this.taskList = res.data.data.queryEBPFTasks.reverse() || [];
|
this.taskList = res.data.data.queryEBPFTasks || [];
|
||||||
if (!this.taskList.length) {
|
if (!this.taskList.length) {
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
@ -118,13 +122,14 @@ export const ebpfStore = defineStore({
|
|||||||
this.eBPFSchedules = eBPFSchedules;
|
this.eBPFSchedules = eBPFSchedules;
|
||||||
if (!eBPFSchedules.length) {
|
if (!eBPFSchedules.length) {
|
||||||
this.eBPFSchedules = [];
|
this.eBPFSchedules = [];
|
||||||
}
|
|
||||||
this.analyzeTrees = [];
|
this.analyzeTrees = [];
|
||||||
|
}
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
async getEBPFAnalyze(params: {
|
async getEBPFAnalyze(params: {
|
||||||
scheduleIdList: string[];
|
scheduleIdList: string[];
|
||||||
timeRanges: Array<{ start: number; end: number }>;
|
timeRanges: Array<{ start: number; end: number }>;
|
||||||
|
aggregateType: string;
|
||||||
}) {
|
}) {
|
||||||
if (!params.scheduleIdList.length) {
|
if (!params.scheduleIdList.length) {
|
||||||
return new Promise((resolve) => resolve({}));
|
return new Promise((resolve) => resolve({}));
|
||||||
|
@ -25,7 +25,6 @@ import { useAppStoreWithOut } from "@/store/modules/app";
|
|||||||
interface eventState {
|
interface eventState {
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
events: Event[];
|
events: Event[];
|
||||||
total: number;
|
|
||||||
services: Service[];
|
services: Service[];
|
||||||
instances: Instance[];
|
instances: Instance[];
|
||||||
endpoints: Endpoint[];
|
endpoints: Endpoint[];
|
||||||
@ -37,12 +36,11 @@ export const eventStore = defineStore({
|
|||||||
state: (): eventState => ({
|
state: (): eventState => ({
|
||||||
loading: false,
|
loading: false,
|
||||||
events: [],
|
events: [],
|
||||||
total: 0,
|
|
||||||
services: [{ value: "", label: "All" }],
|
services: [{ value: "", label: "All" }],
|
||||||
instances: [{ value: "", label: "All" }],
|
instances: [{ value: "", label: "All" }],
|
||||||
endpoints: [{ value: "", label: "All" }],
|
endpoints: [{ value: "", label: "All" }],
|
||||||
condition: {
|
condition: {
|
||||||
paging: { pageNum: 1, pageSize: 15, needTotal: true },
|
paging: { pageNum: 1, pageSize: 15 },
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
@ -117,7 +115,6 @@ export const eventStore = defineStore({
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
this.total = res.data.data.fetchEvents.total;
|
|
||||||
}
|
}
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
|
@ -31,7 +31,6 @@ interface LogState {
|
|||||||
selectorStore: any;
|
selectorStore: any;
|
||||||
supportQueryLogsByKeywords: boolean;
|
supportQueryLogsByKeywords: boolean;
|
||||||
logs: any[];
|
logs: any[];
|
||||||
logsTotal: number;
|
|
||||||
loadLogs: boolean;
|
loadLogs: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,12 +42,11 @@ export const logStore = defineStore({
|
|||||||
endpoints: [{ value: "0", label: "All" }],
|
endpoints: [{ value: "0", label: "All" }],
|
||||||
conditions: {
|
conditions: {
|
||||||
queryDuration: useAppStoreWithOut().durationTime,
|
queryDuration: useAppStoreWithOut().durationTime,
|
||||||
paging: { pageNum: 1, pageSize: 15, needTotal: true },
|
paging: { pageNum: 1, pageSize: 15 },
|
||||||
},
|
},
|
||||||
supportQueryLogsByKeywords: true,
|
supportQueryLogsByKeywords: true,
|
||||||
selectorStore: useSelectorStore(),
|
selectorStore: useSelectorStore(),
|
||||||
logs: [],
|
logs: [],
|
||||||
logsTotal: 0,
|
|
||||||
loadLogs: false,
|
loadLogs: false,
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
@ -131,7 +129,6 @@ export const logStore = defineStore({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.logs = res.data.data.queryLogs.logs;
|
this.logs = res.data.data.queryLogs.logs;
|
||||||
this.logsTotal = res.data.data.queryLogs.total;
|
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
async getBrowserLogs() {
|
async getBrowserLogs() {
|
||||||
@ -145,7 +142,6 @@ export const logStore = defineStore({
|
|||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
this.logs = res.data.data.queryBrowserErrorLogs.logs;
|
this.logs = res.data.data.queryBrowserErrorLogs.logs;
|
||||||
this.logsTotal = res.data.data.queryBrowserErrorLogs.total;
|
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
async getLogTagKeys() {
|
async getLogTagKeys() {
|
||||||
|
@ -28,12 +28,10 @@ interface TraceState {
|
|||||||
instances: Instance[];
|
instances: Instance[];
|
||||||
endpoints: Endpoint[];
|
endpoints: Endpoint[];
|
||||||
traceList: Trace[];
|
traceList: Trace[];
|
||||||
traceTotal: number;
|
|
||||||
traceSpans: Span[];
|
traceSpans: Span[];
|
||||||
currentTrace: Trace | any;
|
currentTrace: Trace | any;
|
||||||
conditions: any;
|
conditions: any;
|
||||||
traceSpanLogs: any[];
|
traceSpanLogs: any[];
|
||||||
traceSpanLogsTotal: number;
|
|
||||||
selectorStore: any;
|
selectorStore: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,16 +43,14 @@ export const traceStore = defineStore({
|
|||||||
endpoints: [{ value: "0", label: "All" }],
|
endpoints: [{ value: "0", label: "All" }],
|
||||||
traceList: [],
|
traceList: [],
|
||||||
traceSpans: [],
|
traceSpans: [],
|
||||||
traceTotal: 0,
|
|
||||||
currentTrace: {},
|
currentTrace: {},
|
||||||
conditions: {
|
conditions: {
|
||||||
queryDuration: useAppStoreWithOut().durationTime,
|
queryDuration: useAppStoreWithOut().durationTime,
|
||||||
traceState: "ALL",
|
traceState: "ALL",
|
||||||
queryOrder: "BY_START_TIME",
|
queryOrder: "BY_START_TIME",
|
||||||
paging: { pageNum: 1, pageSize: 15, needTotal: true },
|
paging: { pageNum: 1, pageSize: 20 },
|
||||||
},
|
},
|
||||||
traceSpanLogs: [],
|
traceSpanLogs: [],
|
||||||
traceSpanLogsTotal: 0,
|
|
||||||
selectorStore: useSelectorStore(),
|
selectorStore: useSelectorStore(),
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
@ -115,7 +111,6 @@ export const traceStore = defineStore({
|
|||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
if (!res.data.data.data.traces.length) {
|
if (!res.data.data.data.traces.length) {
|
||||||
this.traceTotal = 0;
|
|
||||||
this.traceList = [];
|
this.traceList = [];
|
||||||
this.setCurrentTrace({});
|
this.setCurrentTrace({});
|
||||||
this.setTraceSpans([]);
|
this.setTraceSpans([]);
|
||||||
@ -128,7 +123,6 @@ export const traceStore = defineStore({
|
|||||||
});
|
});
|
||||||
return d;
|
return d;
|
||||||
});
|
});
|
||||||
this.traceTotal = res.data.data.data.total;
|
|
||||||
this.setCurrentTrace(res.data.data.data.traces[0] || {});
|
this.setCurrentTrace(res.data.data.data.traces[0] || {});
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
@ -148,11 +142,9 @@ export const traceStore = defineStore({
|
|||||||
.params(params);
|
.params(params);
|
||||||
if (res.data.errors) {
|
if (res.data.errors) {
|
||||||
this.traceSpanLogs = [];
|
this.traceSpanLogs = [];
|
||||||
this.traceSpanLogsTotal = 0;
|
|
||||||
return res.data;
|
return res.data;
|
||||||
}
|
}
|
||||||
this.traceSpanLogs = res.data.data.queryLogs.logs || [];
|
this.traceSpanLogs = res.data.data.queryLogs.logs || [];
|
||||||
this.traceSpanLogsTotal = res.data.data.queryLogs.total;
|
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
async getTagKeys() {
|
async getTagKeys() {
|
||||||
|
@ -194,10 +194,11 @@ const setUTCMin = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.label {
|
||||||
width: 160px;
|
width: 180px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #000;
|
color: #000;
|
||||||
|
line-height: 25px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -39,8 +39,8 @@ limitations under the License. -->
|
|||||||
<el-pagination
|
<el-pagination
|
||||||
v-model:currentPage="pageNum"
|
v-model:currentPage="pageNum"
|
||||||
v-model:page-size="pageSize"
|
v-model:page-size="pageSize"
|
||||||
layout="prev, jumper, total, next"
|
layout="prev, pager, next"
|
||||||
:total="alarmStore.total"
|
:total="total"
|
||||||
@current-change="changePage"
|
@current-change="changePage"
|
||||||
:pager-count="5"
|
:pager-count="5"
|
||||||
small
|
small
|
||||||
@ -55,7 +55,7 @@ limitations under the License. -->
|
|||||||
</nav>
|
</nav>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from "vue";
|
import { ref, computed } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import ConditionTags from "@/views/components/ConditionTags.vue";
|
import ConditionTags from "@/views/components/ConditionTags.vue";
|
||||||
import { AlarmOptions } from "./data";
|
import { AlarmOptions } from "./data";
|
||||||
@ -70,6 +70,11 @@ const pageSize = 20;
|
|||||||
const entity = ref<string>("");
|
const entity = ref<string>("");
|
||||||
const keyword = ref<string>("");
|
const keyword = ref<string>("");
|
||||||
const pageNum = ref<number>(1);
|
const pageNum = ref<number>(1);
|
||||||
|
const total = computed(() =>
|
||||||
|
alarmStore.alarms.length === pageSize
|
||||||
|
? pageSize * pageNum.value + 1
|
||||||
|
: pageSize * pageNum.value
|
||||||
|
);
|
||||||
|
|
||||||
refreshAlarms({ pageNum: 1 });
|
refreshAlarms({ pageNum: 1 });
|
||||||
|
|
||||||
@ -79,7 +84,6 @@ async function refreshAlarms(param: { pageNum: number; tagsMap?: any }) {
|
|||||||
paging: {
|
paging: {
|
||||||
pageNum: param.pageNum,
|
pageNum: param.pageNum,
|
||||||
pageSize,
|
pageSize,
|
||||||
needTotal: true,
|
|
||||||
},
|
},
|
||||||
tags: param.tagsMap,
|
tags: param.tagsMap,
|
||||||
};
|
};
|
||||||
|
@ -94,6 +94,8 @@ function setCurrentLog(log: any) {
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid #eee;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.log-header {
|
.log-header {
|
||||||
|
@ -46,11 +46,13 @@ import EBPFStack from "./components/EBPFStack.vue";
|
|||||||
.item {
|
.item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
height: calc(100% - 70px);
|
height: calc(100% - 100px);
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.schedules {
|
.schedules {
|
||||||
height: 60px;
|
height: 90px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
padding-right: 10px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -13,7 +13,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License. -->
|
limitations under the License. -->
|
||||||
<template>
|
<template>
|
||||||
<div class="filters flex-h">
|
<div class="filters">
|
||||||
|
<div class="mb-10 flex-h">
|
||||||
<Selector
|
<Selector
|
||||||
:value="selectedLabels"
|
:value="selectedLabels"
|
||||||
:options="labels"
|
:options="labels"
|
||||||
@ -23,11 +24,22 @@ limitations under the License. -->
|
|||||||
class="inputs mr-10"
|
class="inputs mr-10"
|
||||||
:multiple="true"
|
:multiple="true"
|
||||||
/>
|
/>
|
||||||
<el-button type="primary" size="small">
|
<div class="mr-5 duration" v-if="duration.length">
|
||||||
<span>{{ duration[0] }}</span>
|
<span>{{ duration[0] }}</span>
|
||||||
<span> ~ </span>
|
<span> ~ </span>
|
||||||
<span>{{ duration[1] }}</span>
|
<span>{{ duration[1] }}</span>
|
||||||
</el-button>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex-h">
|
||||||
|
<Selector
|
||||||
|
v-if="ebpfStore.selectedTask.targetType === 'OFF_CPU'"
|
||||||
|
:value="aggregateType"
|
||||||
|
:options="AggregateTypes"
|
||||||
|
size="small"
|
||||||
|
placeholder="Please select a type"
|
||||||
|
@change="changeAggregateType"
|
||||||
|
class="selector mr-10"
|
||||||
|
/>
|
||||||
<el-popover placement="bottom" :width="680" trigger="click">
|
<el-popover placement="bottom" :width="680" trigger="click">
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<el-button type="primary" size="small">
|
<el-button type="primary" size="small">
|
||||||
@ -82,13 +94,14 @@ limitations under the License. -->
|
|||||||
{{ t("analyze") }}
|
{{ t("analyze") }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, watch } from "vue";
|
import { ref, watch } from "vue";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import { Option } from "@/types/app";
|
import { Option } from "@/types/app";
|
||||||
import { TableHeader } from "./data";
|
import { TableHeader, AggregateTypes } from "./data";
|
||||||
import { useEbpfStore } from "@/store/modules/ebpf";
|
import { useEbpfStore } from "@/store/modules/ebpf";
|
||||||
import { EBPFProfilingSchedule, Process } from "@/types/ebpf";
|
import { EBPFProfilingSchedule, Process } from "@/types/ebpf";
|
||||||
import { ElMessage, ElTable } from "element-plus";
|
import { ElMessage, ElTable } from "element-plus";
|
||||||
@ -103,6 +116,7 @@ const processes = ref<Process[]>([]);
|
|||||||
const currentProcesses = ref<Process[]>([]);
|
const currentProcesses = ref<Process[]>([]);
|
||||||
const selectedLabels = ref<string[]>(["0"]);
|
const selectedLabels = ref<string[]>(["0"]);
|
||||||
const searchText = ref<string>("");
|
const searchText = ref<string>("");
|
||||||
|
const aggregateType = ref<string>(AggregateTypes[0].value);
|
||||||
const duration = ref<string[]>([]);
|
const duration = ref<string[]>([]);
|
||||||
const dateFormat = (date: number, pattern = "YYYY-MM-DD HH:mm:ss") =>
|
const dateFormat = (date: number, pattern = "YYYY-MM-DD HH:mm:ss") =>
|
||||||
dayjs(date).format(pattern);
|
dayjs(date).format(pattern);
|
||||||
@ -112,6 +126,11 @@ function changeLabels(opt: any[]) {
|
|||||||
selectedLabels.value = arr;
|
selectedLabels.value = arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function changeAggregateType(opt: any[]) {
|
||||||
|
aggregateType.value = opt[0].value;
|
||||||
|
ebpfStore.setAnalyzeTrees([]);
|
||||||
|
}
|
||||||
|
|
||||||
const handleSelectionChange = (arr: Process[]) => {
|
const handleSelectionChange = (arr: Process[]) => {
|
||||||
selectedProcesses.value = arr.map((d: Process) => d.id);
|
selectedProcesses.value = arr.map((d: Process) => d.id);
|
||||||
};
|
};
|
||||||
@ -152,6 +171,7 @@ async function analyzeEBPF() {
|
|||||||
const res = await ebpfStore.getEBPFAnalyze({
|
const res = await ebpfStore.getEBPFAnalyze({
|
||||||
scheduleIdList,
|
scheduleIdList,
|
||||||
timeRanges,
|
timeRanges,
|
||||||
|
aggregateType: aggregateType.value,
|
||||||
});
|
});
|
||||||
if (res.data.errors) {
|
if (res.data.errors) {
|
||||||
ElMessage.error(res.data.errors);
|
ElMessage.error(res.data.errors);
|
||||||
@ -159,7 +179,7 @@ async function analyzeEBPF() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function visTimeline() {
|
function getSchedules() {
|
||||||
labels.value = [{ label: "All", value: "0" }];
|
labels.value = [{ label: "All", value: "0" }];
|
||||||
selectedLabels.value = ["0"];
|
selectedLabels.value = ["0"];
|
||||||
processes.value = [];
|
processes.value = [];
|
||||||
@ -170,11 +190,16 @@ function visTimeline() {
|
|||||||
processes.value.push(d.process);
|
processes.value.push(d.process);
|
||||||
return [d.startTime / 10000, d.endTime / 10000];
|
return [d.startTime / 10000, d.endTime / 10000];
|
||||||
});
|
});
|
||||||
|
if (ranges.length) {
|
||||||
const arr = ranges.flat(1);
|
const arr = ranges.flat(1);
|
||||||
const min = Math.min(...arr);
|
const min = Math.min(...arr);
|
||||||
const max = Math.max(...arr);
|
const max = Math.max(...arr);
|
||||||
duration.value = [dateFormat(min * 10000), dateFormat(max * 10000)];
|
duration.value = [dateFormat(min * 10000), dateFormat(max * 10000)];
|
||||||
|
} else {
|
||||||
|
duration.value = [];
|
||||||
|
}
|
||||||
searchProcesses(0);
|
searchProcesses(0);
|
||||||
|
analyzeEBPF();
|
||||||
}
|
}
|
||||||
|
|
||||||
function changePage(pageIndex: number) {
|
function changePage(pageIndex: number) {
|
||||||
@ -216,7 +241,7 @@ function searchAttribute(
|
|||||||
watch(
|
watch(
|
||||||
() => ebpfStore.eBPFSchedules,
|
() => ebpfStore.eBPFSchedules,
|
||||||
() => {
|
() => {
|
||||||
visTimeline();
|
getSchedules();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
</script>
|
</script>
|
||||||
@ -235,7 +260,7 @@ watch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
.inputs {
|
.inputs {
|
||||||
width: 300px;
|
width: 350px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-with-search {
|
.input-with-search {
|
||||||
@ -246,4 +271,12 @@ watch(
|
|||||||
.pagination {
|
.pagination {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selector {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.duration {
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -68,12 +68,13 @@ function drawGraph() {
|
|||||||
root.value = param[0];
|
root.value = param[0];
|
||||||
root.dumpCount = param[1];
|
root.dumpCount = param[1];
|
||||||
stackTree.value = root;
|
stackTree.value = root;
|
||||||
const w = (graph.value && graph.value.getBoundingClientRect().width) || 10;
|
const width = (graph.value && graph.value.getBoundingClientRect().width) || 0;
|
||||||
|
const w = width < 800 ? 802 : width;
|
||||||
flameChart.value = flamegraph()
|
flameChart.value = flamegraph()
|
||||||
.width(w - 15)
|
.width(w - 15)
|
||||||
.cellHeight(18)
|
.cellHeight(18)
|
||||||
.transitionDuration(750)
|
.transitionDuration(750)
|
||||||
.minFrameSize(5)
|
.minFrameSize(1)
|
||||||
.transitionEase(d3.easeCubic as any)
|
.transitionEase(d3.easeCubic as any)
|
||||||
.sort(true)
|
.sort(true)
|
||||||
.title("")
|
.title("")
|
||||||
|
@ -86,6 +86,7 @@ import { useSelectorStore } from "@/store/modules/selectors";
|
|||||||
import { useAppStoreWithOut } from "@/store/modules/app";
|
import { useAppStoreWithOut } from "@/store/modules/app";
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
import { InitTaskField, TargetTypes } from "./data";
|
import { InitTaskField, TargetTypes } from "./data";
|
||||||
|
|
||||||
/* global defineEmits */
|
/* global defineEmits */
|
||||||
const emits = defineEmits(["close"]);
|
const emits = defineEmits(["close"]);
|
||||||
const eBPFStore = useEbpfStore();
|
const eBPFStore = useEbpfStore();
|
||||||
@ -97,6 +98,7 @@ const type = ref<string>(TargetTypes[0].value);
|
|||||||
const monitorTime = ref<string>(InitTaskField.monitorTimeEn[0].value);
|
const monitorTime = ref<string>(InitTaskField.monitorTimeEn[0].value);
|
||||||
const monitorDuration = ref<number>(10);
|
const monitorDuration = ref<number>(10);
|
||||||
const time = ref<Date>(appStore.durationRow.start);
|
const time = ref<Date>(appStore.durationRow.start);
|
||||||
|
const disabled = ref<boolean>(false);
|
||||||
|
|
||||||
function changeMonitorTime(opt: string) {
|
function changeMonitorTime(opt: string) {
|
||||||
monitorTime.value = opt;
|
monitorTime.value = opt;
|
||||||
@ -111,19 +113,24 @@ function changeType(opt: any[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function createTask() {
|
async function createTask() {
|
||||||
|
if (disabled.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
disabled.value = true;
|
||||||
const date = monitorTime.value === "0" ? new Date() : time.value;
|
const date = monitorTime.value === "0" ? new Date() : time.value;
|
||||||
const params = {
|
const params = {
|
||||||
serviceId: selectorStore.currentService.id,
|
serviceId: selectorStore.currentService.id,
|
||||||
processLabels: labels.value,
|
processLabels: labels.value,
|
||||||
startTime: date.getTime(),
|
startTime: date.getTime(),
|
||||||
duration: monitorDuration.value * 60,
|
duration: monitorDuration.value * 60,
|
||||||
targetType: "ON_CPU",
|
targetType: type.value,
|
||||||
};
|
};
|
||||||
const res = await eBPFStore.createTask(params);
|
const res = await eBPFStore.createTask(params);
|
||||||
if (res.errors) {
|
if (res.errors) {
|
||||||
ElMessage.error(res.errors);
|
ElMessage.error(res.errors);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
disabled.value = false;
|
||||||
if (!res.data.createTaskData.status) {
|
if (!res.data.createTaskData.status) {
|
||||||
ElMessage.error(res.data.createTaskData.errorReason);
|
ElMessage.error(res.data.createTaskData.errorReason);
|
||||||
return;
|
return;
|
||||||
|
@ -34,7 +34,15 @@ limitations under the License. -->
|
|||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<div class="ell">
|
<div class="ell">
|
||||||
<span>{{ i.processLabels.join(" ") }}</span>
|
<span>
|
||||||
|
{{
|
||||||
|
i.targetType +
|
||||||
|
": " +
|
||||||
|
(i.processLabels.length
|
||||||
|
? i.processLabels.join(" ")
|
||||||
|
: `All Processes`)
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
<a class="profile-btn r" @click="viewDetail = true">
|
<a class="profile-btn r" @click="viewDetail = true">
|
||||||
<Icon iconName="view" size="middle" />
|
<Icon iconName="view" size="middle" />
|
||||||
</a>
|
</a>
|
||||||
@ -74,7 +82,9 @@ limitations under the License. -->
|
|||||||
</div>
|
</div>
|
||||||
<div class="mb-10 clear item">
|
<div class="mb-10 clear item">
|
||||||
<span class="g-sm-4 grey">{{ t("labels") }}:</span>
|
<span class="g-sm-4 grey">{{ t("labels") }}:</span>
|
||||||
<span class="g-sm-8 wba">{{ selectedTask.processLabels }}</span>
|
<span class="g-sm-8 wba">
|
||||||
|
{{ selectedTask.processLabels.join(";") }}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-10 clear item">
|
<div class="mb-10 clear item">
|
||||||
<span class="g-sm-4 grey">{{ t("monitorTime") }}:</span>
|
<span class="g-sm-4 grey">{{ t("monitorTime") }}:</span>
|
||||||
@ -117,6 +127,7 @@ const viewDetail = ref<boolean>(false);
|
|||||||
|
|
||||||
async function changeTask(item: EBPFTaskList) {
|
async function changeTask(item: EBPFTaskList) {
|
||||||
selectedTask.value = item;
|
selectedTask.value = item;
|
||||||
|
ebpfStore.setSelectedTask(item);
|
||||||
const res = await ebpfStore.getEBPFSchedules({
|
const res = await ebpfStore.getEBPFSchedules({
|
||||||
taskId: item.taskId,
|
taskId: item.taskId,
|
||||||
});
|
});
|
||||||
@ -128,6 +139,7 @@ watch(
|
|||||||
() => ebpfStore.taskList,
|
() => ebpfStore.taskList,
|
||||||
() => {
|
() => {
|
||||||
selectedTask.value = ebpfStore.taskList[0] || {};
|
selectedTask.value = ebpfStore.taskList[0] || {};
|
||||||
|
ebpfStore.setSelectedTask(selectedTask.value);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
</script>
|
</script>
|
||||||
|
@ -28,7 +28,15 @@ export const NewTaskField = {
|
|||||||
maxSamplingCount: { key: 5, label: "5" },
|
maxSamplingCount: { key: 5, label: "5" },
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TargetTypes = [{ label: "ON_CPU", value: "ON_CPU" }];
|
export const TargetTypes = [
|
||||||
|
{ label: "ON_CPU", value: "ON_CPU" },
|
||||||
|
{ label: "OFF_CPU", value: "OFF_CPU" },
|
||||||
|
];
|
||||||
|
|
||||||
|
export const AggregateTypes = [
|
||||||
|
{ label: "Count", value: "COUNT" },
|
||||||
|
{ label: "Duration", value: "DURATION" },
|
||||||
|
];
|
||||||
|
|
||||||
export const InitTaskField = {
|
export const InitTaskField = {
|
||||||
monitorTimeEn: [
|
monitorTimeEn: [
|
||||||
|
@ -37,9 +37,9 @@ limitations under the License. -->
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="mr-5" v-if="dashboardStore.entity !== EntityType[2].value">
|
<div class="mr-5" v-if="dashboardStore.entity !== EntityType[2].value">
|
||||||
<span class="grey mr-5"
|
<span class="grey mr-5">
|
||||||
>{{ isBrowser ? t("page") : t("endpoint") }}:</span
|
{{ isBrowser ? t("page") : t("endpoint") }}:
|
||||||
>
|
</span>
|
||||||
<Selector
|
<Selector
|
||||||
size="small"
|
size="small"
|
||||||
:value="state.endpoint.value"
|
:value="state.endpoint.value"
|
||||||
@ -226,10 +226,16 @@ function searchLogs() {
|
|||||||
endpointId: endpoint || state.endpoint.id || undefined,
|
endpointId: endpoint || state.endpoint.id || undefined,
|
||||||
serviceInstanceId: instance || state.instance.id || undefined,
|
serviceInstanceId: instance || state.instance.id || undefined,
|
||||||
queryDuration: appStore.durationTime,
|
queryDuration: appStore.durationTime,
|
||||||
keywordsOfContent: keywordsOfContent.value,
|
keywordsOfContent:
|
||||||
excludingKeywordsOfContent: excludingKeywordsOfContent.value,
|
dashboardStore.layerId === "BROWSER"
|
||||||
|
? undefined
|
||||||
|
: keywordsOfContent.value,
|
||||||
|
excludingKeywordsOfContent:
|
||||||
|
dashboardStore.layerId === "BROWSER"
|
||||||
|
? undefined
|
||||||
|
: excludingKeywordsOfContent.value,
|
||||||
tags: tagsMap.value.length ? tagsMap.value : undefined,
|
tags: tagsMap.value.length ? tagsMap.value : undefined,
|
||||||
paging: { pageNum: 1, pageSize: 15, needTotal: true },
|
paging: { pageNum: 1, pageSize: 15 },
|
||||||
relatedTrace: traceId.value ? { traceId: traceId.value } : undefined,
|
relatedTrace: traceId.value ? { traceId: traceId.value } : undefined,
|
||||||
});
|
});
|
||||||
queryLogs();
|
queryLogs();
|
||||||
|
@ -26,8 +26,10 @@ limitations under the License. -->
|
|||||||
<el-pagination
|
<el-pagination
|
||||||
v-model:currentPage="logStore.conditions.paging.pageNum"
|
v-model:currentPage="logStore.conditions.paging.pageNum"
|
||||||
v-model:page-size="pageSize"
|
v-model:page-size="pageSize"
|
||||||
layout="prev, pager, next, jumper"
|
:small="true"
|
||||||
:total="logStore.logsTotal"
|
layout="prev, pager, next"
|
||||||
|
:pager-count="5"
|
||||||
|
:total="total"
|
||||||
@current-change="updatePage"
|
@current-change="updatePage"
|
||||||
:style="`float: right`"
|
:style="`float: right`"
|
||||||
/>
|
/>
|
||||||
@ -35,7 +37,7 @@ limitations under the License. -->
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from "vue";
|
import { ref, computed } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import LogTable from "@/views/dashboard/related/components/LogTable/Index.vue";
|
import LogTable from "@/views/dashboard/related/components/LogTable/Index.vue";
|
||||||
import { useLogStore } from "@/store/modules/log";
|
import { useLogStore } from "@/store/modules/log";
|
||||||
@ -49,9 +51,14 @@ const type = ref<string>(
|
|||||||
dashboardStore.layerId === "BROWSER" ? "browser" : "service"
|
dashboardStore.layerId === "BROWSER" ? "browser" : "service"
|
||||||
);
|
);
|
||||||
const pageSize = ref<number>(15);
|
const pageSize = ref<number>(15);
|
||||||
|
const total = computed(() =>
|
||||||
|
logStore.logs.length === pageSize.value
|
||||||
|
? pageSize.value * logStore.conditions.paging.pageNum + 1
|
||||||
|
: pageSize.value * logStore.conditions.paging.pageNum
|
||||||
|
);
|
||||||
function updatePage(p: number) {
|
function updatePage(p: number) {
|
||||||
logStore.setLogCondition({
|
logStore.setLogCondition({
|
||||||
paging: { pageNum: p, pageSize: pageSize.value, needTotal: true },
|
paging: { pageNum: p, pageSize: pageSize.value },
|
||||||
});
|
});
|
||||||
queryLogs();
|
queryLogs();
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,9 @@ limitations under the License. -->
|
|||||||
v-model:currentPage="pageNum"
|
v-model:currentPage="pageNum"
|
||||||
v-model:page-size="pageSize"
|
v-model:page-size="pageSize"
|
||||||
:small="true"
|
:small="true"
|
||||||
:total="traceStore.traceSpanLogsTotal"
|
layout="prev, pager, next"
|
||||||
|
:pager-count="5"
|
||||||
|
:total="total"
|
||||||
@current-change="turnLogsPage"
|
@current-change="turnLogsPage"
|
||||||
/>
|
/>
|
||||||
<LogTable
|
<LogTable
|
||||||
@ -146,7 +148,7 @@ limitations under the License. -->
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { ref, defineComponent } from "vue";
|
import { ref, defineComponent, computed } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import { useTraceStore } from "@/store/modules/trace";
|
import { useTraceStore } from "@/store/modules/trace";
|
||||||
import { Option } from "@/types/app";
|
import { Option } from "@/types/app";
|
||||||
@ -171,6 +173,11 @@ export default defineComponent({
|
|||||||
const displayMode = ref<string>("List");
|
const displayMode = ref<string>("List");
|
||||||
const pageNum = ref<number>(1);
|
const pageNum = ref<number>(1);
|
||||||
const pageSize = 10;
|
const pageSize = 10;
|
||||||
|
const total = computed(() =>
|
||||||
|
traceStore.traceList.length === pageSize
|
||||||
|
? pageSize * pageNum.value + 1
|
||||||
|
: pageSize * pageNum.value
|
||||||
|
);
|
||||||
const dateFormat = (date: number, pattern = "YYYY-MM-DD HH:mm:ss") =>
|
const dateFormat = (date: number, pattern = "YYYY-MM-DD HH:mm:ss") =>
|
||||||
dayjs(date).format(pattern);
|
dayjs(date).format(pattern);
|
||||||
const showTraceLogs = ref<boolean>(false);
|
const showTraceLogs = ref<boolean>(false);
|
||||||
@ -202,7 +209,7 @@ export default defineComponent({
|
|||||||
relatedTrace: {
|
relatedTrace: {
|
||||||
traceId: traceId.value || traceStore.currentTrace.traceIds[0].value,
|
traceId: traceId.value || traceStore.currentTrace.traceIds[0].value,
|
||||||
},
|
},
|
||||||
paging: { pageNum: pageNum.value, pageSize, needTotal: true },
|
paging: { pageNum: pageNum.value, pageSize },
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
if (res.errors) {
|
if (res.errors) {
|
||||||
@ -227,6 +234,7 @@ export default defineComponent({
|
|||||||
pageSize,
|
pageSize,
|
||||||
pageNum,
|
pageNum,
|
||||||
loading,
|
loading,
|
||||||
|
total,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -72,9 +72,19 @@ limitations under the License. -->
|
|||||||
</div>
|
</div>
|
||||||
<div class="mr-10">
|
<div class="mr-10">
|
||||||
<span class="sm b grey mr-5">{{ t("duration") }}:</span>
|
<span class="sm b grey mr-5">{{ t("duration") }}:</span>
|
||||||
<el-input size="small" class="inputs mr-5" v-model="minTraceDuration" />
|
<el-input
|
||||||
|
size="small"
|
||||||
|
class="inputs mr-5"
|
||||||
|
v-model="minTraceDuration"
|
||||||
|
type="number"
|
||||||
|
/>
|
||||||
<span class="grey mr-5">-</span>
|
<span class="grey mr-5">-</span>
|
||||||
<el-input size="small" class="inputs" v-model="maxTraceDuration" />
|
<el-input
|
||||||
|
size="small"
|
||||||
|
class="inputs"
|
||||||
|
v-model="maxTraceDuration"
|
||||||
|
type="number"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-h">
|
<div class="flex-h">
|
||||||
@ -100,8 +110,8 @@ const selectorStore = useSelectorStore();
|
|||||||
const dashboardStore = useDashboardStore();
|
const dashboardStore = useDashboardStore();
|
||||||
const traceStore = useTraceStore();
|
const traceStore = useTraceStore();
|
||||||
const traceId = ref<string>("");
|
const traceId = ref<string>("");
|
||||||
const minTraceDuration = ref<string>("");
|
const minTraceDuration = ref<number>();
|
||||||
const maxTraceDuration = ref<string>("");
|
const maxTraceDuration = ref<number>();
|
||||||
const tagsList = ref<string[]>([]);
|
const tagsList = ref<string[]>([]);
|
||||||
const tagsMap = ref<Option[]>([]);
|
const tagsMap = ref<Option[]>([]);
|
||||||
const state = reactive<any>({
|
const state = reactive<any>({
|
||||||
@ -174,11 +184,11 @@ function searchTraces() {
|
|||||||
serviceInstanceId: instance || state.instance.id || undefined,
|
serviceInstanceId: instance || state.instance.id || undefined,
|
||||||
traceState: state.status.value || "ALL",
|
traceState: state.status.value || "ALL",
|
||||||
queryDuration: appStore.durationTime,
|
queryDuration: appStore.durationTime,
|
||||||
minTraceDuration: appStore.minTraceDuration || undefined,
|
minTraceDuration: Number(minTraceDuration.value),
|
||||||
maxTraceDuration: appStore.maxTraceDuration || undefined,
|
maxTraceDuration: Number(maxTraceDuration.value),
|
||||||
queryOrder: "BY_DURATION",
|
queryOrder: "BY_DURATION",
|
||||||
tags: tagsMap.value.length ? tagsMap.value : undefined,
|
tags: tagsMap.value.length ? tagsMap.value : undefined,
|
||||||
paging: { pageNum: 1, pageSize: 15, needTotal: true },
|
paging: { pageNum: 1, pageSize: 20 },
|
||||||
});
|
});
|
||||||
queryTraces();
|
queryTraces();
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,9 @@ limitations under the License. -->
|
|||||||
v-model:currentPage="traceStore.conditions.paging.pageNum"
|
v-model:currentPage="traceStore.conditions.paging.pageNum"
|
||||||
v-model:page-size="pageSize"
|
v-model:page-size="pageSize"
|
||||||
:small="true"
|
:small="true"
|
||||||
layout="prev, pager, next, jumper"
|
layout="prev, pager, next"
|
||||||
:total="traceStore.traceTotal"
|
:pager-count="5"
|
||||||
v-model:pager-count="pageCount"
|
:total="total"
|
||||||
@current-change="updatePage"
|
@current-change="updatePage"
|
||||||
/>
|
/>
|
||||||
<div class="selectors">
|
<div class="selectors">
|
||||||
@ -71,7 +71,7 @@ limitations under the License. -->
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { ref } from "vue";
|
import { ref, computed } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import { useTraceStore } from "@/store/modules/trace";
|
import { useTraceStore } from "@/store/modules/trace";
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
@ -83,8 +83,12 @@ const { t } = useI18n();
|
|||||||
const traceStore = useTraceStore();
|
const traceStore = useTraceStore();
|
||||||
const loading = ref<boolean>(false);
|
const loading = ref<boolean>(false);
|
||||||
const selectedKey = ref<string>("");
|
const selectedKey = ref<string>("");
|
||||||
const pageSize = ref<number>(15);
|
const pageSize = ref<number>(20);
|
||||||
const pageCount = ref<number>(5);
|
const total = computed(() =>
|
||||||
|
traceStore.traceList.length === pageSize.value
|
||||||
|
? pageSize.value * traceStore.conditions.paging.pageNum + 1
|
||||||
|
: pageSize.value * traceStore.conditions.paging.pageNum
|
||||||
|
);
|
||||||
const dateFormat = (date: number, pattern = "YYYY-MM-DD HH:mm:ss") =>
|
const dateFormat = (date: number, pattern = "YYYY-MM-DD HH:mm:ss") =>
|
||||||
dayjs(date).format(pattern);
|
dayjs(date).format(pattern);
|
||||||
|
|
||||||
@ -96,7 +100,7 @@ function searchTrace() {
|
|||||||
|
|
||||||
function updatePage(p: number) {
|
function updatePage(p: number) {
|
||||||
traceStore.setTraceCondition({
|
traceStore.setTraceCondition({
|
||||||
paging: { pageNum: p, pageSize: pageSize.value, needTotal: true },
|
paging: { pageNum: p, pageSize: pageSize.value },
|
||||||
});
|
});
|
||||||
searchTrace();
|
searchTrace();
|
||||||
}
|
}
|
||||||
@ -104,7 +108,7 @@ function updatePage(p: number) {
|
|||||||
function changeSort(opt: Option[] | any) {
|
function changeSort(opt: Option[] | any) {
|
||||||
traceStore.setTraceCondition({
|
traceStore.setTraceCondition({
|
||||||
queryOrder: opt[0].value,
|
queryOrder: opt[0].value,
|
||||||
paging: { pageNum: 1, pageSize: pageSize.value, needTotal: true },
|
paging: { pageNum: 1, pageSize: pageSize.value },
|
||||||
});
|
});
|
||||||
searchTrace();
|
searchTrace();
|
||||||
}
|
}
|
||||||
@ -167,7 +171,7 @@ async function queryTraces() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
width: 400px;
|
width: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.trace-tr {
|
.trace-tr {
|
||||||
|
@ -91,7 +91,9 @@ limitations under the License. -->
|
|||||||
v-model:currentPage="pageNum"
|
v-model:currentPage="pageNum"
|
||||||
v-model:page-size="pageSize"
|
v-model:page-size="pageSize"
|
||||||
:small="true"
|
:small="true"
|
||||||
:total="traceStore.traceSpanLogsTotal"
|
layout="prev, pager, next"
|
||||||
|
:pager-count="5"
|
||||||
|
:total="total"
|
||||||
@current-change="turnPage"
|
@current-change="turnPage"
|
||||||
/>
|
/>
|
||||||
<LogTable
|
<LogTable
|
||||||
@ -106,7 +108,7 @@ limitations under the License. -->
|
|||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from "vue";
|
import { ref, computed } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import type { PropType } from "vue";
|
import type { PropType } from "vue";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
@ -124,6 +126,11 @@ const traceStore = useTraceStore();
|
|||||||
const pageNum = ref<number>(1);
|
const pageNum = ref<number>(1);
|
||||||
const showRelatedLogs = ref<boolean>(false);
|
const showRelatedLogs = ref<boolean>(false);
|
||||||
const pageSize = 10;
|
const pageSize = 10;
|
||||||
|
const total = computed(() =>
|
||||||
|
traceStore.traceList.length === pageSize
|
||||||
|
? pageSize * pageNum.value + 1
|
||||||
|
: pageSize * pageNum.value
|
||||||
|
);
|
||||||
const dateFormat = (date: number, pattern = "YYYY-MM-DD HH:mm:ss") =>
|
const dateFormat = (date: number, pattern = "YYYY-MM-DD HH:mm:ss") =>
|
||||||
dayjs(date).format(pattern);
|
dayjs(date).format(pattern);
|
||||||
async function getTaceLogs() {
|
async function getTaceLogs() {
|
||||||
@ -135,7 +142,7 @@ async function getTaceLogs() {
|
|||||||
segmentId: props.currentSpan.segmentId,
|
segmentId: props.currentSpan.segmentId,
|
||||||
spanId: props.currentSpan.spanId,
|
spanId: props.currentSpan.spanId,
|
||||||
},
|
},
|
||||||
paging: { pageNum: pageNum.value, pageSize, needTotal: true },
|
paging: { pageNum: pageNum.value, pageSize },
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
if (res.errors) {
|
if (res.errors) {
|
||||||
|
@ -75,8 +75,8 @@ limitations under the License. -->
|
|||||||
<el-pagination
|
<el-pagination
|
||||||
v-model:currentPage="pageNum"
|
v-model:currentPage="pageNum"
|
||||||
v-model:page-size="pageSize"
|
v-model:page-size="pageSize"
|
||||||
layout="prev, jumper, total, next"
|
layout="prev, pager, next"
|
||||||
:total="eventStore.total"
|
:total="total"
|
||||||
@current-change="updatePage"
|
@current-change="updatePage"
|
||||||
:pager-count="5"
|
:pager-count="5"
|
||||||
small
|
small
|
||||||
@ -92,7 +92,7 @@ limitations under the License. -->
|
|||||||
</nav>
|
</nav>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, reactive } from "vue";
|
import { ref, reactive, computed } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import { EventTypes } from "./data";
|
import { EventTypes } from "./data";
|
||||||
import { useEventStore } from "@/store/modules/event";
|
import { useEventStore } from "@/store/modules/event";
|
||||||
@ -119,6 +119,11 @@ const state = reactive<{
|
|||||||
instance: "",
|
instance: "",
|
||||||
endpoint: "",
|
endpoint: "",
|
||||||
});
|
});
|
||||||
|
const total = computed(() =>
|
||||||
|
eventStore.events.length === pageSize
|
||||||
|
? pageSize * pageNum.value + 1
|
||||||
|
: pageSize * pageNum.value
|
||||||
|
);
|
||||||
|
|
||||||
getSelectors();
|
getSelectors();
|
||||||
|
|
||||||
@ -180,7 +185,6 @@ async function queryEvents() {
|
|||||||
paging: {
|
paging: {
|
||||||
pageNum: pageNum.value,
|
pageNum: pageNum.value,
|
||||||
pageSize: pageSize,
|
pageSize: pageSize,
|
||||||
needTotal: true,
|
|
||||||
},
|
},
|
||||||
source: {
|
source: {
|
||||||
service: state.service || "",
|
service: state.service || "",
|
||||||
|
Loading…
Reference in New Issue
Block a user