Skip to content

Commit 6a5425f

Browse files
authored
feat(discv2): event breakdown (#16142)
* event breakdown setup * styling list * added color * show 4 * recalculate percent * fixing percentages * fixing calculations * rounding percent * changing currentOp to currOp and css resort
1 parent 6d04f63 commit 6a5425f

File tree

2 files changed

+69
-7
lines changed

2 files changed

+69
-7
lines changed

src/sentry/static/sentry/app/views/eventsV2/eventDetails/content.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,12 @@ class EventDetailsContent extends AsyncComponent<Props, State> {
171171
/>
172172
</div>
173173
<div style={{gridColumn: '2/3', display: isSidebarVisible ? '' : 'none'}}>
174-
<EventBreakdown event={event} />
175174
<EventMetadata
176175
event={event}
177176
organization={organization}
178177
projectId={this.projectId}
179178
/>
179+
<EventBreakdown event={event} />
180180
{event.groupID && (
181181
<LinkedIssue groupId={event.groupID} eventId={event.eventID} />
182182
)}
@@ -350,7 +350,7 @@ const StyledTitle = styled('span')`
350350
`;
351351

352352
const MetaDataID = styled('div')`
353-
margin-bottom: ${space(3)};
353+
margin-bottom: ${space(4)};
354354
`;
355355

356356
const MetadataContainer = styled('div')`

src/sentry/static/sentry/app/views/eventsV2/eventDetails/transaction/eventBreakdown.tsx

+67-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react';
2+
import styled from 'react-emotion';
23
import get from 'lodash/get';
34

45
import {Event} from 'app/types';
@@ -7,11 +8,15 @@ import {
78
SpanEntry,
89
SpanType,
910
} from 'app/components/events/interfaces/spans/types';
11+
import {pickSpanBarColour} from 'app/components/events/interfaces/spans/utils';
1012
import {TraceContextType} from 'app/components/events/interfaces/spans/traceView';
13+
import {t} from 'app/locale';
14+
import space from 'app/styles/space';
15+
import {SectionHeading} from '../../styles';
1116

1217
type OpStats = {percentage: number; totalDuration: number};
1318

14-
const TOP_N_SPANS = 3;
19+
const TOP_N_SPANS = 4;
1520

1621
type EventBreakdownType = {
1722
// top TOP_N_SPANS spans
@@ -157,11 +162,68 @@ class EventBreakdown extends React.Component<Props> {
157162
return null;
158163
}
159164

160-
// TODO: Dora to take over
161-
// const results = this.generateCounts();
162-
163-
return null;
165+
const results = this.generateStats();
166+
167+
return (
168+
<StyledBreakdown>
169+
<SectionHeading>{t('Ops Breakdown')}</SectionHeading>
170+
{results.ops.map(currOp => {
171+
const {name, percentage, totalDuration} = currOp;
172+
const durLabel = Math.round(totalDuration * 1000 * 100) / 100;
173+
const pctLabel = Math.round(percentage * 100);
174+
const opsColor: string = pickSpanBarColour(name);
175+
176+
return (
177+
<OpsLine key={name}>
178+
<OpsContent>
179+
<OpsDot style={{backgroundColor: opsColor}} />
180+
<div>{name}</div>
181+
</OpsContent>
182+
<OpsContent>
183+
<Dur>{durLabel}ms</Dur>
184+
<Pct>{pctLabel}%</Pct>
185+
</OpsContent>
186+
</OpsLine>
187+
);
188+
})}
189+
</StyledBreakdown>
190+
);
164191
}
165192
}
166193

194+
const StyledBreakdown = styled('div')`
195+
color: ${p => p.theme.gray3};
196+
font-size: ${p => p.theme.fontSizeMedium};
197+
margin-bottom: ${space(4)};
198+
`;
199+
200+
const OpsLine = styled('div')`
201+
display: flex;
202+
justify-content: space-between;
203+
margin-bottom: ${space(0.5)};
204+
`;
205+
206+
const OpsDot = styled('div')`
207+
content: '';
208+
display: block;
209+
width: 8px;
210+
height: 8px;
211+
margin-right: ${space(1)};
212+
border-radius: 100%;
213+
`;
214+
215+
const OpsContent = styled('div')`
216+
display: flex;
217+
align-items: center;
218+
`;
219+
220+
const Dur = styled('div')`
221+
color: ${p => p.theme.gray2};
222+
`;
223+
224+
const Pct = styled('div')`
225+
min-width: 40px;
226+
text-align: right;
227+
`;
228+
167229
export default EventBreakdown;

0 commit comments

Comments
 (0)