mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-12 17:48:59 +08:00
feat: added new queries to handle error rates of endpoints
This commit is contained in:
parent
36f3a2e26d
commit
bd071e3e60
@ -89,12 +89,14 @@ function EndPointMetrics({
|
|||||||
) : (
|
) : (
|
||||||
<Tooltip title={metricsData?.errorRate}>
|
<Tooltip title={metricsData?.errorRate}>
|
||||||
<Progress
|
<Progress
|
||||||
percent={Number((metricsData?.errorRate ?? 0 * 100).toFixed(1))}
|
percent={Number(
|
||||||
|
(Number(metricsData?.errorRate ?? 0) * 100).toFixed(1),
|
||||||
|
)}
|
||||||
strokeLinecap="butt"
|
strokeLinecap="butt"
|
||||||
size="small"
|
size="small"
|
||||||
strokeColor={((): string => {
|
strokeColor={((): string => {
|
||||||
const errorRatePercent = Number(
|
const errorRatePercent = Number(
|
||||||
(metricsData?.errorRate ?? 0 * 100).toFixed(1),
|
(Number(metricsData?.errorRate ?? 0) * 100).toFixed(1),
|
||||||
);
|
);
|
||||||
if (errorRatePercent >= 90) return Color.BG_SAKURA_500;
|
if (errorRatePercent >= 90) return Color.BG_SAKURA_500;
|
||||||
if (errorRatePercent >= 60) return Color.BG_AMBER_500;
|
if (errorRatePercent >= 60) return Color.BG_AMBER_500;
|
||||||
|
@ -357,14 +357,14 @@ export const getEndPointsQueryPayload = (
|
|||||||
key: 'span_id',
|
key: 'span_id',
|
||||||
type: '',
|
type: '',
|
||||||
},
|
},
|
||||||
aggregateOperator: 'count',
|
aggregateOperator: 'count_distinct',
|
||||||
dataSource: DataSource.TRACES,
|
dataSource: DataSource.TRACES,
|
||||||
disabled: false,
|
disabled: false,
|
||||||
expression: 'A',
|
expression: 'A',
|
||||||
filters: {
|
filters: {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: '82bdab49',
|
id: 'ec316e57',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'net.peer.name--string--tag--false',
|
id: 'net.peer.name--string--tag--false',
|
||||||
@ -389,7 +389,7 @@ export const getEndPointsQueryPayload = (
|
|||||||
reduceTo: 'avg',
|
reduceTo: 'avg',
|
||||||
spaceAggregation: 'sum',
|
spaceAggregation: 'sum',
|
||||||
stepInterval: 60,
|
stepInterval: 60,
|
||||||
timeAggregation: 'rate',
|
timeAggregation: 'count_distinct',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
aggregateAttribute: {
|
aggregateAttribute: {
|
||||||
@ -407,7 +407,7 @@ export const getEndPointsQueryPayload = (
|
|||||||
filters: {
|
filters: {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: '3f46231e',
|
id: '46d57857',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'net.peer.name--string--tag--false',
|
id: 'net.peer.name--string--tag--false',
|
||||||
@ -449,7 +449,7 @@ export const getEndPointsQueryPayload = (
|
|||||||
filters: {
|
filters: {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: '55ad75cd',
|
id: '4a237616',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'net.peer.name--string--tag--false',
|
id: 'net.peer.name--string--tag--false',
|
||||||
@ -476,8 +476,71 @@ export const getEndPointsQueryPayload = (
|
|||||||
stepInterval: 60,
|
stepInterval: 60,
|
||||||
timeAggregation: 'max',
|
timeAggregation: 'max',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
aggregateAttribute: {
|
||||||
|
dataType: DataTypes.String,
|
||||||
|
id: 'span_id--string----true',
|
||||||
|
isColumn: true,
|
||||||
|
isJSON: false,
|
||||||
|
key: 'span_id',
|
||||||
|
type: '',
|
||||||
|
},
|
||||||
|
aggregateOperator: 'count_distinct',
|
||||||
|
dataSource: DataSource.TRACES,
|
||||||
|
disabled: true,
|
||||||
|
expression: 'D',
|
||||||
|
filters: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: 'f162de1e',
|
||||||
|
key: {
|
||||||
|
dataType: DataTypes.String,
|
||||||
|
id: 'net.peer.name--string--tag--false',
|
||||||
|
isColumn: false,
|
||||||
|
isJSON: false,
|
||||||
|
key: 'net.peer.name',
|
||||||
|
type: 'tag',
|
||||||
|
},
|
||||||
|
op: '=',
|
||||||
|
value: domainName,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '3df0ac1d',
|
||||||
|
key: {
|
||||||
|
dataType: DataTypes.bool,
|
||||||
|
id: 'has_error--bool----true',
|
||||||
|
isColumn: true,
|
||||||
|
isJSON: false,
|
||||||
|
key: 'has_error',
|
||||||
|
type: '',
|
||||||
|
},
|
||||||
|
op: '=',
|
||||||
|
value: 'true',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
op: 'AND',
|
||||||
|
},
|
||||||
|
functions: [],
|
||||||
|
groupBy: isGroupedByAttribute ? groupBy : defaultGroupBy,
|
||||||
|
having: [],
|
||||||
|
legend: '',
|
||||||
|
limit: null,
|
||||||
|
orderBy: [],
|
||||||
|
queryName: 'D',
|
||||||
|
reduceTo: 'avg',
|
||||||
|
spaceAggregation: 'sum',
|
||||||
|
stepInterval: 60,
|
||||||
|
timeAggregation: 'count_distinct',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
queryFormulas: [
|
||||||
|
{
|
||||||
|
queryName: 'F1',
|
||||||
|
expression: '(D/A)*100',
|
||||||
|
disabled: false,
|
||||||
|
legend: 'error percentage',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
queryFormulas: [],
|
|
||||||
},
|
},
|
||||||
clickhouse_sql: [
|
clickhouse_sql: [
|
||||||
{
|
{
|
||||||
@ -738,7 +801,7 @@ export const formatEndPointsDataForTable = (
|
|||||||
endpoint.data.C === 'n/a'
|
endpoint.data.C === 'n/a'
|
||||||
? '-'
|
? '-'
|
||||||
: getLastUsedRelativeTime(Math.floor(Number(endpoint.data.C) / 1000000)), // Convert from nanoseconds to milliseconds
|
: getLastUsedRelativeTime(Math.floor(Number(endpoint.data.C) / 1000000)), // Convert from nanoseconds to milliseconds
|
||||||
errorRate: endpoint.data.D || '-',
|
errorRate: endpoint.data.F1 === undefined ? '-' : Number(endpoint.data.F1),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -834,7 +897,7 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
filters: {
|
filters: {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: '3db61dd6',
|
id: '92b8a1c1',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'http.url--string--tag--false',
|
id: 'http.url--string--tag--false',
|
||||||
@ -847,7 +910,7 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
value: endPointName,
|
value: endPointName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '2d0f6061',
|
id: '874562e1',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'net.peer.name--string--tag--false',
|
id: 'net.peer.name--string--tag--false',
|
||||||
@ -859,7 +922,6 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
op: '=',
|
op: '=',
|
||||||
value: domainName,
|
value: domainName,
|
||||||
},
|
},
|
||||||
...filters.items,
|
|
||||||
],
|
],
|
||||||
op: 'AND',
|
op: 'AND',
|
||||||
},
|
},
|
||||||
@ -891,7 +953,7 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
filters: {
|
filters: {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: 'bd65eb28',
|
id: 'c0c0f76b',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'http.url--string--tag--false',
|
id: 'http.url--string--tag--false',
|
||||||
@ -904,7 +966,7 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
value: endPointName,
|
value: endPointName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '14b30e30',
|
id: '0c5564e0',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'net.peer.name--string--tag--false',
|
id: 'net.peer.name--string--tag--false',
|
||||||
@ -916,7 +978,6 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
op: '=',
|
op: '=',
|
||||||
value: domainName,
|
value: domainName,
|
||||||
},
|
},
|
||||||
...filters.items,
|
|
||||||
],
|
],
|
||||||
op: 'AND',
|
op: 'AND',
|
||||||
},
|
},
|
||||||
@ -935,19 +996,20 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
{
|
{
|
||||||
aggregateAttribute: {
|
aggregateAttribute: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: '------false',
|
id: 'span_id--string----true',
|
||||||
isColumn: false,
|
isColumn: true,
|
||||||
key: '',
|
isJSON: false,
|
||||||
|
key: 'span_id',
|
||||||
type: '',
|
type: '',
|
||||||
},
|
},
|
||||||
aggregateOperator: 'rate',
|
aggregateOperator: 'count_distinct',
|
||||||
dataSource: DataSource.TRACES,
|
dataSource: DataSource.TRACES,
|
||||||
disabled: false,
|
disabled: true,
|
||||||
expression: 'C',
|
expression: 'C',
|
||||||
filters: {
|
filters: {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: 'd9d55d83',
|
id: '7a3eebed',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'http.url--string--tag--false',
|
id: 'http.url--string--tag--false',
|
||||||
@ -960,7 +1022,7 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
value: endPointName,
|
value: endPointName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '6087aebe',
|
id: '0d656701',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'net.peer.name--string--tag--false',
|
id: 'net.peer.name--string--tag--false',
|
||||||
@ -973,7 +1035,7 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
value: domainName,
|
value: domainName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'c575cf6e',
|
id: '83ef9a1b',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.bool,
|
dataType: DataTypes.bool,
|
||||||
id: 'has_error--bool----true',
|
id: 'has_error--bool----true',
|
||||||
@ -985,21 +1047,20 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
op: '=',
|
op: '=',
|
||||||
value: 'true',
|
value: 'true',
|
||||||
},
|
},
|
||||||
...filters.items,
|
|
||||||
],
|
],
|
||||||
op: 'AND',
|
op: 'AND',
|
||||||
},
|
},
|
||||||
functions: [],
|
functions: [],
|
||||||
groupBy: [],
|
groupBy: [],
|
||||||
having: [],
|
having: [],
|
||||||
legend: 'Error',
|
legend: '',
|
||||||
limit: null,
|
limit: null,
|
||||||
orderBy: [],
|
orderBy: [],
|
||||||
queryName: 'C',
|
queryName: 'C',
|
||||||
reduceTo: 'avg',
|
reduceTo: 'avg',
|
||||||
spaceAggregation: 'sum',
|
spaceAggregation: 'sum',
|
||||||
stepInterval: 60,
|
stepInterval: 60,
|
||||||
timeAggregation: 'rate',
|
timeAggregation: 'count_distinct',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
aggregateAttribute: {
|
aggregateAttribute: {
|
||||||
@ -1016,7 +1077,7 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
filters: {
|
filters: {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
id: '8899ca87',
|
id: 'e7f12d52',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'http.url--string--tag--false',
|
id: 'http.url--string--tag--false',
|
||||||
@ -1029,7 +1090,7 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
value: endPointName,
|
value: endPointName,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '5c4646fd',
|
id: '918f5b99',
|
||||||
key: {
|
key: {
|
||||||
dataType: DataTypes.String,
|
dataType: DataTypes.String,
|
||||||
id: 'net.peer.name--string--tag--false',
|
id: 'net.peer.name--string--tag--false',
|
||||||
@ -1041,7 +1102,6 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
op: '=',
|
op: '=',
|
||||||
value: domainName,
|
value: domainName,
|
||||||
},
|
},
|
||||||
...filters.items,
|
|
||||||
],
|
],
|
||||||
op: 'AND',
|
op: 'AND',
|
||||||
},
|
},
|
||||||
@ -1057,8 +1117,71 @@ export const getEndPointDetailsQueryPayload = (
|
|||||||
stepInterval: 60,
|
stepInterval: 60,
|
||||||
timeAggregation: 'max',
|
timeAggregation: 'max',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
aggregateAttribute: {
|
||||||
|
dataType: DataTypes.String,
|
||||||
|
id: 'span_id--string----true',
|
||||||
|
isColumn: true,
|
||||||
|
isJSON: false,
|
||||||
|
key: 'span_id',
|
||||||
|
type: '',
|
||||||
|
},
|
||||||
|
aggregateOperator: 'count_distinct',
|
||||||
|
dataSource: DataSource.TRACES,
|
||||||
|
disabled: true,
|
||||||
|
expression: 'E',
|
||||||
|
filters: {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: '5281578a',
|
||||||
|
key: {
|
||||||
|
dataType: DataTypes.String,
|
||||||
|
id: 'http.url--string--tag--false',
|
||||||
|
isColumn: false,
|
||||||
|
isJSON: false,
|
||||||
|
key: 'http.url',
|
||||||
|
type: 'tag',
|
||||||
|
},
|
||||||
|
op: '=',
|
||||||
|
value: endPointName,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'b355d1aa',
|
||||||
|
key: {
|
||||||
|
dataType: DataTypes.String,
|
||||||
|
id: 'net.peer.name--string--tag--false',
|
||||||
|
isColumn: false,
|
||||||
|
isJSON: false,
|
||||||
|
key: 'net.peer.name',
|
||||||
|
type: 'tag',
|
||||||
|
},
|
||||||
|
op: '=',
|
||||||
|
value: domainName,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
op: 'AND',
|
||||||
|
},
|
||||||
|
functions: [],
|
||||||
|
groupBy: [],
|
||||||
|
having: [],
|
||||||
|
legend: 'total',
|
||||||
|
limit: null,
|
||||||
|
orderBy: [],
|
||||||
|
queryName: 'E',
|
||||||
|
reduceTo: 'avg',
|
||||||
|
spaceAggregation: 'sum',
|
||||||
|
stepInterval: 60,
|
||||||
|
timeAggregation: 'count_distinct',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
queryFormulas: [
|
||||||
|
{
|
||||||
|
queryName: 'F1',
|
||||||
|
expression: '(C/E)*100',
|
||||||
|
disabled: false,
|
||||||
|
legend: 'error percentage',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
queryFormulas: [],
|
|
||||||
},
|
},
|
||||||
clickhouse_sql: [
|
clickhouse_sql: [
|
||||||
{
|
{
|
||||||
@ -1726,10 +1849,11 @@ export const getEndPointZeroStateQueryPayload = (
|
|||||||
|
|
||||||
interface EndPointMetricsResponseRow {
|
interface EndPointMetricsResponseRow {
|
||||||
data: {
|
data: {
|
||||||
A: number;
|
A: number | string;
|
||||||
B: number | string;
|
B: number | string;
|
||||||
C: number;
|
C: number | string;
|
||||||
D: number | string;
|
D: number | string;
|
||||||
|
F1: number | string;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1745,7 +1869,7 @@ interface EndPointMetricsData {
|
|||||||
key: string;
|
key: string;
|
||||||
rate: number | string;
|
rate: number | string;
|
||||||
latency: number | string;
|
latency: number | string;
|
||||||
errorRate: number;
|
errorRate: number | string;
|
||||||
lastUsed: string;
|
lastUsed: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1760,10 +1884,11 @@ export const getFormattedEndPointMetricsData = (
|
|||||||
data: EndPointMetricsResponseRow[],
|
data: EndPointMetricsResponseRow[],
|
||||||
): EndPointMetricsData => ({
|
): EndPointMetricsData => ({
|
||||||
key: v4(),
|
key: v4(),
|
||||||
rate: data[0].data.D === 'n/a' || !data[0].data.D ? '-' : data[0].data.A,
|
rate: data[0].data.A === 'n/a' || !data[0].data.A ? '-' : data[0].data.A,
|
||||||
latency:
|
latency:
|
||||||
data[0].data.B === 'n/a' ? '-' : Math.round(Number(data[0].data.B) / 1000000),
|
data[0].data.B === 'n/a' ? '-' : Math.round(Number(data[0].data.B) / 1000000),
|
||||||
errorRate: data[0].data.C,
|
errorRate:
|
||||||
|
data[0].data.F1 === 'n/a' || !data[0].data.F1 ? '-' : Number(data[0].data.F1),
|
||||||
lastUsed:
|
lastUsed:
|
||||||
data[0].data.D === 'n/a' || !data[0].data.D
|
data[0].data.D === 'n/a' || !data[0].data.D
|
||||||
? '-'
|
? '-'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user