Some checks failed
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
i18n upload strings / Upload latest strings (push) Failing after 0s
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 0s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 0s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 0s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Close inactive issues / close-issues (push) Failing after 3s
i18n download strings / Download latest strings (push) Failing after 0s
Post release marketing summary to Discord / Post release marketing summary to Discord (push) Failing after 0s
Post release crew to Discord / Post release crew to Discord (push) Failing after 0s
Prune preview deploys / Prune preview deploys (push) Failing after 1s
Staging E2E Daily Cleanup / Daily Cleanup of Test Files (push) Failing after 0s
4884 lines
168 KiB
YAML
4884 lines
168 KiB
YAML
apiVersion: dashboard.grafana.app/v2
|
|
kind: Dashboard
|
|
metadata:
|
|
annotations:
|
|
grafana.app/folder: dotcom
|
|
grafana.app/message: MCP metrics
|
|
grafana.app/saved-from-ui: Grafana Cloud
|
|
labels: {}
|
|
name: ni5k8zc
|
|
namespace: stacks-890472
|
|
spec:
|
|
annotations:
|
|
- kind: AnnotationQuery
|
|
spec:
|
|
builtIn: true
|
|
enable: true
|
|
hide: true
|
|
iconColor: rgba(0, 211, 255, 1)
|
|
name: Annotations & Alerts
|
|
query:
|
|
datasource:
|
|
name: -- Grafana --
|
|
group: grafana
|
|
kind: DataQuery
|
|
spec: {}
|
|
version: v0
|
|
cursorSync: Crosshair
|
|
editable: true
|
|
elements:
|
|
panel-2:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT count() as rooms_started
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'room_start'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
rawQuery: "SELECT count() as rooms_started
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'room_start'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: room_start events in the selected time range.
|
|
id: 2
|
|
links: []
|
|
title: Rooms started
|
|
vizConfig:
|
|
group: stat
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: thresholds
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
colorMode: value
|
|
graphMode: none
|
|
justifyMode: auto
|
|
orientation: auto
|
|
percentChangeColorMode: standard
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: false
|
|
showPercentChange: false
|
|
textMode: auto
|
|
wideLayout: true
|
|
version: 13.2.0-29854286369
|
|
panel-5:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT count() as failures
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'fail_persist'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
rawQuery: "SELECT count() as failures
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'fail_persist'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: fail_persist events (persist gave up after retries). Anything
|
|
above zero deserves a look.
|
|
id: 5
|
|
links: []
|
|
title: Persist failures
|
|
vizConfig:
|
|
group: stat
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: thresholds
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
- color: red
|
|
value: 1
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
colorMode: value
|
|
graphMode: none
|
|
justifyMode: auto
|
|
orientation: auto
|
|
percentChangeColorMode: standard
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: false
|
|
showPercentChange: false
|
|
textMode: auto
|
|
wideLayout: true
|
|
version: 13.2.0-29854286369
|
|
panel-7:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as event, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('room_create', 'room_reopen', 'enter', 'leave',
|
|
'last_out')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, event
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as event, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('room_create', 'room_reopen', 'enter', 'leave',
|
|
'last_out')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, event
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Connection lifecycle from TLFileDurableObject: creates, reopens,
|
|
enters, leaves.'
|
|
id: 7
|
|
links: []
|
|
title: Room lifecycle events
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-8:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as event, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('room_start', 'room_empty', 'failed_load_from_db',
|
|
'failed_persist_to_db', 'fail_persist')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, event
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as event, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('room_start', 'room_empty', 'failed_load_from_db',
|
|
'failed_persist_to_db', 'fail_persist')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, event
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Room starts/empties plus every failure path: failed loads, failed
|
|
persist attempts, and persists that gave up.'
|
|
id: 8
|
|
links: []
|
|
title: Room health & persistence events
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-9:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, count() as messages
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'send_message'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, count() as messages
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'send_message'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: send_message events from room durable objects (one per outgoing
|
|
sync message).
|
|
id: 9
|
|
links: []
|
|
title: Sync messages sent
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 25
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: false
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-10:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob4 as message_type, sum(double1) as bytes
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'send_message'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, message_type
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob4 as message_type, sum(double1) as bytes
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'send_message'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, message_type
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Outgoing message payload volume, split by message type (blob4).
|
|
double1 is the message length.
|
|
id: 10
|
|
links: []
|
|
title: Sync message bytes by type
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 30
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: bytes
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-11:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT blob4 as message_type, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'send_message'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY message_type
|
|
|
|
ORDER BY total DESC"
|
|
rawQuery: "SELECT blob4 as message_type, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'send_message'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY message_type
|
|
|
|
ORDER BY total DESC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Share of outgoing sync messages by type over the selected range.
|
|
id: 11
|
|
links: []
|
|
title: Message type mix
|
|
vizConfig:
|
|
group: piechart
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
fixedColor: '#73BF69'
|
|
mode: palette-classic
|
|
custom:
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
displayLabels:
|
|
- percent
|
|
legend:
|
|
displayMode: list
|
|
overflow: ellipsis
|
|
placement: right
|
|
showLegend: true
|
|
values: []
|
|
pieType: donut
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: true
|
|
sort: desc
|
|
tooltip:
|
|
hideZeros: false
|
|
mode: single
|
|
sort: none
|
|
version: 13.2.0-29854286369
|
|
panel-12:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, quantileWeighted(0.5, double1, _sample_interval)
|
|
as p50, quantileWeighted(0.95, double1, _sample_interval) as
|
|
p95, quantileWeighted(0.99, double1, _sample_interval) as p99
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'db_load_total'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, quantileWeighted(0.5, double1, _sample_interval)
|
|
as p50, quantileWeighted(0.95, double1, _sample_interval) as
|
|
p95, quantileWeighted(0.99, double1, _sample_interval) as p99
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'db_load_total'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Full room snapshot load time, weighted by _sample_interval to
|
|
account for Analytics Engine sampling.
|
|
id: 12
|
|
links: []
|
|
title: Room load latency percentiles (db_load_total)
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-13:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as stage, avg(double1) as avg_ms
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('on_request_total', 'on_request_auth', 'on_request_rate_limit',
|
|
'on_request_group_check', 'on_request_get_room')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, stage
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as stage, avg(double1) as avg_ms
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('on_request_total', 'on_request_auth', 'on_request_rate_limit',
|
|
'on_request_group_check', 'on_request_get_room')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, stage
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Average duration of each stage of a room connect request (auth,
|
|
rate limit, group check, get room, total).
|
|
id: 13
|
|
links: []
|
|
title: Connect request latency breakdown
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-14:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as stage, avg(double1) as avg_ms
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('create_from_source_fetch_total', 'create_from_source_r2_put',
|
|
'create_from_source_await_persist', 'create_from_source_r2_fetch',
|
|
'db_load_r2_fetch', 'db_load_supabase_fetch', 'db_load_create_from_source',
|
|
'db_load_comments')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, stage
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as stage, avg(double1) as avg_ms
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('create_from_source_fetch_total', 'create_from_source_r2_put',
|
|
'create_from_source_await_persist', 'create_from_source_r2_fetch',
|
|
'db_load_r2_fetch', 'db_load_supabase_fetch', 'db_load_create_from_source',
|
|
'db_load_comments')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, stage
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Average duration of file duplication stages and room load sub-stages.
|
|
id: 14
|
|
links: []
|
|
title: Create-from-source & load stage latency
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-15:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT blob1 as operation, avg(double1) as avg_ms
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('on_request_total', 'on_request_auth', 'on_request_rate_limit',
|
|
'on_request_group_check', 'on_request_get_room', 'get_file_record',
|
|
'get_file_record_error', 'db_load_total', 'db_load_total_error',
|
|
'db_load_r2_fetch', 'db_load_supabase_fetch', 'db_load_create_from_source', 'db_load_comments',
|
|
'create_from_source_fetch_total', 'create_from_source_r2_put',
|
|
'create_from_source_await_persist', 'create_from_source_r2_fetch')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY operation
|
|
|
|
ORDER BY avg_ms DESC"
|
|
rawQuery: "SELECT blob1 as operation, avg(double1) as avg_ms
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('on_request_total', 'on_request_auth', 'on_request_rate_limit',
|
|
'on_request_group_check', 'on_request_get_room', 'get_file_record',
|
|
'get_file_record_error', 'db_load_total', 'db_load_total_error',
|
|
'db_load_r2_fetch', 'db_load_supabase_fetch', 'db_load_create_from_source', 'db_load_comments',
|
|
'create_from_source_fetch_total', 'create_from_source_r2_put',
|
|
'create_from_source_await_persist', 'create_from_source_r2_fetch')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY operation
|
|
|
|
ORDER BY avg_ms DESC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Average duration of every timed operation in the selected range,
|
|
slowest first.
|
|
id: 15
|
|
links: []
|
|
title: Operation latency league table
|
|
vizConfig:
|
|
group: bargauge
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: continuous-GrYlRd
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
displayMode: gradient
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: false
|
|
maxVizHeight: 300
|
|
minVizHeight: 16
|
|
minVizWidth: 8
|
|
namePlacement: auto
|
|
orientation: horizontal
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: true
|
|
showUnfilled: true
|
|
sizing: auto
|
|
valueMode: color
|
|
version: 13.2.0-29854286369
|
|
panel-25:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as event, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('postgres_client_connect', 'postgres_client_end',
|
|
'postgres_client_error')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
AND blob3 != 'user-do'
|
|
|
|
GROUP BY date, event
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as event, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('postgres_client_connect', 'postgres_client_end',
|
|
'postgres_client_error')
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
AND blob3 != 'user-do'
|
|
|
|
GROUP BY date, event
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Connection lifecycle from the logging pg client: connect, end, error. Excludes user-do — it dials a fresh client per checkout at roughly 20x the volume of every other pool combined, and its teardown currently mis-fires an error event per release, which would drown this panel. user-do has its own dial, acquire and lifecycle panels below.'
|
|
id: 25
|
|
links: []
|
|
title: Postgres client connection events (excluding user-do)
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-26:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob3 as pool, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'postgres_client_connect'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, pool
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob3 as pool, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'postgres_client_connect'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, pool
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: postgres_client_connect events split by the pool name (blob3)
|
|
that opened them — shows which routes churn connections.
|
|
id: 26
|
|
links: []
|
|
title: Postgres connections by pool
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 30
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-27:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob2 as origin, count() as connects
|
|
|
|
FROM 'BEMO_ANALYTICS'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'connect'
|
|
|
|
GROUP BY date, origin
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob2 as origin, count() as connects
|
|
|
|
FROM 'BEMO_ANALYTICS'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'connect'
|
|
|
|
GROUP BY date, origin
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: BEMO_ANALYTICS dataset (demo sync server). blob1 is the event
|
|
type here — there is no worker-name column and no environment filter. Requires
|
|
the BEMO_ANALYTICS table in this datasource.
|
|
id: 27
|
|
links: []
|
|
title: Demo server connects by origin
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-28:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as direction, count() as total
|
|
|
|
FROM 'BEMO_ANALYTICS'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('send_message', 'receive_message')
|
|
|
|
GROUP BY date, direction
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob1 as direction, count() as total
|
|
|
|
FROM 'BEMO_ANALYTICS'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 IN ('send_message', 'receive_message')
|
|
|
|
GROUP BY date, direction
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Messages sent/received by demo rooms (one data point per message).
|
|
id: 28
|
|
links: []
|
|
title: Demo server message throughput
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 20
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-29:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT blob2 as origin, count() as total
|
|
|
|
FROM 'BEMO_ANALYTICS'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'connect'
|
|
|
|
GROUP BY origin
|
|
|
|
ORDER BY total DESC
|
|
|
|
LIMIT 12"
|
|
rawQuery: "SELECT blob2 as origin, count() as total
|
|
|
|
FROM 'BEMO_ANALYTICS'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'connect'
|
|
|
|
GROUP BY origin
|
|
|
|
ORDER BY total DESC
|
|
|
|
LIMIT 12"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Which domains embed the demo sync server, by connect count.
|
|
id: 29
|
|
links: []
|
|
title: Top embedding origins
|
|
vizConfig:
|
|
group: piechart
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
fixedColor: '#73BF69'
|
|
mode: palette-classic
|
|
custom:
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
displayLabels:
|
|
- percent
|
|
legend:
|
|
displayMode: list
|
|
overflow: ellipsis
|
|
placement: right
|
|
showLegend: true
|
|
values: []
|
|
pieType: donut
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: true
|
|
sort: desc
|
|
tooltip:
|
|
hideZeros: false
|
|
mode: single
|
|
sort: none
|
|
version: 13.2.0-29854286369
|
|
panel-33:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT count() as renders
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'browser_run_session'
|
|
|
|
AND blob4 = 'mode:screenshot'
|
|
|
|
AND blob5 = 'outcome:ok'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
rawQuery: "SELECT count() as renders
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'browser_run_session'
|
|
|
|
AND blob4 = 'mode:screenshot'
|
|
|
|
AND blob5 = 'outcome:ok'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Browser sessions that produced a PNG (browser_run_session rows
|
|
with mode:screenshot and outcome:ok), across the MCP tool and the OG queue.
|
|
Measure renders, cache hits, and failed sessions are excluded.
|
|
id: 33
|
|
links: []
|
|
title: Board screenshots rendered
|
|
vizConfig:
|
|
group: stat
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: thresholds
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
colorMode: value
|
|
graphMode: area
|
|
justifyMode: auto
|
|
orientation: auto
|
|
percentChangeColorMode: standard
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: false
|
|
showPercentChange: false
|
|
textMode: auto
|
|
wideLayout: true
|
|
version: 13.2.0-29854286369
|
|
panel-34:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT countIf(blob4 = 'cache:hit') / count() * 100
|
|
as hit_rate
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob3 = 'source:og'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
rawQuery: "SELECT countIf(blob4 = 'cache:hit') / count() * 100
|
|
as hit_rate
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob3 = 'source:og'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Share of GET /app/social-preview requests (source:og) served
|
|
straight from the R2 cache. Stale-but-served and never-rendered responses
|
|
count against it, since both trigger a background render.
|
|
id: 34
|
|
links: []
|
|
title: OG image cache hit rate
|
|
vizConfig:
|
|
group: stat
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: thresholds
|
|
max: 100
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: red
|
|
value: 0
|
|
- color: orange
|
|
value: 50
|
|
- color: green
|
|
value: 80
|
|
unit: percent
|
|
overrides: []
|
|
options:
|
|
colorMode: value
|
|
graphMode: none
|
|
justifyMode: auto
|
|
orientation: auto
|
|
percentChangeColorMode: standard
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: false
|
|
showPercentChange: false
|
|
textMode: auto
|
|
wideLayout: true
|
|
version: 13.2.0-29854286369
|
|
panel-35:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT count() as failures
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob5 != 'failure:none'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
rawQuery: "SELECT count() as failures
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob5 != 'failure:none'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Events carrying a failure reason code, across all three surfaces.
|
|
Sustained non-zero means boards are missing their previews — break it down
|
|
in the failures-by-reason panel below.
|
|
id: 35
|
|
links: []
|
|
title: Screenshot failures
|
|
vizConfig:
|
|
group: stat
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: thresholds
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
- color: red
|
|
value: 1
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
colorMode: value
|
|
graphMode: none
|
|
justifyMode: auto
|
|
orientation: auto
|
|
percentChangeColorMode: standard
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: false
|
|
showPercentChange: false
|
|
textMode: auto
|
|
wideLayout: true
|
|
version: 13.2.0-29854286369
|
|
panel-36:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT count() as blocked
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob6 = 'rate_limit:blocked'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
rawQuery: "SELECT count() as blocked
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob6 = 'rate_limit:blocked'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Events blocked by a rate limiter (per-IP, per-board, or the shared
|
|
global Browser Run cap). Queue jobs blocked this way are requeued rather
|
|
than dropped.
|
|
id: 36
|
|
links: []
|
|
title: Rate-limited screenshot events
|
|
vizConfig:
|
|
group: stat
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: thresholds
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
- color: red
|
|
value: 1
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
colorMode: value
|
|
graphMode: none
|
|
justifyMode: auto
|
|
orientation: auto
|
|
percentChangeColorMode: standard
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: false
|
|
showPercentChange: false
|
|
textMode: auto
|
|
wideLayout: true
|
|
version: 13.2.0-29854286369
|
|
panel-37:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob3, 8) as surface, count() as
|
|
total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, surface
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob3, 8) as surface, count() as
|
|
total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, surface
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'All screenshot telemetry split by the surface that emitted it:
|
|
mcp (the shared board screenshot tool), og (the social-preview route), and
|
|
queue (the background render consumer).'
|
|
id: 37
|
|
links: []
|
|
title: Screenshot events by surface
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-38:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob3, 8) as source, countIf(blob4
|
|
= 'cache:hit') / count() * 100 as hit_rate
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob4 != 'cache:none'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, source
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob3, 8) as source, countIf(blob4
|
|
= 'cache:hit') / count() * 100 as hit_rate
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob4 != 'cache:none'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, source
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Share of cache-consulting requests served a fresh image, per
|
|
source. og is the one that matters most: a miss there sends a crawler the
|
|
default image and degrades the link unfurl, while an mcp miss just pays for
|
|
a render. Stale counts against it; cache:none rows (refusals, and the info
|
|
tools which have no cache) are excluded so refusal volume cannot move this
|
|
number.'
|
|
id: 38
|
|
links: []
|
|
title: Cache hit rate by source
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 10
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 2
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
max: 100
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: percent
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-39:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob5, 9) as reason, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob5 != 'failure:none'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, reason
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob5, 9) as reason, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob5 != 'failure:none'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, reason
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Bounded failure reason codes: board_not_viewable, board_empty,
|
|
not_found, not_rendered_yet, no_pages, page_out_of_range, invalid_input,
|
|
and the rate_limited_* codes.'
|
|
id: 39
|
|
links: []
|
|
title: Screenshot failures by reason
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides:
|
|
- __systemRef: hideSeriesFrom
|
|
matcher:
|
|
id: byNames
|
|
options:
|
|
mode: exclude
|
|
names:
|
|
- not_rendered_yet
|
|
prefix: 'All except:'
|
|
readOnly: true
|
|
properties:
|
|
- id: custom.hideFrom
|
|
value:
|
|
legend: false
|
|
tooltip: true
|
|
viz: true
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-40:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob4, 6) as mode, quantileWeighted(0.5,
|
|
double3, _sample_interval) as p50, quantileWeighted(0.95, double3,
|
|
_sample_interval) as p95, quantileWeighted(0.99, double3, _sample_interval)
|
|
as p99
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'browser_run_session'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, mode
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob4, 6) as mode, quantileWeighted(0.5,
|
|
double3, _sample_interval) as p50, quantileWeighted(0.95, double3,
|
|
_sample_interval) as p95, quantileWeighted(0.99, double3, _sample_interval)
|
|
as p99
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'browser_run_session'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, mode
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Wall-clock per browser session from the browser_run_session
|
|
ledger, split by what the session was for (measure vs screenshot) and
|
|
weighted by _sample_interval to account for Analytics Engine sampling.
|
|
Failed sessions are included — they held a browser too.
|
|
id: 40
|
|
links: []
|
|
title: Browser Run render duration percentiles
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-41:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob3, 8) as surface, count() as
|
|
total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob6 = 'rate_limit:blocked'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, surface
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, substring(blob3, 8) as surface, count() as
|
|
total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'mcp_shared_board_screenshot'
|
|
|
|
AND blob6 = 'rate_limit:blocked'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, surface
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Which surface is hitting a limiter. Sustained queue blocking
|
|
means the shared global Browser Run cap is saturated; mcp blocking is usually
|
|
a single account hitting its per-account limit.
|
|
id: 41
|
|
links: []
|
|
title: Rate-limited screenshots by surface
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-42:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, quantileWeighted(0.5, double1, _sample_interval) as p50, quantileWeighted(0.95, double1, _sample_interval) as p95, quantileWeighted(0.99, double1, _sample_interval) as p99 FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'postgres_client_connect_done' AND blob3 = 'user-do' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, quantileWeighted(0.5, double1, _sample_interval) as p50, quantileWeighted(0.95, double1, _sample_interval) as p95, quantileWeighted(0.99, double1, _sample_interval) as p99 FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'postgres_client_connect_done' AND blob3 = 'user-do' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Time to establish a postgres connection for the user-do pool — TCP, TLS and auth through pgbouncer — from postgres_client_connect_done (double1), weighted by _sample_interval. user-do dials a fresh client per DO checkout and carries ~95% of dial volume, so it gets the full percentile treatment; every other pool is on the dial p95 by pool panel. A dial that hangs never completes and only shows up on the never-completed panel.'
|
|
id: 42
|
|
links: []
|
|
title: Postgres dial duration percentiles (user-do)
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-43:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob3 as pool, sum(if(blob1 = 'postgres_client_connect', _sample_interval, -_sample_interval)) as pending FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 IN ('postgres_client_connect', 'postgres_client_connect_done') AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, pool ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob3 as pool, sum(if(blob1 = 'postgres_client_connect', _sample_interval, -_sample_interval)) as pending FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 IN ('postgres_client_connect', 'postgres_client_connect_done') AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, pool ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: "Dial starts minus completions per pool, weighted by _sample_interval because the dataset is sampled. postgres_client_connect fires when a dial starts and postgres_client_connect_done when it resolves either way, so a healthy pool oscillates around zero and a persistently positive line counts dials that hung. Absolute dial volume is on the connections-by-pool panel. Ignore ranges before 2026-08-11 12:40 UTC — the done event didn't exist yet, so everything before then reads as a gap."
|
|
id: 43
|
|
links: []
|
|
title: Postgres dials never completed by pool
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-44:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, quantileWeighted(0.5, double1, _sample_interval) as p50, quantileWeighted(0.95, double1, _sample_interval) as p95, quantileWeighted(0.99, double1, _sample_interval) as p99 FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'postgres_pool_acquire' AND blob3 = 'user-do' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, quantileWeighted(0.5, double1, _sample_interval) as p50, quantileWeighted(0.95, double1, _sample_interval) as p95, quantileWeighted(0.99, double1, _sample_interval) as p99 FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'postgres_pool_acquire' AND blob3 = 'user-do' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Time from asking the user-do pool for a client to holding one, from postgres_pool_acquire (double1), weighted by _sample_interval. user-do serializes checkouts, so this is lock wait plus a fresh dial — a slow holder shows up here even when the dial itself is fast. Other pools are on the acquire p95 by pool panel.'
|
|
id: 44
|
|
links: []
|
|
title: Postgres pool acquire wait percentiles (user-do)
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-45:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob9 as followup, count() as total FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'mcp_shared_board_screenshot' AND blob3 = 'source:queue' AND blob9 != '' AND blob4 = 'cache:miss' AND blob5 = 'failure:none' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, followup ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob9 as followup, count() as total FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'mcp_shared_board_screenshot' AND blob3 = 'source:queue' AND blob9 != '' AND blob4 = 'cache:miss' AND blob5 = 'failure:none' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, followup ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Queue renders that spent Browser Run (a cache miss that then rendered without failing; durations moved to browser_run_session, so double3 is now a -1 sentinel) split by blob9. followup:false is the render a trigger asked for; followup:true is the extra render a completed job enqueues because the board moved during its capture. Request surfaces record followup:none and are excluded by the source filter. Data starts 2026-08-11 — earlier queue renders predate the followup blob and are filtered out.'
|
|
id: 45
|
|
links: []
|
|
title: Queue renders by follow-up state
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-46:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob3 as pool, quantileWeighted(0.95, double1, _sample_interval) as p95 FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'postgres_client_connect_done' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, pool ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob3 as pool, quantileWeighted(0.95, double1, _sample_interval) as p95 FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'postgres_client_connect_done' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, pool ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'p95 dial time split by pool (blob3), weighted by _sample_interval. Aggregate percentiles would just track user-do (~95% of dial volume), so every pool gets a line of its own here. Low-traffic pools are spiky — read trends, not single buckets.'
|
|
id: 46
|
|
links: []
|
|
title: Postgres dial p95 by pool
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-47:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob3 as pool, quantileWeighted(0.95, double1, _sample_interval) as p95 FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'postgres_pool_acquire' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, pool ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob3 as pool, quantileWeighted(0.95, double1, _sample_interval) as p95 FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 = 'postgres_pool_acquire' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, pool ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'p95 acquire wait split by pool (blob3), weighted by _sample_interval. For the pg pools this is queueing while every client is busy plus any fresh dial; for user-do it is lock wait plus dial, since checkouts serialize.'
|
|
id: 47
|
|
links: []
|
|
title: Postgres pool acquire p95 by pool
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 12
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
min: 0
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-48:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob1 as event, count() as total FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 IN ('postgres_client_connect', 'postgres_client_end', 'postgres_client_error') AND blob3 = 'user-do' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, event ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, blob1 as event, count() as total FROM 'MEASURE' WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to) AND blob1 IN ('postgres_client_connect', 'postgres_client_end', 'postgres_client_error') AND blob3 = 'user-do' AND blob2 = '${environment}-tldraw-multiplayer' GROUP BY date, event ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Connection lifecycle for the user-do pool: connect, end, error. Split from the shared events panel because user-do dials a fresh client per DO checkout at roughly 20x the volume of every other pool combined. Known artifact: teardown currently mis-fires an error event per client release, so the error series runs at end volume — read spikes above that baseline, not the baseline itself.'
|
|
id: 48
|
|
links: []
|
|
title: Postgres client connection events (user-do)
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-49:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob3 as wrote, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_write'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, wrote
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob3 as wrote, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_write'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, wrote
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: version_chain_write events split keyframe vs delta. A healthy
|
|
chain writes mostly deltas with an occasional keyframe.
|
|
id: 49
|
|
links: []
|
|
title: Version chain writes
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-50:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob4 as reason, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_write'
|
|
|
|
AND blob3 = 'keyframe'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, reason
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob4 as reason, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_write'
|
|
|
|
AND blob3 = 'keyframe'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, reason
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: "Why keyframes were cut. 'segment-lost' is the lost-open-segment
|
|
recovery and 'fingerprint-mismatch' a dead-incarnation seed divergence —
|
|
spikes in either deserve a look."
|
|
id: 50
|
|
links: []
|
|
title: Keyframe reasons
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-51:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, if(blob3 = 'ok', 'ok', concat(blob3, ':', blob4))
|
|
as result, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_verify'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, result
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, if(blob3 = 'ok', 'ok', concat(blob3, ':', blob4))
|
|
as result, count() as total
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_verify'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, result
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Retired-chain verification. Fail reasons: missing | legacy-fallback
|
|
| head-mismatch | error. Any fail means a reconstruction did not reproduce
|
|
the persisted state.'
|
|
id: 51
|
|
links: []
|
|
title: Verify results
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: bars
|
|
fillOpacity: 80
|
|
gradientMode: none
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 0
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-52:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query: "SELECT count() as errors
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_error'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
rawQuery: "SELECT count() as errors
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_error'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Chain writes that failed and fell back to the legacy copy. Anything
|
|
above zero deserves a look.
|
|
id: 52
|
|
links: []
|
|
title: Chain write errors
|
|
vizConfig:
|
|
group: stat
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: thresholds
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
- color: red
|
|
value: 1
|
|
unit: short
|
|
overrides: []
|
|
options:
|
|
colorMode: value
|
|
graphMode: none
|
|
justifyMode: auto
|
|
orientation: auto
|
|
percentChangeColorMode: standard
|
|
reduceOptions:
|
|
calcs:
|
|
- lastNotNull
|
|
fields: ''
|
|
values: false
|
|
showPercentChange: false
|
|
textMode: auto
|
|
wideLayout: true
|
|
version: 13.2.0-29854286369
|
|
panel-53:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob3 as wrote, sum(double1) as bytes
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_write'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, wrote
|
|
|
|
ORDER BY date ASC"
|
|
rawQuery: "SELECT toStartOfInterval(timestamp, INTERVAL '$interval'
|
|
SECOND) as date, blob3 as wrote, sum(double1) as bytes
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob1 = 'version_chain_write'
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
GROUP BY date, wrote
|
|
|
|
ORDER BY date ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Encoded bytes uploaded to the chain bucket, split by write type
|
|
(double1 is the encoded body size).
|
|
id: 53
|
|
links: []
|
|
title: Chain bytes written
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 30
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: normal
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: bytes
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-54:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: time_series
|
|
formatAs: time_series
|
|
intervalFactor: 1
|
|
query: |-
|
|
SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, quantileWeighted(0.5, double3, _sample_interval) as total_p50, quantileWeighted(0.5, double4, _sample_interval) as browser_p50, quantileWeighted(0.95, double3, _sample_interval) as total_p95, quantileWeighted(0.95, double4, _sample_interval) as browser_p95
|
|
FROM 'MEASURE'
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
AND blob1 = 'browser_run_session'
|
|
AND blob4 = 'mode:screenshot'
|
|
AND blob5 = 'outcome:ok'
|
|
AND double4 > 0
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
GROUP BY date
|
|
ORDER BY date ASC
|
|
rawQuery: |-
|
|
SELECT toStartOfInterval(timestamp, INTERVAL '$interval' SECOND) as date, quantileWeighted(0.5, double3, _sample_interval) as total_p50, quantileWeighted(0.5, double4, _sample_interval) as browser_p50, quantileWeighted(0.95, double3, _sample_interval) as total_p95, quantileWeighted(0.95, double4, _sample_interval) as browser_p95
|
|
FROM 'MEASURE'
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
AND blob1 = 'browser_run_session'
|
|
AND blob4 = 'mode:screenshot'
|
|
AND blob5 = 'outcome:ok'
|
|
AND double4 > 0
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
GROUP BY date
|
|
ORDER BY date ASC
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: 'Total session wall clock (double3) against the browser wall clock Browser Run bills for it (double4, from the X-Browser-Ms-Used header), for successful screenshot renders on every surface — OG image thumbnails and MCP cluster screenshots alike. The gap between the lines is everything outside the browser — RPC, Browser Run queueing, response transfer — which is where the pipeline variance lives. Sessions with no billed time recorded (failures, the local dev service, rows from before the field existed) are excluded by double4 > 0.'
|
|
id: 54
|
|
links: []
|
|
title: In-browser vs total render time
|
|
vizConfig:
|
|
group: timeseries
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
color:
|
|
mode: palette-classic
|
|
custom:
|
|
axisBorderShow: false
|
|
axisCenteredZero: false
|
|
axisColorMode: text
|
|
axisLabel: ''
|
|
axisPlacement: auto
|
|
barAlignment: 0
|
|
barWidthFactor: 0.8
|
|
drawStyle: line
|
|
fillOpacity: 10
|
|
gradientMode: opacity
|
|
hideFrom:
|
|
legend: false
|
|
tooltip: false
|
|
viz: false
|
|
insertNulls: false
|
|
lineInterpolation: linear
|
|
lineWidth: 1.5
|
|
pointSize: 5
|
|
scaleDistribution:
|
|
type: linear
|
|
showPoints: never
|
|
showValues: false
|
|
spanNulls: false
|
|
stacking:
|
|
group: A
|
|
mode: none
|
|
thresholdsStyle:
|
|
mode: 'off'
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
unit: ms
|
|
overrides: []
|
|
options:
|
|
annotations:
|
|
clustering: -1
|
|
multiLane: false
|
|
legend:
|
|
calcs: []
|
|
displayMode: list
|
|
enableFacetedFilter: false
|
|
overflow: ellipsis
|
|
placement: bottom
|
|
showLegend: true
|
|
tooltip:
|
|
hideZeros: false
|
|
maxHeight: 600
|
|
mode: multi
|
|
sort: desc
|
|
version: 13.2.0-29854286369
|
|
panel-55:
|
|
kind: Panel
|
|
spec:
|
|
data:
|
|
kind: QueryGroup
|
|
spec:
|
|
queries:
|
|
- kind: PanelQuery
|
|
spec:
|
|
hidden: false
|
|
query:
|
|
datasource:
|
|
name: bdgu7tk03irr4e
|
|
group: vertamedia-clickhouse-datasource
|
|
kind: DataQuery
|
|
spec:
|
|
dateTimeType: DATETIME
|
|
editorMode: code
|
|
extrapolate: true
|
|
format: table
|
|
formatAs: table
|
|
intervalFactor: 1
|
|
query:
|
|
"SELECT timestamp, blob1 AS operation, double1 AS ms, blob3 AS blob3, blob4 AS blob4
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
AND '${load_id}' != '' AND (blob3 = '${load_id}' OR blob4 = '${load_id}')
|
|
|
|
ORDER BY timestamp ASC"
|
|
rawQuery:
|
|
"SELECT timestamp, blob1 AS operation, double1 AS ms, blob3 AS blob3, blob4 AS blob4
|
|
|
|
FROM 'MEASURE'
|
|
|
|
WHERE timestamp >= toDateTime($from) AND timestamp <= toDateTime($to)
|
|
|
|
AND blob2 = '${environment}-tldraw-multiplayer'
|
|
|
|
AND '${load_id}' != '' AND (blob3 = '${load_id}' OR blob4 = '${load_id}')
|
|
|
|
ORDER BY timestamp ASC"
|
|
round: 0s
|
|
showFormattedSQL: false
|
|
showHelp: false
|
|
skip_comments: true
|
|
step: ''
|
|
version: v0
|
|
refId: A
|
|
queryOptions: {}
|
|
transformations: []
|
|
description: Every timer the sync worker wrote for one page load. Paste the load
|
|
id from the browser console ([first-load] <id> total ...) into the load_id
|
|
variable. Boot stages (db_load_*, room_start) appear only when that load booted
|
|
the room; init_user carries the id in blob4 and its outcome in blob3.
|
|
id: 55
|
|
links: []
|
|
title: One load ($load_id)
|
|
vizConfig:
|
|
group: table
|
|
kind: VizConfig
|
|
spec:
|
|
fieldConfig:
|
|
defaults:
|
|
custom:
|
|
align: auto
|
|
cellOptions:
|
|
type: auto
|
|
inspect: false
|
|
thresholds:
|
|
mode: absolute
|
|
steps:
|
|
- color: green
|
|
value: 0
|
|
overrides:
|
|
- matcher:
|
|
id: byName
|
|
options: ms
|
|
properties:
|
|
- id: unit
|
|
value: ms
|
|
- id: custom.cellOptions
|
|
value:
|
|
mode: gradient
|
|
type: gauge
|
|
options:
|
|
cellHeight: sm
|
|
footer:
|
|
countRows: false
|
|
fields: ''
|
|
reducer:
|
|
- sum
|
|
show: false
|
|
showHeader: true
|
|
sortBy: []
|
|
version: 13.2.0-29854286369
|
|
layout:
|
|
kind: RowsLayout
|
|
spec:
|
|
rows:
|
|
- kind: RowsLayoutRow
|
|
spec:
|
|
collapse: false
|
|
layout:
|
|
kind: GridLayout
|
|
spec:
|
|
items:
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-2
|
|
height: 4
|
|
width: 12
|
|
x: 0
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-5
|
|
height: 4
|
|
width: 12
|
|
x: 12
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-7
|
|
height: 9
|
|
width: 12
|
|
x: 0
|
|
y: 4
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-8
|
|
height: 9
|
|
width: 12
|
|
x: 12
|
|
y: 4
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-9
|
|
height: 8
|
|
width: 8
|
|
x: 0
|
|
y: 13
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-10
|
|
height: 8
|
|
width: 8
|
|
x: 8
|
|
y: 13
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-11
|
|
height: 8
|
|
width: 8
|
|
x: 16
|
|
y: 13
|
|
title: Rooms and sync
|
|
- kind: RowsLayoutRow
|
|
spec:
|
|
collapse: false
|
|
layout:
|
|
kind: GridLayout
|
|
spec:
|
|
items:
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-12
|
|
height: 9
|
|
width: 12
|
|
x: 0
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-13
|
|
height: 9
|
|
width: 12
|
|
x: 12
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-14
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 9
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-15
|
|
height: 8
|
|
width: 12
|
|
x: 12
|
|
y: 9
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-55
|
|
height: 8
|
|
width: 24
|
|
x: 0
|
|
y: 17
|
|
title: Room and connect latency
|
|
- kind: RowsLayoutRow
|
|
spec:
|
|
collapse: true
|
|
layout:
|
|
kind: GridLayout
|
|
spec:
|
|
items:
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-49
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-50
|
|
height: 8
|
|
width: 12
|
|
x: 12
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-51
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 8
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-53
|
|
height: 8
|
|
width: 12
|
|
x: 12
|
|
y: 8
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-52
|
|
height: 4
|
|
width: 6
|
|
x: 0
|
|
y: 16
|
|
title: Version chains
|
|
- kind: RowsLayoutRow
|
|
spec:
|
|
collapse: true
|
|
layout:
|
|
kind: GridLayout
|
|
spec:
|
|
items:
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-25
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-26
|
|
height: 8
|
|
width: 12
|
|
x: 12
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-48
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 8
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-43
|
|
height: 8
|
|
width: 12
|
|
x: 12
|
|
y: 8
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-42
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 16
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-46
|
|
height: 8
|
|
width: 12
|
|
x: 12
|
|
y: 16
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-44
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 24
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-47
|
|
height: 8
|
|
width: 12
|
|
x: 12
|
|
y: 24
|
|
title: Postgres connections
|
|
- kind: RowsLayoutRow
|
|
spec:
|
|
collapse: true
|
|
layout:
|
|
kind: GridLayout
|
|
spec:
|
|
items:
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-33
|
|
height: 4
|
|
width: 6
|
|
x: 0
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-34
|
|
height: 4
|
|
width: 6
|
|
x: 6
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-35
|
|
height: 4
|
|
width: 6
|
|
x: 12
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-36
|
|
height: 4
|
|
width: 6
|
|
x: 18
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-37
|
|
height: 8
|
|
width: 8
|
|
x: 0
|
|
y: 4
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-38
|
|
height: 8
|
|
width: 8
|
|
x: 8
|
|
y: 4
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-39
|
|
height: 8
|
|
width: 8
|
|
x: 16
|
|
y: 4
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-40
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 12
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-41
|
|
height: 8
|
|
width: 12
|
|
x: 12
|
|
y: 12
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-45
|
|
height: 8
|
|
width: 24
|
|
x: 0
|
|
y: 20
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-54
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 28
|
|
title: Screenshots and OG images
|
|
- kind: RowsLayoutRow
|
|
spec:
|
|
collapse: true
|
|
layout:
|
|
kind: GridLayout
|
|
spec:
|
|
items:
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-27
|
|
height: 8
|
|
width: 12
|
|
x: 0
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-28
|
|
height: 8
|
|
width: 6
|
|
x: 12
|
|
y: 0
|
|
- kind: GridLayoutItem
|
|
spec:
|
|
element:
|
|
kind: ElementReference
|
|
name: panel-29
|
|
height: 8
|
|
width: 6
|
|
x: 18
|
|
y: 0
|
|
title: Demo server (bemo)
|
|
links: []
|
|
liveNow: false
|
|
preload: false
|
|
tags:
|
|
- tldraw
|
|
- analytics-engine
|
|
- provisioned
|
|
- repo:tldraw/tldraw
|
|
timeSettings:
|
|
autoRefresh: 5s
|
|
autoRefreshIntervals:
|
|
- 30s
|
|
- 1m
|
|
- 5m
|
|
- 15m
|
|
- 30m
|
|
- 1h
|
|
- 2h
|
|
- 1d
|
|
fiscalYearStartMonth: 0
|
|
from: now-3h
|
|
hideTimepicker: false
|
|
timezone: browser
|
|
to: now
|
|
title: Dotcom events
|
|
variables:
|
|
- kind: TextVariable
|
|
spec:
|
|
current:
|
|
text: production
|
|
value: production
|
|
description: Environment to filter by. Use production, staging, or your pr number
|
|
(pr-42). Applies to MEASURE panels only — the demo server panels query their
|
|
own dataset.
|
|
hide: dontHide
|
|
label: 'Environment: production | staging | pr-42'
|
|
name: environment
|
|
query: production
|
|
skipUrlSync: false
|
|
- kind: TextVariable
|
|
spec:
|
|
current:
|
|
text: ''
|
|
value: ''
|
|
description: A first_load id from the browser console, to list every sync worker
|
|
timer for that page load in the "One load" panel.
|
|
hide: dontHide
|
|
label: 'Load id (from the first_load console line)'
|
|
name: load_id
|
|
query: ''
|
|
skipUrlSync: false
|