mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
315 lines
9.2 KiB
TypeScript
315 lines
9.2 KiB
TypeScript
import { defaultSettings } from './datasource.test';
|
|
import {
|
|
createTableFrameFromMetricsSummaryQuery,
|
|
emptyResponse,
|
|
getConfigQuery,
|
|
transformToMetricsData,
|
|
} from './metricsSummary';
|
|
|
|
describe('MetricsSummary', () => {
|
|
describe('createTableFrameFromMetricsSummaryQuery', () => {
|
|
it('should return emptyResponse when state is LoadingState.Error', () => {
|
|
const result = createTableFrameFromMetricsSummaryQuery([], '', defaultSettings);
|
|
expect(result).toEqual(emptyResponse);
|
|
});
|
|
|
|
it('should return correctly when state is LoadingState.Done', () => {
|
|
const data = [
|
|
{
|
|
spanCount: '10',
|
|
errorSpanCount: '1',
|
|
p50: '1',
|
|
p90: '2',
|
|
p95: '3',
|
|
p99: '4',
|
|
series: [
|
|
{
|
|
key: 'span.http.status_code',
|
|
value: {
|
|
type: 3,
|
|
n: 208,
|
|
},
|
|
},
|
|
{
|
|
key: 'temperature',
|
|
value: {
|
|
type: 4,
|
|
f: 38.1,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
];
|
|
const result = createTableFrameFromMetricsSummaryQuery(
|
|
data,
|
|
'{name="HTTP POST - post"} | by(resource.service.name)',
|
|
defaultSettings
|
|
);
|
|
expect(result).toMatchInlineSnapshot(`
|
|
[
|
|
{
|
|
"fields": [
|
|
{
|
|
"config": {
|
|
"displayNameFromDS": "span.http.status_code",
|
|
"links": [
|
|
{
|
|
"internal": {
|
|
"datasourceName": "tempo",
|
|
"datasourceUid": "gdev-tempo",
|
|
"query": {
|
|
"query": "{name="HTTP POST - post" && span.http.status_code=\${__data.fields["span.http.status_code"]} && temperature=\${__data.fields["temperature"]} && kind=server} | by(resource.service.name)",
|
|
"queryType": "traceql",
|
|
},
|
|
},
|
|
"title": "Query in explore",
|
|
"url": "",
|
|
},
|
|
],
|
|
"noValue": "<no value>",
|
|
},
|
|
"name": "span.http.status_code",
|
|
"type": "string",
|
|
"values": [
|
|
208,
|
|
],
|
|
},
|
|
{
|
|
"config": {
|
|
"displayNameFromDS": "temperature",
|
|
"links": [
|
|
{
|
|
"internal": {
|
|
"datasourceName": "tempo",
|
|
"datasourceUid": "gdev-tempo",
|
|
"query": {
|
|
"query": "{name="HTTP POST - post" && span.http.status_code=\${__data.fields["span.http.status_code"]} && temperature=\${__data.fields["temperature"]} && kind=server} | by(resource.service.name)",
|
|
"queryType": "traceql",
|
|
},
|
|
},
|
|
"title": "Query in explore",
|
|
"url": "",
|
|
},
|
|
],
|
|
"noValue": "<no value>",
|
|
},
|
|
"name": "temperature",
|
|
"type": "string",
|
|
"values": [
|
|
38.1,
|
|
],
|
|
},
|
|
{
|
|
"config": {
|
|
"custom": {
|
|
"width": 150,
|
|
},
|
|
"displayNameFromDS": "Kind",
|
|
},
|
|
"name": "kind",
|
|
"type": "string",
|
|
"values": [
|
|
"server",
|
|
],
|
|
},
|
|
{
|
|
"config": {
|
|
"custom": {
|
|
"width": 150,
|
|
},
|
|
"displayNameFromDS": "Span count",
|
|
},
|
|
"name": "spanCount",
|
|
"type": "number",
|
|
"values": [
|
|
10,
|
|
],
|
|
},
|
|
{
|
|
"config": {
|
|
"custom": {
|
|
"width": 150,
|
|
},
|
|
"displayNameFromDS": "Error",
|
|
"unit": "percent",
|
|
},
|
|
"name": "errorPercentage",
|
|
"type": "number",
|
|
"values": [
|
|
10,
|
|
],
|
|
},
|
|
{
|
|
"config": {
|
|
"custom": {
|
|
"width": 150,
|
|
},
|
|
"displayNameFromDS": "p50",
|
|
"unit": "ns",
|
|
},
|
|
"name": "p50",
|
|
"type": "number",
|
|
"values": [
|
|
1,
|
|
],
|
|
},
|
|
{
|
|
"config": {
|
|
"custom": {
|
|
"width": 150,
|
|
},
|
|
"displayNameFromDS": "p90",
|
|
"unit": "ns",
|
|
},
|
|
"name": "p90",
|
|
"type": "number",
|
|
"values": [
|
|
2,
|
|
],
|
|
},
|
|
{
|
|
"config": {
|
|
"custom": {
|
|
"width": 150,
|
|
},
|
|
"displayNameFromDS": "p95",
|
|
"unit": "ns",
|
|
},
|
|
"name": "p95",
|
|
"type": "number",
|
|
"values": [
|
|
3,
|
|
],
|
|
},
|
|
{
|
|
"config": {
|
|
"custom": {
|
|
"width": 150,
|
|
},
|
|
"displayNameFromDS": "p99",
|
|
"unit": "ns",
|
|
},
|
|
"name": "p99",
|
|
"type": "number",
|
|
"values": [
|
|
4,
|
|
],
|
|
},
|
|
],
|
|
"length": 1,
|
|
"meta": {
|
|
"preferredVisualisationType": "table",
|
|
},
|
|
"name": "Metrics Summary",
|
|
"refId": "metrics-summary",
|
|
},
|
|
]
|
|
`);
|
|
});
|
|
|
|
it('transformToMetricsData should return correctly', () => {
|
|
const data = {
|
|
spanCount: '10',
|
|
errorSpanCount: '1',
|
|
p50: '1',
|
|
p90: '2',
|
|
p95: '3',
|
|
p99: '4',
|
|
series,
|
|
};
|
|
const result = transformToMetricsData(data);
|
|
expect(result).toMatchInlineSnapshot(`
|
|
{
|
|
"contains_sink": "true",
|
|
"errorPercentage": 10,
|
|
"kind": "server",
|
|
"p50": 1,
|
|
"p90": 2,
|
|
"p95": 3,
|
|
"p99": 4,
|
|
"room": "kitchen",
|
|
"span.http.status_code": 208,
|
|
"spanCount": 10,
|
|
"spanKind": "server",
|
|
"spanStatus": "ok",
|
|
"temperature": 38.1,
|
|
"window_open": "8h",
|
|
}
|
|
`);
|
|
});
|
|
|
|
it('getConfigQuery should return correctly for empty target query', () => {
|
|
const result = getConfigQuery(series, '{}');
|
|
expect(result).toEqual(
|
|
'{span.http.status_code=${__data.fields["span.http.status_code"]} && temperature=${__data.fields["temperature"]} && room="${__data.fields["room"]}" && contains_sink="${__data.fields["contains_sink"]}" && window_open="${__data.fields["window_open"]}" && spanStatus=${__data.fields["spanStatus"]} && spanKind=${__data.fields["spanKind"]} && kind=server}'
|
|
);
|
|
});
|
|
|
|
it('getConfigQuery should return correctly for target query', () => {
|
|
const result = getConfigQuery(series, '{name="HTTP POST - post"} | by(resource.service.name)');
|
|
expect(result).toEqual(
|
|
'{name="HTTP POST - post" && span.http.status_code=${__data.fields["span.http.status_code"]} && temperature=${__data.fields["temperature"]} && room="${__data.fields["room"]}" && contains_sink="${__data.fields["contains_sink"]}" && window_open="${__data.fields["window_open"]}" && spanStatus=${__data.fields["spanStatus"]} && spanKind=${__data.fields["spanKind"]} && kind=server} | by(resource.service.name)'
|
|
);
|
|
});
|
|
|
|
it('getConfigQuery should return correctly for target query without brackets', () => {
|
|
const result = getConfigQuery(series, 'by(resource.service.name)');
|
|
expect(result).toEqual(
|
|
'{span.http.status_code=${__data.fields["span.http.status_code"]} && temperature=${__data.fields["temperature"]} && room="${__data.fields["room"]}" && contains_sink="${__data.fields["contains_sink"]}" && window_open="${__data.fields["window_open"]}" && spanStatus=${__data.fields["spanStatus"]} && spanKind=${__data.fields["spanKind"]} && kind=server} | by(resource.service.name)'
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
const series = [
|
|
{
|
|
key: 'span.http.status_code',
|
|
value: {
|
|
type: 3,
|
|
n: 208,
|
|
},
|
|
},
|
|
{
|
|
key: 'temperature',
|
|
value: {
|
|
type: 4,
|
|
f: 38.1,
|
|
},
|
|
},
|
|
{
|
|
key: 'room',
|
|
value: {
|
|
type: 5,
|
|
s: 'kitchen',
|
|
},
|
|
},
|
|
{
|
|
key: 'contains_sink',
|
|
value: {
|
|
type: 6,
|
|
b: 'true',
|
|
},
|
|
},
|
|
{
|
|
key: 'window_open',
|
|
value: {
|
|
type: 7,
|
|
d: '8h',
|
|
},
|
|
},
|
|
{
|
|
key: 'spanStatus',
|
|
value: {
|
|
type: 8,
|
|
status: 1,
|
|
},
|
|
},
|
|
{
|
|
key: 'spanKind',
|
|
value: {
|
|
type: 9,
|
|
kind: 3,
|
|
},
|
|
},
|
|
];
|