Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 9cd44c1

Browse files
committedMar 22, 2025·
add max node limit
Signed-off-by: Hariom Gupta <guptahariom03082003@gmail.com>
1 parent 8148289 commit 9cd44c1

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed
 

‎packages/jaeger-ui/src/components/DependencyGraph/DAG.test.js

+17
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import ShallowRenderer from 'react-test-renderer/shallow';
1717
import { render, screen } from '@testing-library/react';
1818
import { LayoutManager } from '@jaegertracing/plexus';
1919
import DAG, { renderNode } from './DAG';
20+
import { DAG_MAX_NUM_SERVICES } from '../../constants';
2021

2122
// mock canvas API (we don't care about canvas results)
2223

@@ -186,6 +187,22 @@ describe('<DAG>', () => {
186187
expect(element.props.children.props.vertices.length).toBe(0);
187188
expect(element.props.children.props.edges.length).toBe(0);
188189
});
190+
191+
it('shows error message when too many services to render', () => {
192+
const serviceCalls = Array.from({ length: DAG_MAX_NUM_SERVICES + 1 }, (_, i) => ({
193+
parent: `service-${i}`,
194+
child: `service-${i + 1}`,
195+
callCount: 1,
196+
}));
197+
198+
renderer.render(<DAG serviceCalls={serviceCalls} selectedLayout="dot" />);
199+
const element = renderer.getRenderOutput();
200+
201+
expect(element.type).toBe('div');
202+
expect(element.props.className).toBe('DAG');
203+
expect(element.props.children.type).toBe('div');
204+
expect(element.props.children.props.className).toBe('DAG--error');
205+
});
189206
});
190207

191208
describe('renderNode', () => {

‎packages/jaeger-ui/src/components/DependencyGraph/DAG.tsx

+13
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { TEdge, TVertex } from '@jaegertracing/plexus/lib/types';
1919
import { TLayoutOptions } from '@jaegertracing/plexus/lib/LayoutManager/types';
2020

2121
import './dag.css';
22+
import { DAG_MAX_NUM_SERVICES } from '../../constants';
2223

2324
type TServiceCall = {
2425
parent: string;
@@ -134,6 +135,8 @@ export default function DAG({ serviceCalls = [], selectedLayout, selectedDepth,
134135
[serviceCalls, selectedService, selectedDepth]
135136
);
136137

138+
const forceFocalServiceSelection = data.nodes.length > DAG_MAX_NUM_SERVICES;
139+
137140
const layoutManager = React.useMemo(() => {
138141
const config: TLayoutOptions =
139142
selectedLayout === 'dot'
@@ -164,6 +167,16 @@ export default function DAG({ serviceCalls = [], selectedLayout, selectedDepth,
164167
};
165168
}, [layoutManager]);
166169

170+
if (forceFocalServiceSelection) {
171+
return (
172+
<div className="DAG">
173+
<div className="DAG--error">
174+
{`Too many services to render (${data.nodes.length}). Please select a focal service or reduce the depth.`}
175+
</div>
176+
</div>
177+
);
178+
}
179+
167180
return (
168181
<div className="DAG">
169182
<Digraph<TVertex>

‎packages/jaeger-ui/src/components/DependencyGraph/dag.css

+4
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,7 @@
5050
color: #7f7f7f;
5151
background-color: #fafafa;
5252
}
53+
54+
.DAG--error {
55+
margin: 10px;
56+
}

‎packages/jaeger-ui/src/constants/index.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ export const TOP_NAV_HEIGHT = 46;
1717
// Max number of services that "Hierarchical Layout" with "dot" layout engine can can render
1818
// Can be configured with "dependencies.dagMaxNumServices"
1919
export const FALLBACK_DAG_MAX_NUM_SERVICES = 500;
20+
21+
// Max number of services that layouts can render without selecting a focal service
22+
export const DAG_MAX_NUM_SERVICES = 1200;
2023
export const FALLBACK_TRACE_NAME = '<trace-without-root-span>';
2124

2225
export const FETCH_DONE = 'FETCH_DONE';

0 commit comments

Comments
 (0)
Please sign in to comment.