|
1 | 1 | {
|
2 |
| - "title": "Reliability Kit: Heroku App With Log Drains", |
3 |
| - "description": "A dashboard to view issues with apps which use Reliability Kit and Heroku Log Drains.", |
| 2 | + "title": "Heroku App Health", |
| 3 | + "description": "A dashboard to view the health of a Heroku app (works best when the app uses Reliability Kit)", |
4 | 4 | "visualizations": {
|
5 | 5 | "viz_common_errors": {
|
6 | 6 | "type": "splunk.table",
|
|
94 | 94 | "stackMode": "stacked",
|
95 | 95 | "legendDisplay": "bottom"
|
96 | 96 | }
|
| 97 | + }, |
| 98 | + "viz_md_tech_debt_radar": { |
| 99 | + "type": "splunk.markdown", |
| 100 | + "options": { |
| 101 | + "markdown": "---\n\n# Tech Debt Radar\n\nThe following charts help you identify areas of improvement, focused on easy-to-fix issues." |
| 102 | + } |
| 103 | + }, |
| 104 | + "viz_low_hanging_fruit": { |
| 105 | + "type": "splunk.table", |
| 106 | + "dataSources": { |
| 107 | + "primary": "ds_low_hanging_fruit" |
| 108 | + }, |
| 109 | + "title": "Low-Hanging Fruit", |
| 110 | + "description": "Common JavaScript errors across the codebase which are likely due to a bug in the code", |
| 111 | + "options": { |
| 112 | + "count": 5 |
| 113 | + } |
97 | 114 | }
|
98 | 115 | },
|
99 | 116 | "dataSources": {
|
|
140 | 157 | "type": "ds.search",
|
141 | 158 | "options": {
|
142 | 159 | "enableSmartSources": true,
|
143 |
| - "query": "index=\"heroku\" source=TERM($text_system_code$) sourcetype=\"heroku:app\" level=error\n| rex field=error.stack \"(?<stackTraceHeader>[^\\r\\n]+[\\r\\n]+[^\\r\\n]+)\"\n| rex field=error.stack \"[^\\r\\n]+[\\r\\n]+[^\\r\\n\\(]*\\((?<filePointer>[^\\)]+)\\)\" \n| rename error.name as name, error.code as code, error.message as message\n| eval hash=md5(name.\"__\".code.\"__\".stackTraceHeader)\n| eval isCrash=if(event=\"UNHANDLED_ERROR\",\"true\",\"false\")\n| stats sparkline() as timeline count by hash, name, code, message, isCrash, filePointer \n| table count timeline name code isCrash message filePointer\n| sort count desc" |
| 160 | + "query": "index=\"heroku\" source=TERM($text_system_code$) sourcetype=\"heroku:app\" level=error error.statusCode>=500\n| rex field=error.stack \"(?<stackTraceHeader>[^\\r\\n]+[\\r\\n]+[^\\r\\n]+)\"\n| rex field=error.stack \"[^\\r\\n]+[\\r\\n]+[^\\r\\n\\(]*\\((?<filePointer>[^\\)]+)\\)\" \n| rename error.name as name, error.code as code, error.message as message\n| eval hash=md5(name.\"__\".code.\"__\".stackTraceHeader)\n| eval isCrash=if(event=\"UNHANDLED_ERROR\",\"true\",\"false\")\n| stats sparkline() as timeline count by hash, name, code, message, isCrash, filePointer \n| table count timeline name code isCrash message filePointer\n| sort count desc" |
144 | 161 | },
|
145 | 162 | "name": "search_table_grouped_errors"
|
| 163 | + }, |
| 164 | + "ds_low_hanging_fruit": { |
| 165 | + "type": "ds.search", |
| 166 | + "options": { |
| 167 | + "enableSmartSources": true, |
| 168 | + "query": "index=\"heroku\" source=TERM($text_system_code$) sourcetype=\"heroku:app\" level=error\n| rex field=error.stack \"(?<stackTraceHeader>[^\\r\\n]+[\\r\\n]+[^\\r\\n]+)\"\n| rex field=error.stack \"[^\\r\\n]+[\\r\\n]+[^\\r\\n\\(]*\\((?<filePointer>[^\\)]+)\\)\" \n| rename error.name as name, error.code as code, error.message as message\n| eval hash=md5(name.\"__\".code.\"__\".stackTraceHeader)\n| eval isCrash=if(event=\"UNHANDLED_ERROR\",\"true\",\"false\")\n| stats sparkline() as timeline count by hash, name, code, message, isCrash, filePointer \n| table count timeline name code isCrash message filePointer\n| sort count desc" |
| 169 | + }, |
| 170 | + "name": "search_table_low_hanging_fruit" |
146 | 171 | }
|
147 | 172 | },
|
148 | 173 | "defaults": {
|
|
168 | 193 | },
|
169 | 194 | "input_system_code": {
|
170 | 195 | "options": {
|
171 |
| - "defaultValue": "next-topic-tracker-api", |
| 196 | + "defaultValue": "", |
172 | 197 | "token": "text_system_code"
|
173 | 198 | },
|
174 | 199 | "title": "System code",
|
|
239 | 264 | "h": 350
|
240 | 265 | }
|
241 | 266 | },
|
| 267 | + { |
| 268 | + "item": "viz_md_tech_debt_radar", |
| 269 | + "type": "block", |
| 270 | + "position": { |
| 271 | + "x": 0, |
| 272 | + "y": 1780, |
| 273 | + "w": 1200, |
| 274 | + "h": 150 |
| 275 | + } |
| 276 | + }, |
| 277 | + { |
| 278 | + "item": "viz_low_hanging_fruit", |
| 279 | + "type": "block", |
| 280 | + "position": { |
| 281 | + "x": 0, |
| 282 | + "y": 1930, |
| 283 | + "w": 1200, |
| 284 | + "h": 430 |
| 285 | + } |
| 286 | + }, |
242 | 287 | {
|
243 | 288 | "item": "viz_error_names",
|
244 | 289 | "type": "block",
|
|
0 commit comments