Skip to content

Commit 3318ee1

Browse files
Merge pull request #53 from alanconway/netflow-query-url
fix: log and netflow query-URL conversion
2 parents a08b633 + 6e6785d commit 3318ee1

9 files changed

Lines changed: 245 additions & 341 deletions

File tree

web/src/__tests__/alert-node.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ describe('AlertNode.fromQuery', () => {
6464
});
6565

6666
it.each([
67-
{ query: 'alert:aler', expected: 'Invalid alert query: alert:aler' },
68-
{ query: 'alert:alert:', expected: 'Invalid alert query' },
67+
{ query: 'alert:aler', expected: 'Expected alert query: alert:aler' },
68+
{ query: 'alert:alert:', expected: 'Expected alert query' },
6969
])('$query throws', ({ query, expected }) => {
7070
expect(() => AlertNode.fromQuery(query)).toThrow(expected);
7171
});

web/src/__tests__/k8s-node.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ describe('K8sNode.fromQuery', () => {
151151
});
152152

153153
it.each([
154-
{ query: `foo:bar:baz`, err: 'Invalid k8s query' },
155-
{ query: `k8s:Pod`, err: 'Invalid k8s query' },
154+
{ query: `foo:bar:baz`, err: 'Expected k8s query' },
155+
{ query: `k8s:Pod`, err: 'Expected k8s query' },
156156
{ query: `k8s:nosuch:{}`, err: 'Unknown k8s kind:' },
157157
{ query: `k8s:Role.v1.bad.group:{}`, err: `Unknown k8s kind:` },
158158
])('raises error on $query', ({ query, err }) =>

web/src/__tests__/log-node.spec.ts

Lines changed: 86 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,94 @@
11
import { LogNode } from '../korrel8r/log';
22

3-
/**
4-
* Bad deployment is the suggested deployment from korrel8r to show its functionality within the
5-
* logging plugin. https://korrel8r.github.io/korrel8r/#troubleshooting-no-related-logs
6-
*
7-
*/
8-
describe('Test LogNode Parsing', () => {
9-
it('Test different log type urls to query parsing', () => {
10-
[
11-
{
12-
url: 'monitoring/logs?q={kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}|json&tenant=infrastructure',
13-
expected:
14-
'log:infrastructure:{kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}',
15-
},
16-
{
17-
url: 'monitoring/logs?q={kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}|json',
18-
expected:
19-
'log:infrastructure:{kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}',
20-
},
21-
{
22-
url: 'monitoring/logs?q={kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000"}|json&tenant=infrastructure',
23-
expected:
24-
'log:infrastructure:{kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}',
25-
},
26-
].forEach(({ url, expected }) => {
27-
expect(LogNode.fromURL(url)?.toQuery()).toEqual(expected);
28-
});
29-
});
30-
31-
it('URL => Query => URL', () => {
32-
const url =
33-
'monitoring/logs?q={kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}|json&tenant=infrastructure';
34-
const expectedQuery =
35-
'log:infrastructure:{kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}';
36-
const actualQuery = LogNode.fromURL(url)?.toQuery();
37-
expect(actualQuery).toEqual(expectedQuery);
38-
expect(LogNode.fromQuery(expectedQuery)?.toURL()).toEqual(url);
39-
});
3+
describe('LogNode.fromURL', () => {
4+
it.each([
5+
{
6+
url: `monitoring/logs?q=${encodeURIComponent(
7+
'{kubernetes_namespace_name="default",kubernetes_pod_name="foo"}',
8+
)}&tenant=infrastructure`,
9+
query:
10+
`log:infrastructure:{kubernetes_namespace_name="default"` +
11+
`,kubernetes_pod_name="foo"}|json`,
12+
},
13+
{
14+
url: `monitoring/logs?q=${encodeURIComponent(
15+
'{kubernetes_namespace_name="default",' +
16+
'kubernetes_pod_name="foo",log_type="infrastructure"}',
17+
)}`,
18+
query:
19+
`log:infrastructure:{kubernetes_namespace_name="default",` +
20+
`kubernetes_pod_name="foo",log_type="infrastructure"}|json`,
21+
},
22+
{
23+
url: `monitoring/logs?q=${encodeURIComponent(
24+
'{kubernetes_namespace_name="default",kubernetes_pod_name="foo"}|json',
25+
)}&tenant=infrastructure`,
26+
query:
27+
`log:infrastructure:{kubernetes_namespace_name="default",` +
28+
`kubernetes_pod_name="foo"}|json`,
29+
},
30+
{
31+
url: `monitoring/logs?q=${encodeURIComponent(
32+
'{kubernetes_namespace_name="default",kubernetes_pod_name="foo",log_type="infrastructure"}|json',
33+
)}&tenant=infrastructure`,
34+
query:
35+
`log:infrastructure:{kubernetes_namespace_name="default",` +
36+
`kubernetes_pod_name="foo",log_type="infrastructure"}|json`,
37+
},
38+
{
39+
url: `/k8s/ns/foo/pods/bar/aggregated-logs`,
40+
query: `log:application:{kubernetes_namespace_name="foo",kubernetes_pod_name="bar"}|json`,
41+
},
42+
{
43+
url: `/k8s/ns/kube/pods/bar/aggregated-logs`,
44+
query: `log:infrastructure:{kubernetes_namespace_name="kube",kubernetes_pod_name="bar"}|json`,
45+
},
46+
])('$url', ({ url, query }) => expect(LogNode.fromURL(url)?.toQuery()).toEqual(query));
47+
});
4048

41-
it('Query => URL => Query', () => {
42-
const query =
43-
'log:infrastructure:{kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}';
44-
const expectedURL =
45-
'monitoring/logs?q={kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000",log_type="infrastructure"}|json&tenant=infrastructure';
46-
const actualURL = LogNode.fromQuery(query)?.toURL();
47-
expect(actualURL).toEqual(expectedURL);
48-
expect(LogNode.fromURL(actualURL)?.toQuery()).toEqual(query);
49-
});
49+
describe('LogNode.fromQuery', () => {
50+
it.each([
51+
{
52+
query:
53+
`log:infrastructure:{kubernetes_namespace_name="default",` +
54+
`kubernetes_pod_name="foo"}|json`,
55+
url: `monitoring/logs?q=${encodeURIComponent(
56+
'{kubernetes_namespace_name="default",kubernetes_pod_name="foo"}|json',
57+
)}&tenant=infrastructure`,
58+
},
59+
{
60+
query: 'log:infrastructure:{kubernetes_namespace_name="default",log_type="infrastructure"}',
61+
url: `monitoring/logs?q=${encodeURIComponent(
62+
'{kubernetes_namespace_name="default",log_type="infrastructure"}|json',
63+
)}&tenant=infrastructure`,
64+
},
65+
])('$query', ({ url, query }) => expect(LogNode.fromQuery(query)?.toURL()).toEqual(url));
66+
});
5067

51-
it('Test url to query parsing with expected errors', () => {
52-
[
53-
{
54-
url: 'monitoring/log',
55-
expected: 'Expected url to start with monitoring/logs',
56-
},
57-
{
58-
url: 'monitoring/logs',
59-
expected: 'Expected URL to contain query parameters',
60-
},
61-
{
62-
url: 'monitoring/logs?',
63-
expected: 'Expected URL to contain query parameters',
64-
},
65-
{
66-
url: 'monitoring/logs?q={kubernetes_namespace_name="default",kubernetes_pod_name="bad-deployment-000000000-00000"}|json',
67-
expected: 'Expected query to contain log class',
68-
},
69-
{
70-
url: 'monitoring/logs?tenant=infrastructure',
71-
expected: 'Expected more than 0 relevant query parameters',
72-
},
73-
].forEach(({ url, expected }) => {
74-
expect(() => LogNode.fromURL(url)).toThrow(expected);
75-
});
68+
describe('expected errors', () => {
69+
it.each([
70+
{
71+
url: 'monitoring/log',
72+
expected: 'Expected log URL: monitoring/log',
73+
},
74+
{
75+
url: 'monitoring/logs?q={kubernetes_namespace_name="default",kubernetes_pod_name="foo"}|json',
76+
expected: 'No log class found in URL',
77+
},
78+
])('error from url: $url', ({ url, expected }) => {
79+
expect(() => LogNode.fromURL(url)).toThrow(expected);
7680
});
7781

78-
it('Test query to url parsing with expected errors', () => {
79-
[
80-
{
81-
query: 'lo',
82-
expected: 'Expected query to start with log:',
83-
},
84-
{
85-
query: 'log:',
86-
expected: 'Expected query to contain class',
87-
},
88-
{
89-
query: 'log:incorrect',
90-
expected: 'Unknown log class',
91-
},
92-
{
93-
query: 'log:infrastructure:',
94-
expected: 'Expected more than 0 relevant query parameters',
95-
},
96-
{
97-
query: 'log:infrastructure:{}',
98-
expected: 'Expected more than 0 relevant query parameters',
99-
},
100-
].forEach(({ query, expected }) => {
101-
expect(() => LogNode.fromQuery(query)).toThrow(expected);
102-
});
82+
it.each([
83+
{
84+
query: 'foo:bar:baz',
85+
expected: 'Expected log query: foo:bar:baz',
86+
},
87+
{
88+
query: 'log:incorrect:{}',
89+
expected: 'Expected log class in query',
90+
},
91+
])('error from query: $query', ({ query, expected }) => {
92+
expect(() => LogNode.fromQuery(query)).toThrow(expected);
10393
});
10494
});

0 commit comments

Comments
 (0)