Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@ import {APP_STARTS_DASHBOARD_TITLE} from 'sentry/views/dashboards/utils/prebuilt
import {WIDGET_COLUMN_LABELS} from 'sentry/views/dashboards/utils/prebuiltConfigs/settings';
import {ModuleName, SpanFields} from 'sentry/views/insights/types';

const TRANSACTION_OP_CONDITION = `${SpanFields.TRANSACTION_OP}:[ui.load,navigation]`;
const COLD_START_CONDITION = `${SpanFields.SPAN_OP}:app.start.cold ${SpanFields.SPAN_DESCRIPTION}:["Cold Start","Cold App Start"]`;
const WARM_START_CONDITION = `${SpanFields.SPAN_OP}:app.start.warm ${SpanFields.SPAN_DESCRIPTION}:["Warm Start","Warm App Start"]`;
const COLD_START_CONDITION = `has:${SpanFields.APP_VITALS_START_COLD_VALUE}`;
const WARM_START_CONDITION = `has:${SpanFields.APP_VITALS_START_WARM_VALUE}`;

const COLD_START_TABLE_OPERATIONS_CONDITION = `!${SpanFields.SPAN_DESCRIPTION}:"Cold Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm Start" !${SpanFields.SPAN_DESCRIPTION}:"Cold App Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm App Start" !${SpanFields.SPAN_DESCRIPTION}:"Initial Frame Render" has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation] has:ttid app_start_type:cold ${SpanFields.SPAN_OP}:[app.start.cold,app.start.warm,contentprovider.load,application.load,activity.load,ui.load,process.load]`;
const COLD_START_TABLE_OPERATIONS_CONDITION = `!${SpanFields.SPAN_DESCRIPTION}:"Cold Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm Start" !${SpanFields.SPAN_DESCRIPTION}:"Cold App Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm App Start" !${SpanFields.SPAN_DESCRIPTION}:"Initial Frame Render" has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation,app.start] has:ttid ${SpanFields.APP_VITALS_START_TYPE}:cold ${SpanFields.SPAN_OP}:[app.start.cold,app.start.warm,contentprovider.load,application.load,activity.load,ui.load,process.load]`;

const WARM_START_TABLE_OPERATIONS_CONDITION = `!${SpanFields.SPAN_DESCRIPTION}:"Cold Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm Start" !${SpanFields.SPAN_DESCRIPTION}:"Cold App Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm App Start" !${SpanFields.SPAN_DESCRIPTION}:"Initial Frame Render" has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation] has:ttid app_start_type:warm ${SpanFields.SPAN_OP}:[app.start.cold,app.start.warm,contentprovider.load,application.load,activity.load,ui.load,process.load]`;
const WARM_START_TABLE_OPERATIONS_CONDITION = `!${SpanFields.SPAN_DESCRIPTION}:"Cold Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm Start" !${SpanFields.SPAN_DESCRIPTION}:"Cold App Start" !${SpanFields.SPAN_DESCRIPTION}:"Warm App Start" !${SpanFields.SPAN_DESCRIPTION}:"Initial Frame Render" has:${SpanFields.SPAN_DESCRIPTION} ${SpanFields.TRANSACTION_OP}:[ui.load,navigation,app.start] has:ttid ${SpanFields.APP_VITALS_START_TYPE}:warm ${SpanFields.SPAN_OP}:[app.start.cold,app.start.warm,contentprovider.load,application.load,activity.load,ui.load,process.load]`;

