Prettier: Upgrade to 2 (#30387)
* Updated package json but not updated source files * Update eslint plugin * updated files
This commit is contained in:
@@ -41,8 +41,8 @@ function getAccessors() {
|
||||
getBottomRowIndexVisible: jest.fn(),
|
||||
getTopRowIndexVisible: jest.fn(),
|
||||
getRowPosition: jest.fn(),
|
||||
mapRowIndexToSpanIndex: jest.fn(n => n),
|
||||
mapSpanIndexToRowIndex: jest.fn(n => n),
|
||||
mapRowIndexToSpanIndex: jest.fn((n) => n),
|
||||
mapSpanIndexToRowIndex: jest.fn((n) => n),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ export default class ScrollManager {
|
||||
const childrenAreHidden = _collapsed ? new Set(_collapsed) : null;
|
||||
// use empty Map as fallback to make flow happy
|
||||
const spansMap: Map<string, TraceSpan> = childrenAreHidden
|
||||
? new Map(spans.map(s => [s.spanID, s] as [string, TraceSpan]))
|
||||
? new Map(spans.map((s) => [s.spanID, s] as [string, TraceSpan]))
|
||||
: new Map();
|
||||
const boundary = direction < 0 ? -1 : spans.length;
|
||||
let nextSpanIndex: number | undefined;
|
||||
@@ -178,7 +178,7 @@ export default class ScrollManager {
|
||||
// make sure the span is not collapsed
|
||||
const { isHidden, parentIDs } = isSpanHidden(span, childrenAreHidden, spansMap);
|
||||
if (isHidden) {
|
||||
parentIDs.forEach(id => childrenAreHidden.add(id));
|
||||
parentIDs.forEach((id) => childrenAreHidden.add(id));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -195,7 +195,7 @@ export default class ScrollManager {
|
||||
do {
|
||||
const { isHidden, parentIDs } = isSpanHidden(spans[nextSpanIndex], childrenAreHidden, spansMap);
|
||||
if (isHidden) {
|
||||
parentIDs.forEach(id => childrenAreHidden.add(id));
|
||||
parentIDs.forEach((id) => childrenAreHidden.add(id));
|
||||
nextSpanIndex--;
|
||||
}
|
||||
isFallbackHidden = isHidden;
|
||||
|
||||
@@ -130,7 +130,7 @@ type WrappedWithThemeComponent<Props> = React.ComponentType<Omit<Props, 'theme'>
|
||||
export const withTheme = <Props extends { theme: Theme }, Statics extends {} = {}>(
|
||||
Component: React.ComponentType<Props>
|
||||
): WrappedWithThemeComponent<Props> => {
|
||||
let WithTheme: React.ComponentType<Omit<Props, 'theme'>> = props => {
|
||||
let WithTheme: React.ComponentType<Omit<Props, 'theme'>> = (props) => {
|
||||
return (
|
||||
<ThemeConsumer>
|
||||
{(theme: Theme) => {
|
||||
|
||||
@@ -231,7 +231,7 @@ describe('<SpanGraph>', () => {
|
||||
viewRangeUpdate: { shiftEnd: value },
|
||||
},
|
||||
];
|
||||
cases.forEach(_case => {
|
||||
cases.forEach((_case) => {
|
||||
instance._handleScrubberDragUpdate(_case.dragUpdate);
|
||||
expect(props.updateNextViewRangeTime).lastCalledWith(_case.viewRangeUpdate);
|
||||
});
|
||||
@@ -260,7 +260,7 @@ describe('<SpanGraph>', () => {
|
||||
viewRangeUpdate: [viewStart, value],
|
||||
},
|
||||
];
|
||||
cases.forEach(_case => {
|
||||
cases.forEach((_case) => {
|
||||
const { manager } = _case.dragUpdate;
|
||||
wrapper.setState({ preventCursorLine: true });
|
||||
expect(wrapper.state('preventCursorLine')).toBe(true);
|
||||
|
||||
@@ -66,7 +66,7 @@ describe('<SpanGraph>', () => {
|
||||
|
||||
it('passes items to CanvasSpanGraph', () => {
|
||||
const canvasGraph = wrapper.find(CanvasSpanGraph).first();
|
||||
const items = trace.spans.map(span => ({
|
||||
const items = trace.spans.map((span) => ({
|
||||
valueOffset: span.relativeStartTime,
|
||||
valueWidth: span.duration,
|
||||
serviceName: span.process.serviceName,
|
||||
|
||||
+2
-2
@@ -25,7 +25,7 @@ import renderIntoCanvas, {
|
||||
} from './render-into-canvas';
|
||||
|
||||
const getCanvasWidth = () => window.innerWidth * 2;
|
||||
const getBgFillRect = items => ({
|
||||
const getBgFillRect = (items) => ({
|
||||
fillStyle: BG_COLOR,
|
||||
height: !items || items.length < MIN_TOTAL_HEIGHT ? MIN_TOTAL_HEIGHT : Math.min(MAX_TOTAL_HEIGHT, items.length),
|
||||
width: getCanvasWidth(),
|
||||
@@ -163,7 +163,7 @@ describe('renderIntoCanvas()', () => {
|
||||
|
||||
it('draws the map', () => {
|
||||
const totalValueWidth = 4000;
|
||||
const items = _range(MIN_TOTAL_HEIGHT * 10).map(i => ({
|
||||
const items = _range(MIN_TOTAL_HEIGHT * 10).map((i) => ({
|
||||
valueWidth: i,
|
||||
valueOffset: i,
|
||||
serviceName: `service-name-${i}`,
|
||||
|
||||
@@ -51,9 +51,7 @@ export default function renderIntoCanvas(
|
||||
}
|
||||
let fillStyle = fillCache.get(serviceName);
|
||||
if (!fillStyle) {
|
||||
fillStyle = `rgba(${getFillColor(serviceName)
|
||||
.concat(ITEM_ALPHA)
|
||||
.join()})`;
|
||||
fillStyle = `rgba(${getFillColor(serviceName).concat(ITEM_ALPHA).join()})`;
|
||||
fillCache.set(serviceName, fillStyle);
|
||||
}
|
||||
ctx.fillStyle = fillStyle;
|
||||
|
||||
@@ -185,7 +185,7 @@ export const HEADER_ITEMS = [
|
||||
{
|
||||
key: 'service-count',
|
||||
label: 'Services',
|
||||
renderer: (trace: Trace) => new Set(_values(trace.processes).map(p => p.serviceName)).size,
|
||||
renderer: (trace: Trace) => new Set(_values(trace.processes).map((p) => p.serviceName)).size,
|
||||
},
|
||||
{
|
||||
key: 'depth',
|
||||
@@ -237,7 +237,7 @@ export default function TracePageHeader(props: TracePageHeaderEmbedProps) {
|
||||
const summaryItems =
|
||||
!hideSummary &&
|
||||
!slimView &&
|
||||
HEADER_ITEMS.map(item => {
|
||||
HEADER_ITEMS.map((item) => {
|
||||
const { renderer, ...rest } = item;
|
||||
return { ...rest, value: renderer(trace, styles) };
|
||||
});
|
||||
|
||||
@@ -52,7 +52,7 @@ describe('<TracePageSearchBar>', () => {
|
||||
it('renders buttons', () => {
|
||||
const buttons = wrapper.find('UIButton');
|
||||
expect(buttons.length).toBe(4);
|
||||
buttons.forEach(button => {
|
||||
buttons.forEach((button) => {
|
||||
expect(button.hasClass(getStyles().TracePageSearchBarBtn)).toBe(true);
|
||||
expect(button.hasClass(getStyles().TracePageSearchBarBtnDisabled)).toBe(false);
|
||||
expect(button.prop('disabled')).toBe(false);
|
||||
@@ -82,7 +82,7 @@ describe('<TracePageSearchBar>', () => {
|
||||
it('renders buttons', () => {
|
||||
const buttons = wrapper.find('UIButton');
|
||||
expect(buttons.length).toBe(4);
|
||||
buttons.forEach(button => {
|
||||
buttons.forEach((button) => {
|
||||
expect(button.hasClass(getStyles().TracePageSearchBarBtn)).toBe(true);
|
||||
expect(button.hasClass(getStyles().TracePageSearchBarBtnDisabled)).toBe(true);
|
||||
expect(button.prop('disabled')).toBe(true);
|
||||
|
||||
@@ -16,7 +16,7 @@ import Positions from './Positions';
|
||||
|
||||
describe('Positions', () => {
|
||||
const bufferLen = 1;
|
||||
const getHeight = i => i * 2 + 2;
|
||||
const getHeight = (i) => i * 2 + 2;
|
||||
let ps;
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -236,7 +236,7 @@ describe('Positions', () => {
|
||||
it('cascades difference in observed height vs known height to known y-values', () => {
|
||||
const getLargerHeight = () => simpleGetHeight() + 2;
|
||||
const knownYs = ps.ys.slice();
|
||||
const expectedYValues = knownYs.map(value => (value ? value + 2 : value));
|
||||
const expectedYValues = knownYs.map((value) => (value ? value + 2 : value));
|
||||
ps.confirmHeight(0, getLargerHeight);
|
||||
expect(ps.ys).toEqual(expectedYValues);
|
||||
});
|
||||
|
||||
@@ -114,7 +114,7 @@ describe('<ListView>', () => {
|
||||
|
||||
let oldRender;
|
||||
let oldInitWrapper;
|
||||
const initWrapperMock = jest.fn(elm => {
|
||||
const initWrapperMock = jest.fn((elm) => {
|
||||
if (elm != null) {
|
||||
// jsDom requires `defineProperties` instead of just setting the props
|
||||
Object.defineProperties(elm, {
|
||||
@@ -201,7 +201,7 @@ describe('<ListView>', () => {
|
||||
expect(eventListeners.scroll).toEqual([instance._onScroll]);
|
||||
});
|
||||
|
||||
it('calls _positionList when the document is scrolled', done => {
|
||||
it('calls _positionList when the document is scrolled', (done) => {
|
||||
const event = new Event('scroll');
|
||||
const fn = jest.spyOn(instance, '_positionList');
|
||||
expect(instance._isScrolledOrResized).toBe(false);
|
||||
|
||||
@@ -81,12 +81,8 @@ describe(ReferencesButton, () => {
|
||||
submenuItems.forEach((submenuItem, i) => {
|
||||
expect(submenuItem.find(ReferenceLink).prop('reference')).toBe(moreReferences[i]);
|
||||
});
|
||||
expect(
|
||||
submenuItems
|
||||
.at(2)
|
||||
.find(ReferenceLink)
|
||||
.childAt(0)
|
||||
.text()
|
||||
).toBe(`(another trace) - ${moreReferences[2].spanID}`);
|
||||
expect(submenuItems.at(2).find(ReferenceLink).childAt(0).text()).toBe(
|
||||
`(another trace) - ${moreReferences[2].spanID}`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -55,7 +55,7 @@ export default class ReferencesButton extends React.PureComponent<TReferencesBut
|
||||
const styles = getStyles();
|
||||
return (
|
||||
<UIMenu>
|
||||
{references.map(ref => {
|
||||
{references.map((ref) => {
|
||||
const { span, spanID } = ref;
|
||||
return (
|
||||
<UIMenuItem key={`${spanID}`}>
|
||||
|
||||
@@ -29,7 +29,7 @@ describe('<SpanBar>', () => {
|
||||
hintSide: 'right',
|
||||
viewEnd: 1,
|
||||
viewStart: 0,
|
||||
getViewedBounds: s => {
|
||||
getViewedBounds: (s) => {
|
||||
// Log entries
|
||||
if (s === 10) {
|
||||
return { start: 0.1, end: 0.1 };
|
||||
|
||||
@@ -150,7 +150,7 @@ function SpanBar(props: TInnerProps) {
|
||||
labelClassName,
|
||||
} = props;
|
||||
// group logs based on timestamps
|
||||
const logGroups = _groupBy(span.logs, log => {
|
||||
const logGroups = _groupBy(span.logs, (log) => {
|
||||
const posPercent = getViewedBounds(log.timestamp, log.timestamp).start;
|
||||
// round to the nearest 0.2%
|
||||
return toPercent(Math.round(posPercent * 500) / 500);
|
||||
@@ -180,7 +180,7 @@ function SpanBar(props: TInnerProps) {
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
{Object.keys(logGroups).map(positionKey => (
|
||||
{Object.keys(logGroups).map((positionKey) => (
|
||||
<UIPopover
|
||||
key={positionKey}
|
||||
arrowPointAtCenter
|
||||
|
||||
@@ -453,7 +453,7 @@ export class UnthemedSpanBarRow extends React.PureComponent<SpanBarRowProps> {
|
||||
rel="noopener noreferrer"
|
||||
onClick={
|
||||
link.onClick
|
||||
? event => {
|
||||
? (event) => {
|
||||
if (!(event.ctrlKey || event.metaKey || event.shiftKey) && link.onClick) {
|
||||
event.preventDefault();
|
||||
link.onClick(event);
|
||||
|
||||
+2
-2
@@ -47,8 +47,8 @@ describe('<KeyValuesSummary>', () => {
|
||||
});
|
||||
|
||||
it('renders the data as text', () => {
|
||||
const texts = wrapper.find('li').map(node => node.text());
|
||||
const expectedTexts = tags.map(tag => `${tag.key}=${tag.value}`);
|
||||
const texts = wrapper.find('li').map((node) => node.text());
|
||||
const expectedTexts = tags.map((tag) => `${tag.key}=${tag.value}`);
|
||||
expect(texts).toEqual(expectedTexts);
|
||||
});
|
||||
});
|
||||
|
||||
+1
-1
@@ -87,7 +87,7 @@ export function References(props: ReferenceItemProps) {
|
||||
return (
|
||||
<div className={cx(styles.ReferencesList)}>
|
||||
<ul className={styles.list}>
|
||||
{data.map(reference => {
|
||||
{data.map((reference) => {
|
||||
return (
|
||||
<li className={styles.item} key={`${reference.spanID}`}>
|
||||
<ReferenceLink reference={reference} focusSpan={focusSpan}>
|
||||
|
||||
+2
-14
@@ -89,13 +89,7 @@ describe('<KeyValuesTable>', () => {
|
||||
expect(anchor).toHaveLength(1);
|
||||
expect(anchor.prop('href')).toBe('http://example.com/?kind=client');
|
||||
expect(anchor.prop('title')).toBe('More info about client');
|
||||
expect(
|
||||
anchor
|
||||
.closest('tr')
|
||||
.find('td')
|
||||
.first()
|
||||
.text()
|
||||
).toBe('span.kind');
|
||||
expect(anchor.closest('tr').find('td').first().text()).toBe('span.kind');
|
||||
});
|
||||
|
||||
it('renders multiple links correctly', () => {
|
||||
@@ -127,13 +121,7 @@ describe('<KeyValuesTable>', () => {
|
||||
const secondAnchor = anchors.last();
|
||||
expect(secondAnchor.prop('href')).toBe('http://example.com/2?kind=client');
|
||||
expect(secondAnchor.children().text()).toBe('Example 2');
|
||||
expect(
|
||||
dropdown
|
||||
.closest('tr')
|
||||
.find('td')
|
||||
.first()
|
||||
.text()
|
||||
).toBe('span.kind');
|
||||
expect(dropdown.closest('tr').find('td').first().text()).toBe('span.kind');
|
||||
});
|
||||
|
||||
it('renders a <CopyIcon /> with correct copyText for each data element', () => {
|
||||
|
||||
@@ -32,11 +32,7 @@ describe('<SpanDetail>', () => {
|
||||
|
||||
// use `transformTraceData` on a fake trace to get a fully processed span
|
||||
const span = transformTraceData(traceGenerator.trace({ numberOfSpans: 1 })).spans[0];
|
||||
const detailState = new DetailState()
|
||||
.toggleLogs()
|
||||
.toggleProcess()
|
||||
.toggleReferences()
|
||||
.toggleTags();
|
||||
const detailState = new DetailState().toggleLogs().toggleProcess().toggleReferences().toggleTags();
|
||||
const traceStartTime = 5;
|
||||
const props = {
|
||||
detailState,
|
||||
@@ -133,7 +129,7 @@ describe('<SpanDetail>', () => {
|
||||
expect(
|
||||
overview
|
||||
.prop('items')
|
||||
.map(item => item.label)
|
||||
.map((item) => item.label)
|
||||
.sort()
|
||||
).toEqual(words);
|
||||
});
|
||||
@@ -185,11 +181,6 @@ describe('<SpanDetail>', () => {
|
||||
});
|
||||
|
||||
it('renders CopyIcon with deep link URL', () => {
|
||||
expect(
|
||||
wrapper
|
||||
.find(CopyIcon)
|
||||
.prop('copyText')
|
||||
.includes(`?uiFind=${props.span.spanID}`)
|
||||
).toBe(true);
|
||||
expect(wrapper.find(CopyIcon).prop('copyText').includes(`?uiFind=${props.span.spanID}`)).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -206,7 +206,7 @@ export default function SpanDetail(props: SpanDetailProps) {
|
||||
isOpen={logsState.isOpen}
|
||||
openedItems={logsState.openedItems}
|
||||
onToggle={() => logsToggle(spanID)}
|
||||
onItemToggle={logItem => logItemToggle(spanID, logItem)}
|
||||
onItemToggle={(logItem) => logItemToggle(spanID, logItem)}
|
||||
timestamp={traceStartTime}
|
||||
/>
|
||||
)}
|
||||
@@ -225,7 +225,7 @@ export default function SpanDetail(props: SpanDetailProps) {
|
||||
label="Stack trace"
|
||||
data={stackTraces}
|
||||
isOpen={isStackTracesOpen}
|
||||
TextComponent={textComponentProps => {
|
||||
TextComponent={(textComponentProps) => {
|
||||
let text;
|
||||
if (textComponentProps.data?.length > 1) {
|
||||
text = textComponentProps.data
|
||||
|
||||
@@ -141,7 +141,7 @@ export class UnthemedSpanTreeOffset extends React.PureComponent<TProps> {
|
||||
const styles = getStyles(theme);
|
||||
return (
|
||||
<span className={cx(styles.SpanTreeOffset, { [styles.SpanTreeOffsetParent]: hasChildren })} {...wrapperProps}>
|
||||
{this.ancestorIds.map(ancestorId => (
|
||||
{this.ancestorIds.map((ancestorId) => (
|
||||
<span
|
||||
key={ancestorId}
|
||||
className={cx(styles.indentGuide, {
|
||||
@@ -149,15 +149,15 @@ export class UnthemedSpanTreeOffset extends React.PureComponent<TProps> {
|
||||
})}
|
||||
data-ancestor-id={ancestorId}
|
||||
data-test-id="SpanTreeOffset--indentGuide"
|
||||
onMouseEnter={event => this.handleMouseEnter(event, ancestorId)}
|
||||
onMouseLeave={event => this.handleMouseLeave(event, ancestorId)}
|
||||
onMouseEnter={(event) => this.handleMouseEnter(event, ancestorId)}
|
||||
onMouseLeave={(event) => this.handleMouseLeave(event, ancestorId)}
|
||||
/>
|
||||
))}
|
||||
{icon && (
|
||||
<span
|
||||
className={styles.iconWrapper}
|
||||
onMouseEnter={event => this.handleMouseEnter(event, spanID)}
|
||||
onMouseLeave={event => this.handleMouseLeave(event, spanID)}
|
||||
onMouseEnter={(event) => this.handleMouseEnter(event, spanID)}
|
||||
onMouseLeave={(event) => this.handleMouseLeave(event, spanID)}
|
||||
data-test-id="icon-wrapper"
|
||||
>
|
||||
{icon}
|
||||
|
||||
@@ -84,7 +84,7 @@ describe('<VirtualizedTraceViewImpl>', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
SpanTreeOffset.mockReturnValue(<div />);
|
||||
Object.keys(props).forEach(key => {
|
||||
Object.keys(props).forEach((key) => {
|
||||
if (typeof props[key] === 'function') {
|
||||
props[key].mockReset();
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ describe('TraceTimelineViewer/utils', () => {
|
||||
{ fn: isErrorSpan, name: 'isErrorSpan', key: 'error', value: 'true' },
|
||||
];
|
||||
|
||||
spanTypeTestCases.forEach(testCase => {
|
||||
spanTypeTestCases.forEach((testCase) => {
|
||||
const msg = `${testCase.name}() is true only when a ${testCase.key}=${testCase.value} tag is present`;
|
||||
it(msg, () => {
|
||||
const span = { tags: traceGenerator.tags() };
|
||||
@@ -85,7 +85,7 @@ describe('TraceTimelineViewer/utils', () => {
|
||||
describe('spanContainsErredSpan()', () => {
|
||||
it('returns true only when a descendant has an error tag', () => {
|
||||
const errorTag = { key: 'error', type: 'bool', value: true };
|
||||
const getTags = withError => (withError ? traceGenerator.tags().concat(errorTag) : traceGenerator.tags());
|
||||
const getTags = (withError) => (withError ? traceGenerator.tags().concat(errorTag) : traceGenerator.tags());
|
||||
|
||||
// Using a string to generate the test spans. Each line results in a span. The
|
||||
// left number indicates whether or not the generated span has a descendant
|
||||
@@ -107,10 +107,10 @@ describe('TraceTimelineViewer/utils', () => {
|
||||
`
|
||||
.trim()
|
||||
.split('\n')
|
||||
.map(s => s.trim());
|
||||
.map((s) => s.trim());
|
||||
// Get the expectation, str -> number -> bool
|
||||
const expectations = config.map(s => Boolean(Number(s[0])));
|
||||
const spans = config.map(line => ({
|
||||
const expectations = config.map((s) => Boolean(Number(s[0])));
|
||||
const spans = config.map((line) => ({
|
||||
depth: line.length,
|
||||
tags: getTags(+line.slice(-1)),
|
||||
}));
|
||||
|
||||
@@ -61,7 +61,7 @@ export function spanHasTag(key: string, value: any, span: TraceSpan) {
|
||||
if (!Array.isArray(span.tags) || !span.tags.length) {
|
||||
return false;
|
||||
}
|
||||
return span.tags.some(tag => tag.key === key && tag.value === value);
|
||||
return span.tags.some((tag) => tag.key === key && tag.value === value);
|
||||
}
|
||||
|
||||
export const isClientSpan = spanHasTag.bind(null, 'span.kind', 'client');
|
||||
|
||||
@@ -111,7 +111,7 @@ describe('Tween', () => {
|
||||
describe('_frameCallback', () => {
|
||||
it('freezes the callback argument', () => {
|
||||
let current;
|
||||
const fn = jest.fn(_current => {
|
||||
const fn = jest.fn((_current) => {
|
||||
current = _current;
|
||||
});
|
||||
const tween = new Tween({ ...baseOptions, onUpdate: fn });
|
||||
|
||||
@@ -38,7 +38,7 @@ describe('UiFindInput', () => {
|
||||
let wrapper;
|
||||
|
||||
beforeAll(() => {
|
||||
debounceMock.mockImplementation(fn => {
|
||||
debounceMock.mockImplementation((fn) => {
|
||||
function debounceFunction(...args) {
|
||||
fn(...args);
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ export default class UiFindInput extends React.PureComponent<Props> {
|
||||
autosize={null}
|
||||
placeholder="Find..."
|
||||
{...inputProps}
|
||||
onChange={e => this.props.onChange(e.target.value)}
|
||||
onChange={(e) => this.props.onChange(e.target.value)}
|
||||
suffix={suffix}
|
||||
value={value}
|
||||
/>
|
||||
|
||||
@@ -52,7 +52,8 @@ function getParentSpanId(span, levels) {
|
||||
function attachReferences(spans, depth, spansPerLevel) {
|
||||
let levels = [[getSpanId(spans[0])]];
|
||||
|
||||
const duplicateLevelFilter = currentLevels => span => !currentLevels.find(level => level.indexOf(span.spanID) >= 0);
|
||||
const duplicateLevelFilter = (currentLevels) => (span) =>
|
||||
!currentLevels.find((level) => level.indexOf(span.spanID) >= 0);
|
||||
|
||||
while (levels.length < depth) {
|
||||
const remainingSpans = spans.filter(duplicateLevelFilter(levels));
|
||||
@@ -64,9 +65,9 @@ function attachReferences(spans, depth, spansPerLevel) {
|
||||
}
|
||||
|
||||
// filter out empty levels
|
||||
levels = levels.filter(level => level.length > 0);
|
||||
levels = levels.filter((level) => level.length > 0);
|
||||
|
||||
return spans.map(span => {
|
||||
return spans.map((span) => {
|
||||
const parentSpanId = getParentSpanId(span, levels);
|
||||
return parentSpanId
|
||||
? {
|
||||
|
||||
@@ -39,7 +39,7 @@ function getInstance(): Combokeys {
|
||||
|
||||
export function merge(callbacks: ShortcutCallbacks) {
|
||||
const inst = getInstance();
|
||||
Object.keys(callbacks).forEach(name => {
|
||||
Object.keys(callbacks).forEach((name) => {
|
||||
const keysHandler = callbacks[name];
|
||||
if (keysHandler) {
|
||||
inst.bind(keyboardMappings[name].binding, keysHandler);
|
||||
|
||||
@@ -107,7 +107,7 @@ export default class PathElem {
|
||||
...this.toJSONHelper(),
|
||||
memberOf: {
|
||||
focalIdx: this.memberOf.focalIdx,
|
||||
members: this.memberOf.members.map(member => member.toJSONHelper()),
|
||||
members: this.memberOf.members.map((member) => member.toJSONHelper()),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
export const simplePayloadElemMaker = label => ({
|
||||
export const simplePayloadElemMaker = (label) => ({
|
||||
operation: `${label}Operation`,
|
||||
service: `${label}Service`,
|
||||
});
|
||||
@@ -24,7 +24,7 @@ const sameFocalServicePayloadElem = {
|
||||
service: focalPayloadElem.service,
|
||||
};
|
||||
|
||||
const pathLengthener = path => {
|
||||
const pathLengthener = (path) => {
|
||||
const prequels = [];
|
||||
const sequels = [];
|
||||
path.forEach(({ operation, service }) => {
|
||||
@@ -116,6 +116,6 @@ export const generationPaths = [
|
||||
[generationPayloadElems.target, generationPayloadElems.beforeFocalMid, focalPayloadElem],
|
||||
];
|
||||
|
||||
export const wrap = paths => ({
|
||||
dependencies: paths.map(path => ({ path, attributes: [] })),
|
||||
export const wrap = (paths) => ({
|
||||
dependencies: paths.map((path) => ({ path, attributes: [] })),
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ describe('processTemplate()', () => {
|
||||
it('correctly replaces variables', () => {
|
||||
const processedTemplate = processTemplate(
|
||||
'this is a test with #{oneVariable}#{anotherVariable} and the same #{oneVariable}',
|
||||
a => a
|
||||
(a) => a
|
||||
);
|
||||
expect(processedTemplate.parameters).toEqual(['oneVariable', 'anotherVariable']);
|
||||
expect(processedTemplate.template({ oneVariable: 'MYFIRSTVAR', anotherVariable: 'SECOND' })).toBe(
|
||||
@@ -38,7 +38,7 @@ describe('processTemplate()', () => {
|
||||
it('correctly uses the encoding function', () => {
|
||||
const processedTemplate = processTemplate(
|
||||
'this is a test with #{oneVariable}#{anotherVariable} and the same #{oneVariable}',
|
||||
e => `/${e}\\`
|
||||
(e) => `/${e}\\`
|
||||
);
|
||||
expect(processedTemplate.parameters).toEqual(['oneVariable', 'anotherVariable']);
|
||||
expect(processedTemplate.template({ oneVariable: 'MYFIRSTVAR', anotherVariable: 'SECOND' })).toBe(
|
||||
@@ -64,9 +64,9 @@ describe('processTemplate()', () => {
|
||||
expect(() =>
|
||||
processTemplate(
|
||||
{
|
||||
template: data => `a${data.b}c`,
|
||||
template: (data) => `a${data.b}c`,
|
||||
},
|
||||
a => a
|
||||
(a) => a
|
||||
)
|
||||
).toThrow();
|
||||
expect(() =>
|
||||
@@ -74,10 +74,10 @@ describe('processTemplate()', () => {
|
||||
{
|
||||
parameters: ['b'],
|
||||
},
|
||||
a => a
|
||||
(a) => a
|
||||
)
|
||||
).toThrow();
|
||||
expect(() => processTemplate({}, a => a)).toThrow();
|
||||
expect(() => processTemplate({}, (a) => a)).toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ export function processLinkPattern(pattern: any): ProcessedLinkPattern | TNil {
|
||||
|
||||
export function getParameterInArray(name: string, array: TraceKeyValuePair[]) {
|
||||
if (array) {
|
||||
return array.find(entry => entry.key === name);
|
||||
return array.find((entry) => entry.key === name);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
@@ -144,14 +144,14 @@ function callTemplate(template: ProcessedTemplate, data: any) {
|
||||
export function computeTraceLink(linkPatterns: ProcessedLinkPattern[], trace: Trace) {
|
||||
const result: TLinksRV = [];
|
||||
const validKeys = (Object.keys(trace) as Array<keyof Trace>).filter(
|
||||
key => typeof trace[key] === 'string' || trace[key] === 'number'
|
||||
(key) => typeof trace[key] === 'string' || trace[key] === 'number'
|
||||
);
|
||||
|
||||
linkPatterns
|
||||
.filter(pattern => pattern.type('traces'))
|
||||
.forEach(pattern => {
|
||||
.filter((pattern) => pattern.type('traces'))
|
||||
.forEach((pattern) => {
|
||||
const parameterValues: Record<string, any> = {};
|
||||
const allParameters = pattern.parameters.every(parameter => {
|
||||
const allParameters = pattern.parameters.every((parameter) => {
|
||||
const key = parameter as keyof Trace;
|
||||
if (validKeys.includes(key)) {
|
||||
// At this point is safe to access to trace object using parameter variable because
|
||||
@@ -189,10 +189,10 @@ export function computeLinks(
|
||||
type = 'tags';
|
||||
}
|
||||
const result: Array<{ url: string; text: string }> = [];
|
||||
linkPatterns.forEach(pattern => {
|
||||
linkPatterns.forEach((pattern) => {
|
||||
if (pattern.type(type) && pattern.key(item.key) && pattern.value(item.value)) {
|
||||
const parameterValues: Record<string, any> = {};
|
||||
const allParameters = pattern.parameters.every(parameter => {
|
||||
const allParameters = pattern.parameters.every((parameter) => {
|
||||
let entry = getParameterInArray(parameter, items);
|
||||
if (!entry && !processTags) {
|
||||
// do not look in ancestors for process tags because the same object may appear in different places in the hierarchy
|
||||
|
||||
@@ -20,6 +20,6 @@ import { TraceSpan } from '@grafana/data';
|
||||
* @returns {TraceSpan|null} The parent span if there is one, null otherwise.
|
||||
*/
|
||||
export function getParent(span: TraceSpan) {
|
||||
const parentRef = span.references ? span.references.find(ref => ref.refType === 'CHILD_OF') : null;
|
||||
const parentRef = span.references ? span.references.find((ref) => ref.refType === 'CHILD_OF') : null;
|
||||
return parentRef ? parentRef.span : null;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,6 @@
|
||||
import { TraceSpan } from '@grafana/data';
|
||||
|
||||
export function getTraceName(spans: TraceSpan[]): string {
|
||||
const span = spans.filter(sp => !sp.references || !sp.references.length)[0];
|
||||
const span = spans.filter((sp) => !sp.references || !sp.references.length)[0];
|
||||
return span ? `${span.process.serviceName}: ${span.operationName}` : '';
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ import TreeNode from '../utils/TreeNode';
|
||||
export function deduplicateTags(spanTags: TraceKeyValuePair[]) {
|
||||
const warningsHash: Map<string, string> = new Map<string, string>();
|
||||
const tags: TraceKeyValuePair[] = spanTags.reduce<TraceKeyValuePair[]>((uniqueTags, tag) => {
|
||||
if (!uniqueTags.some(t => t.key === tag.key && t.value === tag.value)) {
|
||||
if (!uniqueTags.some((t) => t.key === tag.key && t.value === tag.value)) {
|
||||
uniqueTags.push(tag);
|
||||
} else {
|
||||
warningsHash.set(`${tag.key}:${tag.value}`, `Duplicate tag "${tag.key}:${tag.value}"`);
|
||||
@@ -83,7 +83,7 @@ export default function transformTraceData(data: TraceViewData | undefined): Tra
|
||||
const spanMap = new Map<string, TraceSpan>();
|
||||
// filter out spans with empty start times
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
data.spans = data.spans.filter(span => Boolean(span.startTime));
|
||||
data.spans = data.spans.filter((span) => Boolean(span.startTime));
|
||||
|
||||
const max = data.spans.length;
|
||||
for (let i = 0; i < max; i++) {
|
||||
@@ -166,7 +166,7 @@ export default function transformTraceData(data: TraceViewData | undefined): Tra
|
||||
});
|
||||
spans.push(span);
|
||||
});
|
||||
const services = Object.keys(svcCounts).map(name => ({ name, numberOfSpans: svcCounts[name] }));
|
||||
const services = Object.keys(svcCounts).map((name) => ({ name, numberOfSpans: svcCounts[name] }));
|
||||
return {
|
||||
services,
|
||||
spans,
|
||||
|
||||
@@ -26,9 +26,9 @@ describe('scroll-by', () => {
|
||||
window.scrollY = 100;
|
||||
tweenInstances.length = 0;
|
||||
Tween.mockClear();
|
||||
Tween.mockImplementation(opts => {
|
||||
Tween.mockImplementation((opts) => {
|
||||
const rv = { to: opts.to, onUpdate: opts.onUpdate };
|
||||
Object.keys(Tween.prototype).forEach(name => {
|
||||
Object.keys(Tween.prototype).forEach((name) => {
|
||||
if (name !== 'constructor') {
|
||||
rv[name] = jest.fn();
|
||||
}
|
||||
|
||||
@@ -12,5 +12,5 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
export const getProcessServiceName = proc => proc.serviceName;
|
||||
export const getProcessTags = proc => proc.tags;
|
||||
export const getProcessServiceName = (proc) => proc.serviceName;
|
||||
export const getProcessTags = (proc) => proc.tags;
|
||||
|
||||
@@ -17,23 +17,23 @@ import fuzzy from 'fuzzy';
|
||||
|
||||
import { getProcessServiceName } from './process';
|
||||
|
||||
export const getSpanId = span => span.spanID;
|
||||
export const getSpanName = span => span.operationName;
|
||||
export const getSpanDuration = span => span.duration;
|
||||
export const getSpanTimestamp = span => span.startTime;
|
||||
export const getSpanProcessId = span => span.processID;
|
||||
export const getSpanReferences = span => span.references || [];
|
||||
export const getSpanId = (span) => span.spanID;
|
||||
export const getSpanName = (span) => span.operationName;
|
||||
export const getSpanDuration = (span) => span.duration;
|
||||
export const getSpanTimestamp = (span) => span.startTime;
|
||||
export const getSpanProcessId = (span) => span.processID;
|
||||
export const getSpanReferences = (span) => span.references || [];
|
||||
export const getSpanReferenceByType = createSelector(
|
||||
createSelector(({ span }) => span, getSpanReferences),
|
||||
({ type }) => type,
|
||||
(references, type) => references.find(ref => ref.refType === type)
|
||||
(references, type) => references.find((ref) => ref.refType === type)
|
||||
);
|
||||
export const getSpanParentId = createSelector(
|
||||
span => getSpanReferenceByType({ span, type: 'CHILD_OF' }),
|
||||
childOfRef => (childOfRef ? childOfRef.spanID : null)
|
||||
(span) => getSpanReferenceByType({ span, type: 'CHILD_OF' }),
|
||||
(childOfRef) => (childOfRef ? childOfRef.spanID : null)
|
||||
);
|
||||
|
||||
export const getSpanProcess = span => {
|
||||
export const getSpanProcess = (span) => {
|
||||
if (!span.process) {
|
||||
throw new Error(
|
||||
`
|
||||
@@ -53,7 +53,7 @@ export const filterSpansForTimestamps = createSelector(
|
||||
({ leftBound }) => leftBound,
|
||||
({ rightBound }) => rightBound,
|
||||
(spans, leftBound, rightBound) =>
|
||||
spans.filter(span => getSpanTimestamp(span) >= leftBound && getSpanTimestamp(span) <= rightBound)
|
||||
spans.filter((span) => getSpanTimestamp(span) >= leftBound && getSpanTimestamp(span) <= rightBound)
|
||||
);
|
||||
|
||||
export const filterSpansForText = createSelector(
|
||||
@@ -62,12 +62,12 @@ export const filterSpansForText = createSelector(
|
||||
(spans, text) =>
|
||||
fuzzy
|
||||
.filter(text, spans, {
|
||||
extract: span => `${getSpanServiceName(span)} ${getSpanName(span)}`,
|
||||
extract: (span) => `${getSpanServiceName(span)} ${getSpanName(span)}`,
|
||||
})
|
||||
.map(({ original }) => original)
|
||||
);
|
||||
|
||||
const getTextFilterdSpansAsMap = createSelector(filterSpansForText, matchingSpans =>
|
||||
const getTextFilterdSpansAsMap = createSelector(filterSpansForText, (matchingSpans) =>
|
||||
matchingSpans.reduce(
|
||||
(obj, span) => ({
|
||||
...obj,
|
||||
@@ -81,7 +81,7 @@ export const highlightSpansForTextFilter = createSelector(
|
||||
({ spans }) => spans,
|
||||
getTextFilterdSpansAsMap,
|
||||
(spans, textFilteredSpansMap) =>
|
||||
spans.map(span => ({
|
||||
spans.map((span) => ({
|
||||
...span,
|
||||
muted: !textFilteredSpansMap[getSpanId(span)],
|
||||
}))
|
||||
|
||||
@@ -27,22 +27,22 @@ import { formatMillisecondTime, formatSecondTime, ONE_SECOND } from '../utils/da
|
||||
import { numberSortComparator } from '../utils/sort';
|
||||
import TreeNode from '../utils/TreeNode';
|
||||
|
||||
export const getTraceId = trace => trace.traceID;
|
||||
export const getTraceId = (trace) => trace.traceID;
|
||||
|
||||
export const getTraceSpans = trace => trace.spans;
|
||||
export const getTraceSpans = (trace) => trace.spans;
|
||||
|
||||
const getTraceProcesses = trace => trace.processes;
|
||||
const getTraceProcesses = (trace) => trace.processes;
|
||||
|
||||
const getSpanWithProcess = createSelector(
|
||||
state => state.span,
|
||||
state => state.processes,
|
||||
(state) => state.span,
|
||||
(state) => state.processes,
|
||||
(span, processes) => ({
|
||||
...span,
|
||||
process: processes[getSpanProcessId(span)],
|
||||
})
|
||||
);
|
||||
|
||||
export const getTraceSpansAsMap = createSelector(getTraceSpans, spans =>
|
||||
export const getTraceSpansAsMap = createSelector(getTraceSpans, (spans) =>
|
||||
spans.reduce((map, span) => map.set(getSpanId(span), span), new Map())
|
||||
);
|
||||
|
||||
@@ -63,10 +63,10 @@ export const TREE_ROOT_ID = '__root__';
|
||||
* between spans in the trace.
|
||||
*/
|
||||
export function getTraceSpanIdsAsTree(trace) {
|
||||
const nodesById = new Map(trace.spans.map(span => [span.spanID, new TreeNode(span.spanID)]));
|
||||
const spansById = new Map(trace.spans.map(span => [span.spanID, span]));
|
||||
const nodesById = new Map(trace.spans.map((span) => [span.spanID, new TreeNode(span.spanID)]));
|
||||
const spansById = new Map(trace.spans.map((span) => [span.spanID, span]));
|
||||
const root = new TreeNode(TREE_ROOT_ID);
|
||||
trace.spans.forEach(span => {
|
||||
trace.spans.forEach((span) => {
|
||||
const node = nodesById.get(span.spanID);
|
||||
if (Array.isArray(span.references) && span.references.length) {
|
||||
const { refType, spanID: parentID } = span.references[0];
|
||||
@@ -85,7 +85,7 @@ export function getTraceSpanIdsAsTree(trace) {
|
||||
const b = spansById.get(nodeB.value);
|
||||
return +(a.startTime > b.startTime) || +(a.startTime === b.startTime) - 1;
|
||||
};
|
||||
trace.spans.forEach(span => {
|
||||
trace.spans.forEach((span) => {
|
||||
const node = nodesById.get(span.spanID);
|
||||
if (node.children.length > 1) {
|
||||
node.children.sort(comparator);
|
||||
@@ -96,19 +96,19 @@ export function getTraceSpanIdsAsTree(trace) {
|
||||
}
|
||||
|
||||
// attach "process" as an object to each span.
|
||||
export const hydrateSpansWithProcesses = trace => {
|
||||
export const hydrateSpansWithProcesses = (trace) => {
|
||||
const spans = getTraceSpans(trace);
|
||||
const processes = getTraceProcesses(trace);
|
||||
|
||||
return {
|
||||
...trace,
|
||||
spans: spans.map(span => getSpanWithProcess({ span, processes })),
|
||||
spans: spans.map((span) => getSpanWithProcess({ span, processes })),
|
||||
};
|
||||
};
|
||||
|
||||
export const getTraceSpanCount = createSelector(getTraceSpans, spans => spans.length);
|
||||
export const getTraceSpanCount = createSelector(getTraceSpans, (spans) => spans.length);
|
||||
|
||||
export const getTraceTimestamp = createSelector(getTraceSpans, spans =>
|
||||
export const getTraceTimestamp = createSelector(getTraceSpans, (spans) =>
|
||||
spans.reduce(
|
||||
(prevTimestamp, span) => (prevTimestamp ? Math.min(prevTimestamp, getSpanTimestamp(span)) : getSpanTimestamp(span)),
|
||||
null
|
||||
@@ -136,26 +136,26 @@ export const getParentSpan = createSelector(
|
||||
getTraceSpansAsMap,
|
||||
(tree, spanMap) =>
|
||||
tree.children
|
||||
.map(node => spanMap.get(node.value))
|
||||
.map((node) => spanMap.get(node.value))
|
||||
.sort((spanA, spanB) => numberSortComparator(getSpanTimestamp(spanA), getSpanTimestamp(spanB)))[0]
|
||||
);
|
||||
|
||||
export const getTraceDepth = createSelector(getTraceSpanIdsAsTree, spanTree => spanTree.depth - 1);
|
||||
export const getTraceDepth = createSelector(getTraceSpanIdsAsTree, (spanTree) => spanTree.depth - 1);
|
||||
|
||||
export const getSpanDepthForTrace = createSelector(
|
||||
createSelector(state => state.trace, getTraceSpanIdsAsTree),
|
||||
createSelector(state => state.span, getSpanId),
|
||||
createSelector((state) => state.trace, getTraceSpanIdsAsTree),
|
||||
createSelector((state) => state.span, getSpanId),
|
||||
(node, spanID) => node.getPath(spanID).length - 1
|
||||
);
|
||||
|
||||
export const getTraceServices = createSelector(getTraceProcesses, processes =>
|
||||
export const getTraceServices = createSelector(getTraceProcesses, (processes) =>
|
||||
Object.keys(processes).reduce(
|
||||
(services, processID) => services.add(getProcessServiceName(processes[processID])),
|
||||
new Set()
|
||||
)
|
||||
);
|
||||
|
||||
export const getTraceServiceCount = createSelector(getTraceServices, services => services.size);
|
||||
export const getTraceServiceCount = createSelector(getTraceServices, (services) => services.size);
|
||||
|
||||
// establish constants to determine how math should be handled
|
||||
// for nanosecond-to-millisecond conversions.
|
||||
@@ -164,7 +164,7 @@ export const DURATION_FORMATTERS = {
|
||||
s: formatSecondTime,
|
||||
};
|
||||
|
||||
const getDurationFormatterForTrace = createSelector(getTraceDuration, totalDuration =>
|
||||
const getDurationFormatterForTrace = createSelector(getTraceDuration, (totalDuration) =>
|
||||
totalDuration >= ONE_SECOND ? DURATION_FORMATTERS.s : DURATION_FORMATTERS.ms
|
||||
);
|
||||
|
||||
@@ -188,16 +188,16 @@ export const getSortedSpans = createSelector(
|
||||
[...spans].sort((spanA, spanB) => dir * comparator(selector(spanA, trace), selector(spanB, trace)))
|
||||
);
|
||||
|
||||
const getTraceSpansByHierarchyPosition = createSelector(getTraceSpanIdsAsTree, tree => {
|
||||
const getTraceSpansByHierarchyPosition = createSelector(getTraceSpanIdsAsTree, (tree) => {
|
||||
const hierarchyPositionMap = new Map();
|
||||
let i = 0;
|
||||
tree.walk(spanID => hierarchyPositionMap.set(spanID, i++));
|
||||
tree.walk((spanID) => hierarchyPositionMap.set(spanID, i++));
|
||||
return hierarchyPositionMap;
|
||||
});
|
||||
|
||||
export const getTreeSizeForTraceSpan = createSelector(
|
||||
createSelector(state => state.trace, getTraceSpanIdsAsTree),
|
||||
createSelector(state => state.span, getSpanId),
|
||||
createSelector((state) => state.trace, getTraceSpanIdsAsTree),
|
||||
createSelector((state) => state.span, getSpanId),
|
||||
(tree, spanID) => {
|
||||
const node = tree.find(spanID);
|
||||
if (!node) {
|
||||
@@ -230,11 +230,11 @@ export const omitCollapsedSpans = createSelector(
|
||||
({ collapsed }) => collapsed,
|
||||
(spans, tree, collapse) => {
|
||||
const hiddenSpanIds = collapse.reduce((result, collapsedSpanId) => {
|
||||
tree.find(collapsedSpanId).walk(id => id !== collapsedSpanId && result.add(id));
|
||||
tree.find(collapsedSpanId).walk((id) => id !== collapsedSpanId && result.add(id));
|
||||
return result;
|
||||
}, new Set());
|
||||
|
||||
return hiddenSpanIds.size > 0 ? spans.filter(span => !hiddenSpanIds.has(getSpanId(span))) : spans;
|
||||
return hiddenSpanIds.size > 0 ? spans.filter((span) => !hiddenSpanIds.has(getSpanId(span))) : spans;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -250,7 +250,7 @@ export const getTicksForTrace = createSelector(
|
||||
width
|
||||
// timestamps will be spaced over the interval, starting from the initial timestamp
|
||||
) =>
|
||||
[...Array(interval + 1).keys()].map(num => ({
|
||||
[...Array(interval + 1).keys()].map((num) => ({
|
||||
timestamp: getTraceTimestamp(trace) + getTraceDuration(trace) * (num / interval),
|
||||
width,
|
||||
}))
|
||||
@@ -259,7 +259,7 @@ export const getTicksForTrace = createSelector(
|
||||
// TODO: delete this when the backend can ensure uniqueness
|
||||
/* istanbul ignore next */
|
||||
export const enforceUniqueSpanIds = createSelector(
|
||||
/* istanbul ignore next */ trace => trace,
|
||||
/* istanbul ignore next */ (trace) => trace,
|
||||
getTraceSpans,
|
||||
/* istanbul ignore next */ (trace, spans) => {
|
||||
const map = new Map();
|
||||
@@ -286,10 +286,10 @@ export const enforceUniqueSpanIds = createSelector(
|
||||
|
||||
// TODO: delete this when the backend can ensure uniqueness
|
||||
export const dropEmptyStartTimeSpans = createSelector(
|
||||
/* istanbul ignore next */ trace => trace,
|
||||
/* istanbul ignore next */ (trace) => trace,
|
||||
getTraceSpans,
|
||||
/* istanbul ignore next */ (trace, spans) => ({
|
||||
...trace,
|
||||
spans: spans.filter(span => !!getSpanTimestamp(span)),
|
||||
spans: spans.filter((span) => !!getSpanTimestamp(span)),
|
||||
})
|
||||
);
|
||||
|
||||
@@ -37,15 +37,15 @@ it('getTraceId() should return the traceID', () => {
|
||||
it('hydrateSpansWithProcesses() should return the trace with processes on each span', () => {
|
||||
const hydratedTrace = traceSelectors.hydrateSpansWithProcesses(generatedTrace);
|
||||
|
||||
hydratedTrace.spans.forEach(span =>
|
||||
hydratedTrace.spans.forEach((span) =>
|
||||
expect(getSpanProcess(span)).toBe(generatedTrace.processes[getSpanProcessId(span)])
|
||||
);
|
||||
});
|
||||
|
||||
it('getTraceSpansAsMap() should return a map of all of the spans', () => {
|
||||
const spanMap = traceSelectors.getTraceSpansAsMap(generatedTrace);
|
||||
[...spanMap.entries()].forEach(pair => {
|
||||
expect(pair[1]).toEqual(generatedTrace.spans.find(span => getSpanId(span) === pair[0]));
|
||||
[...spanMap.entries()].forEach((pair) => {
|
||||
expect(pair[1]).toEqual(generatedTrace.spans.find((span) => getSpanId(span) === pair[0]));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -56,7 +56,7 @@ describe('getTraceSpanIdsAsTree()', () => {
|
||||
|
||||
tree.walk((value, node) => {
|
||||
const expectedParentValue = value === traceSelectors.TREE_ROOT_ID ? null : value;
|
||||
node.children.forEach(childNode => {
|
||||
node.children.forEach((childNode) => {
|
||||
expect(getSpanParentId(spanMap.get(childNode.value))).toBe(expectedParentValue);
|
||||
});
|
||||
});
|
||||
@@ -134,7 +134,7 @@ it('getSpanDepthForTrace() should determine the depth of a given span in the par
|
||||
let depth = 2;
|
||||
let currentId = getSpanParentId(span);
|
||||
|
||||
const findCurrentSpanById = item => getSpanId(item) === currentId;
|
||||
const findCurrentSpanById = (item) => getSpanId(item) === currentId;
|
||||
while (currentId !== getSpanId(generatedTrace.spans[0])) {
|
||||
depth++;
|
||||
currentId = getSpanParentId(generatedTrace.spans.find(findCurrentSpanById));
|
||||
@@ -159,7 +159,7 @@ it('getSpanDepthForTrace() should determine the depth of a given span in the par
|
||||
|
||||
it('getTraceServices() should return an unique array of all services in the trace', () => {
|
||||
const svcs = [...traceSelectors.getTraceServices(generatedTrace)].sort();
|
||||
const set = new Set(_values(generatedTrace.processes).map(v => v.serviceName));
|
||||
const set = new Set(_values(generatedTrace.processes).map((v) => v.serviceName));
|
||||
const setSvcs = [...set.values()].sort();
|
||||
expect(svcs).toEqual(setSvcs);
|
||||
});
|
||||
|
||||
@@ -37,7 +37,7 @@ export default function ReferenceLink(props: ReferenceLinkProps) {
|
||||
|
||||
return (
|
||||
<ExternalLinkContext.Consumer>
|
||||
{createLinkToExternalSpan => {
|
||||
{(createLinkToExternalSpan) => {
|
||||
if (!createLinkToExternalSpan) {
|
||||
throw new Error("ExternalLinkContext does not have a value, you probably forgot to setup it's provider");
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ describe('DraggableManager', () => {
|
||||
() => instance.handleMouseMove({ ...baseMouseEvt, type }),
|
||||
() => instance.handleMouseLeave({ ...baseMouseEvt, type }),
|
||||
];
|
||||
throwers.forEach(thrower => expect(thrower).toThrow());
|
||||
throwers.forEach((thrower) => expect(thrower).toThrow());
|
||||
});
|
||||
|
||||
it('does nothing if already dragging', () => {
|
||||
@@ -170,7 +170,7 @@ describe('DraggableManager', () => {
|
||||
},
|
||||
];
|
||||
|
||||
cases.forEach(testCase => {
|
||||
cases.forEach((testCase) => {
|
||||
const { type, handler, callback, updateType } = testCase;
|
||||
const event = { ...baseMouseEvt, type };
|
||||
handler(event);
|
||||
@@ -288,7 +288,7 @@ describe('DraggableManager', () => {
|
||||
},
|
||||
];
|
||||
|
||||
cases.forEach(testCase => {
|
||||
cases.forEach((testCase) => {
|
||||
const { type, handler, callback, updateType } = testCase;
|
||||
const event = { ...baseMouseEvt, type };
|
||||
handler(event);
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ export default class DraggableManagerDemo extends React.PureComponent<{}, Dragga
|
||||
<section className="DraggableManagerDemo--scenario">
|
||||
<h2>Dragging a Sub-Region</h2>
|
||||
<p>Click and drag horizontally somewhere in the colored area, below.</p>
|
||||
<p>Value: {regionDragging && regionDragging.map(n => n.toFixed(3)).join(', ')}</p>
|
||||
<p>Value: {regionDragging && regionDragging.map((n) => n.toFixed(3)).join(', ')}</p>
|
||||
<div className="DraggableManagerDemo--realm">
|
||||
<RegionDemo regionCursor={regionCursor} regionDragging={regionDragging} updateState={this._updateState} />
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
export default class TreeNode {
|
||||
static iterFunction(fn, depth = 0) {
|
||||
return node => fn(node.value, node, depth);
|
||||
return (node) => fn(node.value, node, depth);
|
||||
}
|
||||
|
||||
static searchFunction(search) {
|
||||
|
||||
@@ -119,7 +119,7 @@ it('find() should return the found item for a function', () => {
|
||||
treeRoot.addChild(11);
|
||||
treeRoot.addChild(12);
|
||||
|
||||
expect(treeRoot.find(value => value === 6)).toEqual(secondChildNode);
|
||||
expect(treeRoot.find((value) => value === 6)).toEqual(secondChildNode);
|
||||
expect(treeRoot.find(12)).toEqual(new TreeNode(12));
|
||||
});
|
||||
|
||||
@@ -183,7 +183,7 @@ it('find() should return null for none found', () => {
|
||||
treeRoot.addChild(12);
|
||||
|
||||
expect(treeRoot.find(13)).toBe(null);
|
||||
expect(treeRoot.find(value => value === 'foo')).toBe(null);
|
||||
expect(treeRoot.find((value) => value === 'foo')).toBe(null);
|
||||
});
|
||||
|
||||
it('getPath() should return the path to the node', () => {
|
||||
@@ -262,7 +262,7 @@ it('walk() should iterate over every item once in the right order', () => {
|
||||
|
||||
let i = 0;
|
||||
|
||||
treeRoot.walk(value => expect(value).toBe(++i));
|
||||
treeRoot.walk((value) => expect(value).toBe(++i));
|
||||
});
|
||||
|
||||
it('walk() should iterate over every item and compute the right deep on each node', () => {
|
||||
|
||||
@@ -30,7 +30,7 @@ export default function filterSpans(textFilter: string, spans: TraceSpan[] | TNi
|
||||
textFilter
|
||||
.split(/\s+/)
|
||||
.filter(Boolean)
|
||||
.forEach(w => {
|
||||
.forEach((w) => {
|
||||
if (w[0] === '-') {
|
||||
excludeKeys.push(w.substr(1).toLowerCase());
|
||||
} else {
|
||||
@@ -39,11 +39,11 @@ export default function filterSpans(textFilter: string, spans: TraceSpan[] | TNi
|
||||
});
|
||||
|
||||
const isTextInFilters = (filters: string[], text: string) =>
|
||||
filters.some(filter => text.toLowerCase().includes(filter));
|
||||
filters.some((filter) => text.toLowerCase().includes(filter));
|
||||
|
||||
const isTextInKeyValues = (kvs: TraceKeyValuePair[]) =>
|
||||
kvs
|
||||
? kvs.some(kv => {
|
||||
? kvs.some((kv) => {
|
||||
// ignore checking key and value for a match if key is in excludeKeys
|
||||
if (isTextInFilters(excludeKeys, kv.key)) {
|
||||
return false;
|
||||
@@ -57,9 +57,9 @@ export default function filterSpans(textFilter: string, spans: TraceSpan[] | TNi
|
||||
isTextInFilters(includeFilters, span.operationName) ||
|
||||
isTextInFilters(includeFilters, span.process.serviceName) ||
|
||||
isTextInKeyValues(span.tags) ||
|
||||
span.logs.some(log => isTextInKeyValues(log.fields)) ||
|
||||
span.logs.some((log) => isTextInKeyValues(log.fields)) ||
|
||||
isTextInKeyValues(span.process.tags) ||
|
||||
includeFilters.some(filter => filter === span.spanID);
|
||||
includeFilters.some((filter) => filter === span.spanID);
|
||||
|
||||
// declare as const because need to disambiguate the type
|
||||
const rv: Set<string> = new Set(spans.filter(isSpanAMatch).map((span: TraceSpan) => span.spanID));
|
||||
|
||||
@@ -30,7 +30,7 @@ export function polyfill(target, msElapse = DEFAULT_ELAPSE) {
|
||||
_target.requestAnimationFrame = requestAnimationFrame;
|
||||
} else {
|
||||
// eslint-disable-next-line no-param-reassign, no-shadow
|
||||
_target.requestAnimationFrame = callback => setTimeout(callback, msElapse);
|
||||
_target.requestAnimationFrame = (callback) => setTimeout(callback, msElapse);
|
||||
}
|
||||
}
|
||||
if (!_target.cancelAnimationFrame) {
|
||||
|
||||
Reference in New Issue
Block a user