|
8 | 8 | { |
9 | 9 | "title": "Station Scrape Latency P95 (ms)", |
10 | 10 | "layout": { "column": 1, "row": 1, "width": 8, "height": 3 }, |
11 | | - "linkedEntityGuids": null, |
12 | 11 | "visualization": { "id": "viz.line" }, |
13 | 12 | "rawConfiguration": { |
14 | 13 | "facet": { "showOtherSeries": false }, |
15 | 14 | "legend": { "enabled": true }, |
16 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT percentile(durationMs, 95) FROM ServerMetric WHERE measurement = 'SourceScrape' FACET sourceId TIMESERIES AUTO LIMIT 50" }], |
| 15 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT percentile(durationMs, 95) FROM ServerMetric WHERE measurement = 'SourceScrape' FACET sourceId TIMESERIES AUTO LIMIT 50" }], |
17 | 16 | "platformOptions": { "ignoreTimeRange": false } |
18 | 17 | } |
19 | 18 | }, |
20 | 19 | { |
21 | 20 | "title": "Station Scrape Error Rate (%)", |
22 | 21 | "layout": { "column": 9, "row": 1, "width": 4, "height": 3 }, |
23 | | - "linkedEntityGuids": null, |
24 | 22 | "visualization": { "id": "viz.bar" }, |
25 | 23 | "rawConfiguration": { |
26 | 24 | "facet": { "showOtherSeries": false }, |
27 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT percentage(count(*), WHERE success = 0) AS 'Error %' FROM ServerMetric WHERE measurement = 'SourceScrape' FACET sourceId SINCE 1 hour ago LIMIT 50" }], |
| 25 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT percentage(count(*), WHERE success = 0) AS 'Error %' FROM ServerMetric WHERE measurement = 'SourceScrape' FACET sourceId SINCE 1 hour ago LIMIT 50" }], |
28 | 26 | "platformOptions": { "ignoreTimeRange": false } |
29 | 27 | } |
30 | 28 | }, |
31 | 29 | { |
32 | 30 | "title": "Track Updated Events per Station", |
33 | 31 | "layout": { "column": 1, "row": 4, "width": 8, "height": 3 }, |
34 | | - "linkedEntityGuids": null, |
35 | 32 | "visualization": { "id": "viz.area" }, |
36 | 33 | "rawConfiguration": { |
37 | 34 | "facet": { "showOtherSeries": false }, |
38 | 35 | "legend": { "enabled": true }, |
39 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'StationTrackUpdated' FACET station TIMESERIES AUTO LIMIT 50" }], |
| 36 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'StationTrackUpdated' FACET station TIMESERIES AUTO LIMIT 50" }], |
40 | 37 | "platformOptions": { "ignoreTimeRange": false } |
41 | 38 | } |
42 | 39 | }, |
43 | 40 | { |
44 | 41 | "title": "Station Crawl Cycle Duration (ms)", |
45 | 42 | "layout": { "column": 9, "row": 4, "width": 4, "height": 3 }, |
46 | | - "linkedEntityGuids": null, |
47 | 43 | "visualization": { "id": "viz.line" }, |
48 | 44 | "rawConfiguration": { |
49 | 45 | "legend": { "enabled": true }, |
50 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT average(durationMs) AS 'avg', max(durationMs) AS 'max' FROM ServerMetric WHERE measurement = 'StationCrawlCycle' TIMESERIES AUTO" }], |
| 46 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT average(durationMs) AS 'avg', max(durationMs) AS 'max' FROM ServerMetric WHERE measurement = 'StationCrawlCycle' TIMESERIES AUTO" }], |
51 | 47 | "platformOptions": { "ignoreTimeRange": false } |
52 | 48 | } |
53 | 49 | }, |
54 | 50 | { |
55 | 51 | "title": "Crawl Cycle – Updated vs Errors", |
56 | 52 | "layout": { "column": 1, "row": 7, "width": 6, "height": 3 }, |
57 | | - "linkedEntityGuids": null, |
58 | 53 | "visualization": { "id": "viz.area" }, |
59 | 54 | "rawConfiguration": { |
60 | 55 | "legend": { "enabled": true }, |
61 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT sum(updatedCount) AS 'Updated', sum(errorCount) AS 'Errors' FROM ServerMetric WHERE measurement = 'StationCrawlCycle' TIMESERIES AUTO" }], |
| 56 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT sum(updatedCount) AS 'Updated', sum(errorCount) AS 'Errors' FROM ServerMetric WHERE measurement = 'StationCrawlCycle' TIMESERIES AUTO" }], |
62 | 57 | "platformOptions": { "ignoreTimeRange": false } |
63 | 58 | } |
64 | 59 | }, |
65 | 60 | { |
66 | 61 | "title": "Scrape Retry Rate (avg attempts)", |
67 | 62 | "layout": { "column": 7, "row": 7, "width": 6, "height": 3 }, |
68 | | - "linkedEntityGuids": null, |
69 | 63 | "visualization": { "id": "viz.line" }, |
70 | 64 | "rawConfiguration": { |
71 | 65 | "facet": { "showOtherSeries": false }, |
72 | 66 | "legend": { "enabled": true }, |
73 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT average(attempts) FROM ServerMetric WHERE measurement = 'SourceScrape' FACET sourceId TIMESERIES AUTO LIMIT 50" }], |
| 67 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT average(attempts) FROM ServerMetric WHERE measurement = 'SourceScrape' FACET sourceId TIMESERIES AUTO LIMIT 50" }], |
74 | 68 | "platformOptions": { "ignoreTimeRange": false } |
75 | 69 | } |
76 | 70 | }, |
77 | 71 | { |
78 | 72 | "title": "History Chart New Tracks Discovered", |
79 | 73 | "layout": { "column": 1, "row": 10, "width": 12, "height": 3 }, |
80 | | - "linkedEntityGuids": null, |
81 | 74 | "visualization": { "id": "viz.area" }, |
82 | 75 | "rawConfiguration": { |
83 | 76 | "facet": { "showOtherSeries": false }, |
84 | 77 | "legend": { "enabled": true }, |
85 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT sum(newTrackCount) FROM ServerMetric WHERE measurement = 'HistoryChartNewTracks' FACET station TIMESERIES AUTO LIMIT 50" }], |
| 78 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT sum(newTrackCount) FROM ServerMetric WHERE measurement = 'HistoryChartNewTracks' FACET station TIMESERIES AUTO LIMIT 50" }], |
86 | 79 | "platformOptions": { "ignoreTimeRange": false } |
87 | 80 | } |
88 | 81 | } |
|
94 | 87 | { |
95 | 88 | "title": "Spotify API Latency P95 per Method (ms)", |
96 | 89 | "layout": { "column": 1, "row": 1, "width": 8, "height": 3 }, |
97 | | - "linkedEntityGuids": null, |
98 | 90 | "visualization": { "id": "viz.line" }, |
99 | 91 | "rawConfiguration": { |
100 | 92 | "facet": { "showOtherSeries": false }, |
101 | 93 | "legend": { "enabled": true }, |
102 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT percentile(durationMs, 95) FROM ServerMetric WHERE measurement = 'SpotifyApiCall' FACET method TIMESERIES AUTO LIMIT 20" }], |
| 94 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT percentile(durationMs, 95) FROM ServerMetric WHERE measurement = 'SpotifyApiCall' FACET method TIMESERIES AUTO LIMIT 20" }], |
103 | 95 | "platformOptions": { "ignoreTimeRange": false } |
104 | 96 | } |
105 | 97 | }, |
106 | 98 | { |
107 | 99 | "title": "Spotify API Error Rate per Method (%)", |
108 | 100 | "layout": { "column": 9, "row": 1, "width": 4, "height": 3 }, |
109 | | - "linkedEntityGuids": null, |
110 | 101 | "visualization": { "id": "viz.bar" }, |
111 | 102 | "rawConfiguration": { |
112 | 103 | "facet": { "showOtherSeries": false }, |
113 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT percentage(count(*), WHERE success = 0) AS 'Error %' FROM ServerMetric WHERE measurement = 'SpotifyApiCall' FACET method SINCE 1 hour ago LIMIT 20" }], |
| 104 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT percentage(count(*), WHERE success = 0) AS 'Error %' FROM ServerMetric WHERE measurement = 'SpotifyApiCall' FACET method SINCE 1 hour ago LIMIT 20" }], |
114 | 105 | "platformOptions": { "ignoreTimeRange": false } |
115 | 106 | } |
116 | 107 | }, |
117 | 108 | { |
118 | 109 | "title": "Spotify API Call Volume per Method", |
119 | 110 | "layout": { "column": 1, "row": 4, "width": 6, "height": 3 }, |
120 | | - "linkedEntityGuids": null, |
121 | 111 | "visualization": { "id": "viz.area" }, |
122 | 112 | "rawConfiguration": { |
123 | 113 | "facet": { "showOtherSeries": false }, |
124 | 114 | "legend": { "enabled": true }, |
125 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'SpotifyApiCall' FACET method TIMESERIES AUTO LIMIT 20" }], |
| 115 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'SpotifyApiCall' FACET method TIMESERIES AUTO LIMIT 20" }], |
126 | 116 | "platformOptions": { "ignoreTimeRange": false } |
127 | 117 | } |
128 | 118 | }, |
129 | 119 | { |
130 | 120 | "title": "Search Cache Hit Rate (%)", |
131 | 121 | "layout": { "column": 7, "row": 4, "width": 3, "height": 3 }, |
132 | | - "linkedEntityGuids": null, |
133 | 122 | "visualization": { "id": "viz.billboard" }, |
134 | 123 | "rawConfiguration": { |
135 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT percentage(count(*), WHERE hit = 1) AS 'Cache Hit %' FROM ServerMetric WHERE measurement = 'SpotifySearchCache' SINCE 1 hour ago" }], |
| 124 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT percentage(count(*), WHERE hit = 1) AS 'Cache Hit %' FROM ServerMetric WHERE measurement = 'SpotifySearchCache' SINCE 1 hour ago" }], |
136 | 125 | "platformOptions": { "ignoreTimeRange": false } |
137 | 126 | } |
138 | 127 | }, |
139 | 128 | { |
140 | 129 | "title": "Search Cache Hits vs Misses", |
141 | 130 | "layout": { "column": 10, "row": 4, "width": 3, "height": 3 }, |
142 | | - "linkedEntityGuids": null, |
143 | 131 | "visualization": { "id": "viz.pie" }, |
144 | 132 | "rawConfiguration": { |
145 | 133 | "facet": { "showOtherSeries": false }, |
146 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'SpotifySearchCache' FACET cases(WHERE hit = 1 AS 'Hit', WHERE hit = 0 AS 'Miss') SINCE 1 hour ago" }], |
| 134 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'SpotifySearchCache' FACET cases(WHERE hit = 1 AS 'Hit', WHERE hit = 0 AS 'Miss') SINCE 1 hour ago" }], |
147 | 135 | "platformOptions": { "ignoreTimeRange": false } |
148 | 136 | } |
149 | 137 | }, |
150 | 138 | { |
151 | 139 | "title": "Cache Lookup Latency – Hit vs Miss (ms)", |
152 | 140 | "layout": { "column": 1, "row": 7, "width": 6, "height": 3 }, |
153 | | - "linkedEntityGuids": null, |
154 | 141 | "visualization": { "id": "viz.line" }, |
155 | 142 | "rawConfiguration": { |
156 | 143 | "facet": { "showOtherSeries": false }, |
157 | 144 | "legend": { "enabled": true }, |
158 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT average(durationMs) FROM ServerMetric WHERE measurement = 'SpotifySearchCache' FACET cases(WHERE hit = 1 AS 'Hit', WHERE hit = 0 AS 'Miss') TIMESERIES AUTO" }], |
| 145 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT average(durationMs) FROM ServerMetric WHERE measurement = 'SpotifySearchCache' FACET cases(WHERE hit = 1 AS 'Hit', WHERE hit = 0 AS 'Miss') TIMESERIES AUTO" }], |
159 | 146 | "platformOptions": { "ignoreTimeRange": false } |
160 | 147 | } |
161 | 148 | }, |
162 | 149 | { |
163 | 150 | "title": "Spotify API Avg Latency per Method (ms)", |
164 | 151 | "layout": { "column": 7, "row": 7, "width": 6, "height": 3 }, |
165 | | - "linkedEntityGuids": null, |
166 | 152 | "visualization": { "id": "viz.bar" }, |
167 | 153 | "rawConfiguration": { |
168 | 154 | "facet": { "showOtherSeries": false }, |
169 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT average(durationMs) FROM ServerMetric WHERE measurement = 'SpotifyApiCall' FACET method SINCE 1 hour ago LIMIT 20" }], |
| 155 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT average(durationMs) FROM ServerMetric WHERE measurement = 'SpotifyApiCall' FACET method SINCE 1 hour ago LIMIT 20" }], |
170 | 156 | "platformOptions": { "ignoreTimeRange": false } |
171 | 157 | } |
172 | 158 | } |
|
178 | 164 | { |
179 | 165 | "title": "Chart Collection Latency (ms)", |
180 | 166 | "layout": { "column": 1, "row": 1, "width": 8, "height": 3 }, |
181 | | - "linkedEntityGuids": null, |
182 | 167 | "visualization": { "id": "viz.line" }, |
183 | 168 | "rawConfiguration": { |
184 | 169 | "facet": { "showOtherSeries": false }, |
185 | 170 | "legend": { "enabled": true }, |
186 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT average(durationMs) FROM ServerMetric WHERE measurement = 'ChartCollection' FACET chartKey TIMESERIES AUTO LIMIT 30" }], |
| 171 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT average(durationMs) FROM ServerMetric WHERE measurement = 'ChartCollection' FACET chartKey TIMESERIES AUTO LIMIT 30" }], |
187 | 172 | "platformOptions": { "ignoreTimeRange": false } |
188 | 173 | } |
189 | 174 | }, |
190 | 175 | { |
191 | 176 | "title": "Chart Collection Success Rate (%)", |
192 | 177 | "layout": { "column": 9, "row": 1, "width": 4, "height": 3 }, |
193 | | - "linkedEntityGuids": null, |
194 | 178 | "visualization": { "id": "viz.bar" }, |
195 | 179 | "rawConfiguration": { |
196 | 180 | "facet": { "showOtherSeries": false }, |
197 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT percentage(count(*), WHERE success = 1) AS 'Success %' FROM ServerMetric WHERE measurement = 'ChartCollection' FACET chartKey SINCE 7 days ago LIMIT 30" }], |
| 181 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT percentage(count(*), WHERE success = 1) AS 'Success %' FROM ServerMetric WHERE measurement = 'ChartCollection' FACET chartKey SINCE 7 days ago LIMIT 30" }], |
198 | 182 | "platformOptions": { "ignoreTimeRange": false } |
199 | 183 | } |
200 | 184 | }, |
201 | 185 | { |
202 | 186 | "title": "Tracks Collected vs Spotify Resolved", |
203 | 187 | "layout": { "column": 1, "row": 4, "width": 6, "height": 3 }, |
204 | | - "linkedEntityGuids": null, |
205 | 188 | "visualization": { "id": "viz.bar" }, |
206 | 189 | "rawConfiguration": { |
207 | 190 | "facet": { "showOtherSeries": false }, |
208 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT sum(trackCount) AS 'Total Tracks', sum(spotifyResolvedCount) AS 'Spotify Resolved' FROM ServerMetric WHERE measurement = 'ChartCollection' FACET chartKey SINCE 30 days ago LIMIT 30" }], |
| 191 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT sum(trackCount) AS 'Total Tracks', sum(spotifyResolvedCount) AS 'Spotify Resolved' FROM ServerMetric WHERE measurement = 'ChartCollection' FACET chartKey SINCE 30 days ago LIMIT 30" }], |
209 | 192 | "platformOptions": { "ignoreTimeRange": false } |
210 | 193 | } |
211 | 194 | }, |
212 | 195 | { |
213 | 196 | "title": "Spotify Resolution Rate per Chart (%)", |
214 | 197 | "layout": { "column": 7, "row": 4, "width": 6, "height": 3 }, |
215 | | - "linkedEntityGuids": null, |
216 | 198 | "visualization": { "id": "viz.bar" }, |
217 | 199 | "rawConfiguration": { |
218 | 200 | "facet": { "showOtherSeries": false }, |
219 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT sum(spotifyResolvedCount) / sum(trackCount) * 100 AS 'Resolution %' FROM ServerMetric WHERE measurement = 'ChartCollection' AND trackCount > 0 FACET chartKey SINCE 30 days ago LIMIT 30" }], |
| 201 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT sum(spotifyResolvedCount) / sum(trackCount) * 100 AS 'Resolution %' FROM ServerMetric WHERE measurement = 'ChartCollection' AND trackCount > 0 FACET chartKey SINCE 30 days ago LIMIT 30" }], |
220 | 202 | "platformOptions": { "ignoreTimeRange": false } |
221 | 203 | } |
222 | 204 | }, |
223 | 205 | { |
224 | 206 | "title": "Chart Spotify Sync Latency (ms)", |
225 | 207 | "layout": { "column": 1, "row": 7, "width": 8, "height": 3 }, |
226 | | - "linkedEntityGuids": null, |
227 | 208 | "visualization": { "id": "viz.line" }, |
228 | 209 | "rawConfiguration": { |
229 | 210 | "facet": { "showOtherSeries": false }, |
230 | 211 | "legend": { "enabled": true }, |
231 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT average(durationMs) FROM ServerMetric WHERE measurement = 'ChartSpotifySync' FACET chartKey TIMESERIES AUTO LIMIT 30" }], |
| 212 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT average(durationMs) FROM ServerMetric WHERE measurement = 'ChartSpotifySync' FACET chartKey TIMESERIES AUTO LIMIT 30" }], |
232 | 213 | "platformOptions": { "ignoreTimeRange": false } |
233 | 214 | } |
234 | 215 | }, |
235 | 216 | { |
236 | 217 | "title": "Chart Sync – Tracks Pushed to Spotify", |
237 | 218 | "layout": { "column": 9, "row": 7, "width": 4, "height": 3 }, |
238 | | - "linkedEntityGuids": null, |
239 | 219 | "visualization": { "id": "viz.bar" }, |
240 | 220 | "rawConfiguration": { |
241 | 221 | "facet": { "showOtherSeries": false }, |
242 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT latest(trackCount) AS 'Tracks Synced' FROM ServerMetric WHERE measurement = 'ChartSpotifySync' AND success = 1 FACET chartKey SINCE 7 days ago LIMIT 30" }], |
| 222 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT latest(trackCount) AS 'Tracks Synced' FROM ServerMetric WHERE measurement = 'ChartSpotifySync' AND success = 1 FACET chartKey SINCE 7 days ago LIMIT 30" }], |
243 | 223 | "platformOptions": { "ignoreTimeRange": false } |
244 | 224 | } |
245 | 225 | }, |
246 | 226 | { |
247 | 227 | "title": "Chart Collection Skipped (week exists)", |
248 | 228 | "layout": { "column": 1, "row": 10, "width": 6, "height": 3 }, |
249 | | - "linkedEntityGuids": null, |
250 | 229 | "visualization": { "id": "viz.area" }, |
251 | 230 | "rawConfiguration": { |
252 | 231 | "facet": { "showOtherSeries": false }, |
253 | 232 | "legend": { "enabled": true }, |
254 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'ChartCollectionSkipped' FACET chartKey TIMESERIES AUTO LIMIT 30" }], |
| 233 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'ChartCollectionSkipped' FACET chartKey TIMESERIES AUTO LIMIT 30" }], |
255 | 234 | "platformOptions": { "ignoreTimeRange": false } |
256 | 235 | } |
257 | 236 | }, |
258 | 237 | { |
259 | 238 | "title": "Chart Sync Errors", |
260 | 239 | "layout": { "column": 7, "row": 10, "width": 6, "height": 3 }, |
261 | | - "linkedEntityGuids": null, |
262 | 240 | "visualization": { "id": "viz.area" }, |
263 | 241 | "rawConfiguration": { |
264 | 242 | "facet": { "showOtherSeries": false }, |
265 | 243 | "legend": { "enabled": true }, |
266 | | - "nrqlQueries": [{ "accountIds": [0], "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'ChartSpotifySync' AND success = 0 FACET chartKey TIMESERIES AUTO LIMIT 30" }], |
| 244 | + "nrqlQueries": [{ "accountId": 0, "query": "SELECT count(*) FROM ServerMetric WHERE measurement = 'ChartSpotifySync' AND success = 0 FACET chartKey TIMESERIES AUTO LIMIT 30" }], |
267 | 245 | "platformOptions": { "ignoreTimeRange": false } |
268 | 246 | } |
269 | 247 | } |
|
0 commit comments