const AVG_COLD_STARTS_BIG_NUMBER_WIDGET: Widget = {
id: 'avg-cold-starts-big-number',
Expand All @@ -26,8 +25,8 @@ const AVG_COLD_STARTS_BIG_NUMBER_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.SPAN_DURATION})`],
aggregates: [`avg(${SpanFields.SPAN_DURATION})`],
fields: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
columns: [],
conditions: COLD_START_CONDITION,
orderby: '',
Expand All @@ -53,8 +52,8 @@ const TOTAL_COLD_START_COUNT_BIG_NUMBER_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`count(${SpanFields.SPAN_DURATION})`],
aggregates: [`count(${SpanFields.SPAN_DURATION})`],
fields: [`count(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
aggregates: [`count(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
columns: [],
conditions: COLD_START_CONDITION,
orderby: '',
Expand All @@ -80,8 +79,8 @@ const AVG_WARM_STARTS_BIG_NUMBER_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.SPAN_DURATION})`],
aggregates: [`avg(${SpanFields.SPAN_DURATION})`],
fields: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
columns: [],
conditions: WARM_START_CONDITION,
orderby: '',
Expand All @@ -107,8 +106,8 @@ const TOTAL_WARM_START_COUNT_BIG_NUMBER_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`count(${SpanFields.SPAN_DURATION})`],
aggregates: [`count(${SpanFields.SPAN_DURATION})`],
fields: [`count(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
aggregates: [`count(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
columns: [],
conditions: WARM_START_CONDITION,
orderby: '',
Expand All @@ -134,12 +133,12 @@ const AVG_COLD_START_LINE_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.SPAN_DURATION})`],
aggregates: [`avg(${SpanFields.SPAN_DURATION})`],
fields: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
columns: [],
fieldAliases: [],
conditions: COLD_START_CONDITION,
orderby: `-avg(${SpanFields.SPAN_DURATION})`,
orderby: `-avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`,
},
],
layout: {
Expand All @@ -162,12 +161,12 @@ const AVG_WARM_START_LINE_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.SPAN_DURATION})`],
aggregates: [`avg(${SpanFields.SPAN_DURATION})`],
fields: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
columns: [],
fieldAliases: [],
conditions: WARM_START_CONDITION,
orderby: `-avg(${SpanFields.SPAN_DURATION})`,
orderby: `-avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`,
},
],
layout: {
Expand All @@ -190,10 +189,10 @@ const COLD_START_DEVICE_DISTRIBUTION_WIDGET: Widget = {
queries: [
{
name: '',
fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_START_COLD})`],
aggregates: [`avg(${SpanFields.APP_START_COLD})`],
fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
columns: [SpanFields.DEVICE_CLASS],
conditions: TRANSACTION_OP_CONDITION,
conditions: COLD_START_CONDITION,
orderby: SpanFields.DEVICE_CLASS,
},
],
Expand All @@ -217,10 +216,10 @@ const WARM_START_DEVICE_DISTRIBUTION_WIDGET: Widget = {
queries: [
{
name: '',
fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_START_WARM})`],
aggregates: [`avg(${SpanFields.APP_START_WARM})`],
fields: [SpanFields.DEVICE_CLASS, `avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
columns: [SpanFields.DEVICE_CLASS],
conditions: TRANSACTION_OP_CONDITION,
conditions: WARM_START_CONDITION,
orderby: SpanFields.DEVICE_CLASS,
},
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,26 @@ import {TABLE_MIN_HEIGHT} from 'sentry/views/dashboards/utils/prebuiltConfigs/se
import {ModuleName, SpanFields} from 'sentry/views/insights/types';

const TRANSACTION_OP_CONDITION = `${SpanFields.TRANSACTION_OP}:[ui.load,navigation]`;
const COLD_START_CONDITION = `has:${SpanFields.APP_VITALS_START_COLD_VALUE}`;
const WARM_START_CONDITION = `has:${SpanFields.APP_VITALS_START_WARM_VALUE}`;
const TTID_CONDITION = `has:${SpanFields.APP_VITALS_TTID_VALUE}`;
const TTFD_CONDITION = `has:${SpanFields.APP_VITALS_TTFD_VALUE}`;

// Mirrors the appStarts.ts sub-dashboard which uses transaction.op without is_transaction:true.
// The has: checks already restrict results to spans with app start data. OR is intentional:
// a screen may only have warm-start data (app was already running) and should still appear.
const APP_START_CONDITION = `${TRANSACTION_OP_CONDITION} (has:${SpanFields.APP_START_COLD} OR has:${SpanFields.APP_START_WARM})`;
const APP_START_CONDITION = `${TRANSACTION_OP_CONDITION} (has:${SpanFields.APP_VITALS_START_COLD_VALUE} OR has:${SpanFields.APP_VITALS_START_WARM_VALUE})`;

// Filters to root transaction spans (is_transaction:true) since TTID/TTFD are only set on
// root spans. OR is intentional: TTFD can be absent while TTID is present
// (reportFullyDrawn() is opt-in).
const SCREEN_LOAD_CONDITION = `is_transaction:true ${TRANSACTION_OP_CONDITION} (has:${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY} OR has:${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`;
const SCREEN_LOAD_CONDITION = `is_transaction:true ${TRANSACTION_OP_CONDITION} (has:${SpanFields.APP_VITALS_TTID_VALUE} OR has:${SpanFields.APP_VITALS_TTFD_VALUE})`;

// Uses transaction.op (consistent with APP_START_CONDITION and SCREEN_LOAD_CONDITION) since
// this table groups by transaction. Requires mobile.total_frames to be present — a single
// `has:` on the shared denominator, because both the slow-frames and frozen-frames equations
// are undefined when total_frames is absent.
const SCREEN_RENDERING_CONDITION = `${TRANSACTION_OP_CONDITION} has:${SpanFields.MOBILE_TOTAL_FRAMES}`;
const SCREEN_RENDERING_CONDITION = `${TRANSACTION_OP_CONDITION} has:${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT}`;

const COLD_START_BIG_NUMBER_WIDGET: Widget = {
id: 'cold-start-big-number',
Expand All @@ -42,10 +46,10 @@ const COLD_START_BIG_NUMBER_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.APP_START_COLD})`],
aggregates: [`avg(${SpanFields.APP_START_COLD})`],
fields: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`],
columns: [],
conditions: TRANSACTION_OP_CONDITION,
conditions: COLD_START_CONDITION,
orderby: '',
},
],
Expand Down Expand Up @@ -75,10 +79,10 @@ const WARM_START_BIG_NUMBER_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.APP_START_WARM})`],
aggregates: [`avg(${SpanFields.APP_START_WARM})`],
fields: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`],
columns: [],
conditions: TRANSACTION_OP_CONDITION,
conditions: WARM_START_CONDITION,
orderby: '',
},
],
Expand All @@ -102,10 +106,10 @@ const AVG_TTID_BIG_NUMBER_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`],
aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`],
fields: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_TTID_VALUE})`],
columns: [],
conditions: TRANSACTION_OP_CONDITION,
conditions: TTID_CONDITION,
orderby: '',
},
],
Expand All @@ -129,10 +133,10 @@ const AVG_TTFD_BIG_NUMBER_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`],
aggregates: [`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`],
fields: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`],
columns: [],
conditions: TRANSACTION_OP_CONDITION,
conditions: TTFD_CONDITION,
orderby: '',
},
],
Expand Down Expand Up @@ -187,14 +191,14 @@ const SLOW_FRAME_RATE_WIDGET: Widget = {
{
name: '',
fields: [
`sum(${SpanFields.MOBILE_SLOW_FRAMES})`,
`sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`equation|sum(${SpanFields.MOBILE_SLOW_FRAMES}) / sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})`,
`sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
`equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT}) / sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
],
aggregates: [
`sum(${SpanFields.MOBILE_SLOW_FRAMES})`,
`sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`equation|sum(${SpanFields.MOBILE_SLOW_FRAMES}) / sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})`,
`sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
`equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT}) / sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
],
selectedAggregate: 2,
columns: [],
Expand Down Expand Up @@ -223,14 +227,14 @@ const FROZEN_FRAME_RATE_WIDGET: Widget = {
{
name: '',
fields: [
`sum(${SpanFields.MOBILE_FROZEN_FRAMES})`,
`sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES}) / sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})`,
`sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
`equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT}) / sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
],
aggregates: [
`sum(${SpanFields.MOBILE_FROZEN_FRAMES})`,
`sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES}) / sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})`,
`sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
`equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT}) / sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
],
selectedAggregate: 2,
columns: [],
Expand Down Expand Up @@ -258,8 +262,8 @@ const AVG_FRAME_DELAY_WIDGET: Widget = {
queries: [
{
name: '',
fields: [`avg(${SpanFields.MOBILE_FRAMES_DELAY})`],
aggregates: [`avg(${SpanFields.MOBILE_FRAMES_DELAY})`],
fields: [`avg(${SpanFields.APP_VITALS_FRAMES_DELAY_VALUE})`],
aggregates: [`avg(${SpanFields.APP_VITALS_FRAMES_DELAY_VALUE})`],
columns: [],
conditions: TRANSACTION_OP_CONDITION,
orderby: '',
Expand Down Expand Up @@ -287,13 +291,13 @@ const APP_START_TABLE: Widget = {
name: '',
fields: [
SpanFields.TRANSACTION,
`avg(${SpanFields.APP_START_COLD})`,
`avg(${SpanFields.APP_START_WARM})`,
`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`,
`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`,
`count(${SpanFields.SPAN_DURATION})`,
],
aggregates: [
`avg(${SpanFields.APP_START_COLD})`,
`avg(${SpanFields.APP_START_WARM})`,
`avg(${SpanFields.APP_VITALS_START_COLD_VALUE})`,
`avg(${SpanFields.APP_VITALS_START_WARM_VALUE})`,
`count(${SpanFields.SPAN_DURATION})`,
],
columns: [SpanFields.TRANSACTION],
Expand Down Expand Up @@ -331,13 +335,13 @@ const SCREEN_RENDERING_TABLE: Widget = {
name: '',
fields: [
SpanFields.TRANSACTION,
`equation|sum(${SpanFields.MOBILE_SLOW_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
`equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
`count(${SpanFields.SPAN_DURATION})`,
],
aggregates: [
`equation|sum(${SpanFields.MOBILE_SLOW_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`equation|sum(${SpanFields.MOBILE_FROZEN_FRAMES})/sum(${SpanFields.MOBILE_TOTAL_FRAMES})`,
`equation|sum(${SpanFields.APP_VITALS_FRAMES_SLOW_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
`equation|sum(${SpanFields.APP_VITALS_FRAMES_FROZEN_COUNT})/sum(${SpanFields.APP_VITALS_FRAMES_TOTAL_COUNT})`,
`count(${SpanFields.SPAN_DURATION})`,
],
columns: [SpanFields.TRANSACTION],
Expand Down Expand Up @@ -380,13 +384,13 @@ const SCREEN_LOAD_TABLE: Widget = {
name: '',
fields: [
SpanFields.TRANSACTION,
`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`,
`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`,
`avg(${SpanFields.APP_VITALS_TTID_VALUE})`,
`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`,
`count(${SpanFields.SPAN_DURATION})`,
],
aggregates: [
`avg(${SpanFields.MEASUREMENTS_TIME_TO_INITIAL_DISPLAY})`,
`avg(${SpanFields.MEASUREMENTS_TIME_TO_FULL_DISPLAY})`,
`avg(${SpanFields.APP_VITALS_TTID_VALUE})`,
`avg(${SpanFields.APP_VITALS_TTFD_VALUE})`,
`count(${SpanFields.SPAN_DURATION})`,
],
columns: [SpanFields.TRANSACTION],
Expand Down
Loading
Loading