debugbar 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/.prettierrc +6 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +5 -0
  5. data/Rakefile +4 -0
  6. data/app/channels/debugbar/debugbar_channel.rb +26 -0
  7. data/app/controllers/debugbar/application_controller.rb +4 -0
  8. data/app/controllers/debugbar/assets_controller.rb +15 -0
  9. data/app/helpers/debugbar/tag_helpers.rb +19 -0
  10. data/app/models/debugbar/application_record.rb +5 -0
  11. data/client/.gitignore +25 -0
  12. data/client/README.md +0 -0
  13. data/client/dist/.vite/manifest.json +14 -0
  14. data/client/dist/assets/debugbar-u5mP-5-z.js +34 -0
  15. data/client/dist/assets/ruby-logo-kn_8RniZ.svg +946 -0
  16. data/client/index.html +78 -0
  17. data/client/package-lock.json +2393 -0
  18. data/client/package.json +32 -0
  19. data/client/postcss.config.js +6 -0
  20. data/client/src/App.vue +17 -0
  21. data/client/src/AppDemo.vue +29 -0
  22. data/client/src/AppDev.vue +20 -0
  23. data/client/src/Debugbar.vue +276 -0
  24. data/client/src/assets/rails-logo.svg +1 -0
  25. data/client/src/assets/ruby-logo.svg +946 -0
  26. data/client/src/components/TabButton.vue +32 -0
  27. data/client/src/components/panels/CachePanel.vue +41 -0
  28. data/client/src/components/panels/JobsPanel.vue +52 -0
  29. data/client/src/components/panels/JsonPanel.vue +15 -0
  30. data/client/src/components/panels/LogsPanel.vue +43 -0
  31. data/client/src/components/panels/MessagesPanel.vue +25 -0
  32. data/client/src/components/panels/ModelsPanel.vue +37 -0
  33. data/client/src/components/panels/Panel.vue +7 -0
  34. data/client/src/components/panels/RequestPanel.vue +98 -0
  35. data/client/src/components/queries/QueriesPanel.vue +17 -0
  36. data/client/src/components/queries/QueryItem.vue +65 -0
  37. data/client/src/components/ui/Foldable.vue +39 -0
  38. data/client/src/components/ui/KeyValueTable.vue +16 -0
  39. data/client/src/components/ui/Row.vue +14 -0
  40. data/client/src/components/ui/logo-ruby.vue +547 -0
  41. data/client/src/demo.ts +17 -0
  42. data/client/src/dev.ts +20 -0
  43. data/client/src/main.ts +17 -0
  44. data/client/src/models/Config.ts +27 -0
  45. data/client/src/models/Request.ts +183 -0
  46. data/client/src/stores/RequestsStore.ts +36 -0
  47. data/client/src/stores/configStore.ts +8 -0
  48. data/client/src/style.css +23 -0
  49. data/client/src/types.d.ts +9 -0
  50. data/client/src/vite-env.d.ts +1 -0
  51. data/client/tailwind.config.js +16 -0
  52. data/client/tsconfig.json +29 -0
  53. data/client/tsconfig.node.json +10 -0
  54. data/client/vite.config.ts +44 -0
  55. data/config/routes.rb +7 -0
  56. data/debugbar.gemspec +38 -0
  57. data/fixtures/requests/1706607114--demo_post_list.json +499 -0
  58. data/fixtures/requests/1706607120--api_jobs.json +176 -0
  59. data/fixtures/requests/1706607123--api_jobs.json +119 -0
  60. data/fixtures/requests/1706607133--demo_slow_page.json +130 -0
  61. data/fixtures/requests/1706607136--demo_post.json +164 -0
  62. data/fixtures/requests/1706607136--demo_random_post.json +106 -0
  63. data/fixtures/requests/1706607141--api_errors.json +73 -0
  64. data/lib/debugbar/buffers/memory_buffer.rb +34 -0
  65. data/lib/debugbar/buffers/null_buffer.rb +18 -0
  66. data/lib/debugbar/buffers/request_buffer.rb +31 -0
  67. data/lib/debugbar/config.rb +50 -0
  68. data/lib/debugbar/current.rb +18 -0
  69. data/lib/debugbar/engine.rb +96 -5
  70. data/lib/debugbar/loggers/simple_logger.rb +34 -0
  71. data/lib/debugbar/middlewares/track_current_request.rb +35 -0
  72. data/lib/debugbar/request.rb +98 -0
  73. data/lib/debugbar/subscribers/action_controller.rb +33 -0
  74. data/lib/debugbar/subscribers/active_job.rb +158 -0
  75. data/lib/debugbar/subscribers/active_record.rb +65 -0
  76. data/lib/debugbar/subscribers/active_support.rb +30 -0
  77. data/lib/debugbar/version.rb +5 -0
  78. data/lib/debugbar.rb +86 -5
  79. data/package-lock.json +50 -0
  80. data/package.json +5 -0
  81. data/sig/debugbar.rbs +4 -0
  82. metadata +143 -47
  83. data/README.textile +0 -18
  84. data/lib/debugbar/railties/tasks.rake +0 -1
@@ -0,0 +1,176 @@
1
+ {
2
+ "id": "be72e954-78a4-4307-ad4a-a86199b62947",
3
+ "meta": {
4
+ "controller": "ApiController",
5
+ "action": "jobs",
6
+ "params": {
7
+ "name": "send_email",
8
+ "post_id": "4604",
9
+ "controller": "api",
10
+ "action": "jobs"
11
+ },
12
+ "format": "*/*",
13
+ "method": "GET",
14
+ "path": "/api/jobs?name=send_email&post_id=4604",
15
+ "status": 200,
16
+ "view_runtime": null,
17
+ "db_runtime": 2.7160001918673515,
18
+ "duration": 35.46600008010864,
19
+ "cpu_time": 32.441666999999995,
20
+ "idle_time": 3.024333080108647,
21
+ "allocations": 14318
22
+ },
23
+ "request": {
24
+ "method": "GET",
25
+ "path": "/api/jobs",
26
+ "format": "*/*",
27
+ "params": {
28
+ "name": "send_email",
29
+ "post_id": "4604",
30
+ "controller": "api",
31
+ "action": "jobs"
32
+ },
33
+ "headers": {
34
+ "Accept": "*/*",
35
+ "Accept-Encoding": "gzip, deflate, br",
36
+ "Accept-Language": "fr,en;q=0.9",
37
+ "Connection": "keep-alive",
38
+ "Cookie": "_demo_app_session=eq1z3nueUv0xrZcSj%2FWeJq73FFRrM0IZNT2KPq8mb195ScqdPPuP6bgBBpjRh3iZRPDoFVc%2BtALhiLF1Wu%2BPunVuuM%2F4muqZL8PIbAJHTsTx3eXbFVvVuJXYnrwCIhcg4BWtzeyWN9LrddjrkTpre8dcCFpZ8A0xQXuqBzBeOEMWj2eCnU%2Fq8q%2Bgff18iHhHzLsK5AUmd2jSm09usHS%2Bv1rf7b1V4pMP33Xuw66UxQiQUFW0Vn8Lld6ptzyB3pEswMdOwMLM7uWwh4oWP2q1xDgrIBhWhWrWCw%3D%3D--yu91yFNij6NW0A4N--RM%2FMVqNZrsoyC%2FXBBStDww%3D%3D",
39
+ "Dnt": "1",
40
+ "Host": "127.0.0.1:3000",
41
+ "Referer": "http://127.0.0.1:3000/post-list",
42
+ "Sec-Ch-Ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
43
+ "Sec-Ch-Ua-Mobile": "?0",
44
+ "Sec-Ch-Ua-Platform": "\"macOS\"",
45
+ "Sec-Fetch-Dest": "empty",
46
+ "Sec-Fetch-Mode": "cors",
47
+ "Sec-Fetch-Site": "same-origin",
48
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
49
+ "Version": "HTTP/1.1"
50
+ }
51
+ },
52
+ "response": {
53
+ "status": 200,
54
+ "headers": {
55
+ "X-Frame-Options": "SAMEORIGIN",
56
+ "X-Xss-Protection": "0",
57
+ "X-Content-Type-Options": "nosniff",
58
+ "X-Permitted-Cross-Domain-Policies": "none",
59
+ "Referrer-Policy": "strict-origin-when-cross-origin",
60
+ "Content-Type": "text/html",
61
+ "Cache-Control": "no-cache"
62
+ },
63
+ "body": ""
64
+ },
65
+ "models": {
66
+ "Post": 12
67
+ },
68
+ "queries": [
69
+ {
70
+ "id": "a49beead96b5a5e5ec7b",
71
+ "title": "Post Load (0.3ms)",
72
+ "name": "Post Load",
73
+ "sql": "SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 4604 LIMIT 1 ",
74
+ "cached": false,
75
+ "async": false,
76
+ "duration": 0.3,
77
+ "lock_wait": null,
78
+ "binds": null,
79
+ "source": [
80
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/jobs/send_email_job.rb:5",
81
+ " `perform'"
82
+ ]
83
+ },
84
+ {
85
+ "id": "a49beead96b5a5e5ec7b",
86
+ "title": "Post Load (2.4ms)",
87
+ "name": "Post Load",
88
+ "sql": "SELECT `posts`.* FROM `posts` ORDER BY `posts`.`published_at` DESC LIMIT 5 ",
89
+ "cached": false,
90
+ "async": false,
91
+ "duration": 2.4,
92
+ "lock_wait": null,
93
+ "binds": null,
94
+ "source": [
95
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/jobs/send_email_job.rb:6",
96
+ " `perform'"
97
+ ]
98
+ },
99
+ {
100
+ "id": "eb457f8705c4d0ce73d4",
101
+ "title": "CACHE Post Load (0.0ms)",
102
+ "name": "Post Load",
103
+ "sql": "SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 4604 LIMIT 1",
104
+ "cached": true,
105
+ "async": null,
106
+ "duration": 0.0,
107
+ "lock_wait": null,
108
+ "binds": null,
109
+ "source": [
110
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/jobs/send_email_job.rb:5",
111
+ " `perform'"
112
+ ]
113
+ },
114
+ {
115
+ "id": "eb457f8705c4d0ce73d4",
116
+ "title": "CACHE Post Load (0.0ms)",
117
+ "name": "Post Load",
118
+ "sql": "SELECT `posts`.* FROM `posts` ORDER BY `posts`.`published_at` DESC LIMIT 5",
119
+ "cached": true,
120
+ "async": null,
121
+ "duration": 0.0,
122
+ "lock_wait": null,
123
+ "binds": null,
124
+ "source": [
125
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/jobs/send_email_job.rb:6",
126
+ " `perform'"
127
+ ]
128
+ }
129
+ ],
130
+ "jobs": [
131
+ {
132
+ "id": "2ee83a02-2e93-4287-b1a9-80950eee537d",
133
+ "class": "SendEmailJob",
134
+ "queue": "Inline(default)",
135
+ "args": [
136
+ "4604",
137
+ {
138
+ "user_id": 99
139
+ }
140
+ ],
141
+ "successfully_enqueued": true,
142
+ "scheduled_at": null,
143
+ "logs": [
144
+ "Enqueued SendEmailJob (Job ID: 2ee83a02-2e93-4287-b1a9-80950eee537d) to Inline(default) with arguments: \"4604\", {:user_id=>99}",
145
+ "/Users/julien.bourdeau/Personal/debugbar/debugbar/lib/debugbar/subscribers/active_job.rb:22:in `enqueue'"
146
+ ]
147
+ },
148
+ {
149
+ "id": "e7c3e08a-53c7-4564-832b-286d43a2f73d",
150
+ "class": "SendEmailJob",
151
+ "queue": "Inline(default)",
152
+ "args": [
153
+ "4604",
154
+ {
155
+ "user_id": 1,
156
+ "admin": true
157
+ }
158
+ ],
159
+ "successfully_enqueued": true,
160
+ "scheduled_at": null,
161
+ "logs": [
162
+ "Enqueued SendEmailJob (Job ID: e7c3e08a-53c7-4564-832b-286d43a2f73d) to Inline(default) with arguments: \"4604\", {:user_id=>1, :admin=>true}",
163
+ "/Users/julien.bourdeau/Personal/debugbar/debugbar/lib/debugbar/subscribers/active_job.rb:22:in `enqueue'"
164
+ ]
165
+ }
166
+ ],
167
+ "messages": [
168
+
169
+ ],
170
+ "cache": [
171
+
172
+ ],
173
+ "logs": [
174
+
175
+ ]
176
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "id": "2922e5b4-2720-4d3f-9bac-4e27f5a8b5a3",
3
+ "meta": {
4
+ "controller": "ApiController",
5
+ "action": "jobs",
6
+ "params": {
7
+ "name": "refresh",
8
+ "post_id": "3720",
9
+ "controller": "api",
10
+ "action": "jobs"
11
+ },
12
+ "format": "*/*",
13
+ "method": "GET",
14
+ "path": "/api/jobs?name=refresh&post_id=3720",
15
+ "status": 200,
16
+ "view_runtime": null,
17
+ "db_runtime": 0.2989999484270811,
18
+ "duration": 10.365000009536743,
19
+ "cpu_time": 9.867709000000001,
20
+ "idle_time": 0.49729100953674177,
21
+ "allocations": 5504
22
+ },
23
+ "request": {
24
+ "method": "GET",
25
+ "path": "/api/jobs",
26
+ "format": "*/*",
27
+ "params": {
28
+ "name": "refresh",
29
+ "post_id": "3720",
30
+ "controller": "api",
31
+ "action": "jobs"
32
+ },
33
+ "headers": {
34
+ "Accept": "*/*",
35
+ "Accept-Encoding": "gzip, deflate, br",
36
+ "Accept-Language": "fr,en;q=0.9",
37
+ "Connection": "keep-alive",
38
+ "Cookie": "_demo_app_session=eq1z3nueUv0xrZcSj%2FWeJq73FFRrM0IZNT2KPq8mb195ScqdPPuP6bgBBpjRh3iZRPDoFVc%2BtALhiLF1Wu%2BPunVuuM%2F4muqZL8PIbAJHTsTx3eXbFVvVuJXYnrwCIhcg4BWtzeyWN9LrddjrkTpre8dcCFpZ8A0xQXuqBzBeOEMWj2eCnU%2Fq8q%2Bgff18iHhHzLsK5AUmd2jSm09usHS%2Bv1rf7b1V4pMP33Xuw66UxQiQUFW0Vn8Lld6ptzyB3pEswMdOwMLM7uWwh4oWP2q1xDgrIBhWhWrWCw%3D%3D--yu91yFNij6NW0A4N--RM%2FMVqNZrsoyC%2FXBBStDww%3D%3D",
39
+ "Dnt": "1",
40
+ "Host": "127.0.0.1:3000",
41
+ "Referer": "http://127.0.0.1:3000/post-list",
42
+ "Sec-Ch-Ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
43
+ "Sec-Ch-Ua-Mobile": "?0",
44
+ "Sec-Ch-Ua-Platform": "\"macOS\"",
45
+ "Sec-Fetch-Dest": "empty",
46
+ "Sec-Fetch-Mode": "cors",
47
+ "Sec-Fetch-Site": "same-origin",
48
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
49
+ "Version": "HTTP/1.1"
50
+ }
51
+ },
52
+ "response": {
53
+ "status": 200,
54
+ "headers": {
55
+ "X-Frame-Options": "SAMEORIGIN",
56
+ "X-Xss-Protection": "0",
57
+ "X-Content-Type-Options": "nosniff",
58
+ "X-Permitted-Cross-Domain-Policies": "none",
59
+ "Referrer-Policy": "strict-origin-when-cross-origin",
60
+ "Content-Type": "text/html",
61
+ "Cache-Control": "no-cache"
62
+ },
63
+ "body": ""
64
+ },
65
+ "models": {
66
+ "Post": 1
67
+ },
68
+ "queries": [
69
+ {
70
+ "id": "a49beead96b5a5e5ec7b",
71
+ "title": "Post Load (0.3ms)",
72
+ "name": "Post Load",
73
+ "sql": "SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 3720 LIMIT 1 ",
74
+ "cached": false,
75
+ "async": false,
76
+ "duration": 0.3,
77
+ "lock_wait": null,
78
+ "binds": null,
79
+ "source": [
80
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/jobs/refresh_post_job.rb:5",
81
+ " `perform'"
82
+ ]
83
+ }
84
+ ],
85
+ "jobs": [
86
+ {
87
+ "id": "d7fd3ac8-514d-4e8e-b695-cf147edf726c",
88
+ "class": "RefreshPostJob",
89
+ "queue": "Inline(default)",
90
+ "args": [
91
+ "3720"
92
+ ],
93
+ "successfully_enqueued": true,
94
+ "scheduled_at": null,
95
+ "logs": [
96
+ "Enqueued RefreshPostJob (Job ID: d7fd3ac8-514d-4e8e-b695-cf147edf726c) to Inline(default) with arguments: \"3720\"",
97
+ "/Users/julien.bourdeau/Personal/debugbar/debugbar/lib/debugbar/subscribers/active_job.rb:22:in `enqueue'"
98
+ ]
99
+ }
100
+ ],
101
+ "messages": [
102
+
103
+ ],
104
+ "cache": [
105
+ {
106
+ "key": "post:3720",
107
+ "store": "ActiveSupport::Cache::NullStore",
108
+ "compress": true,
109
+ "compress_threshold": 1024,
110
+ "name": "cache_write.active_support",
111
+ "transaction_id": "76191bfe4aff9d1334d7",
112
+ "time": "17:28:36.894",
113
+ "label": "write"
114
+ }
115
+ ],
116
+ "logs": [
117
+
118
+ ]
119
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "id": "9ef55b46-3953-4901-868b-19b86c80a1b4",
3
+ "meta": {
4
+ "controller": "DemoController",
5
+ "action": "slow_page",
6
+ "params": {
7
+ "controller": "demo",
8
+ "action": "slow_page"
9
+ },
10
+ "format": "html",
11
+ "method": "GET",
12
+ "path": "/slow-page",
13
+ "status": 200,
14
+ "view_runtime": 52.8460000641644,
15
+ "db_runtime": 3.154000034555793,
16
+ "duration": 5069.930000066757,
17
+ "cpu_time": 50.03016699999999,
18
+ "idle_time": 5019.899833066757,
19
+ "allocations": 27333
20
+ },
21
+ "request": {
22
+ "method": "GET",
23
+ "path": "/slow-page",
24
+ "format": "html",
25
+ "params": {
26
+ "controller": "demo",
27
+ "action": "slow_page"
28
+ },
29
+ "headers": {
30
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
31
+ "Accept-Encoding": "gzip, deflate, br",
32
+ "Accept-Language": "fr,en;q=0.9",
33
+ "Connection": "keep-alive",
34
+ "Cookie": "_demo_app_session=eq1z3nueUv0xrZcSj%2FWeJq73FFRrM0IZNT2KPq8mb195ScqdPPuP6bgBBpjRh3iZRPDoFVc%2BtALhiLF1Wu%2BPunVuuM%2F4muqZL8PIbAJHTsTx3eXbFVvVuJXYnrwCIhcg4BWtzeyWN9LrddjrkTpre8dcCFpZ8A0xQXuqBzBeOEMWj2eCnU%2Fq8q%2Bgff18iHhHzLsK5AUmd2jSm09usHS%2Bv1rf7b1V4pMP33Xuw66UxQiQUFW0Vn8Lld6ptzyB3pEswMdOwMLM7uWwh4oWP2q1xDgrIBhWhWrWCw%3D%3D--yu91yFNij6NW0A4N--RM%2FMVqNZrsoyC%2FXBBStDww%3D%3D",
35
+ "Dnt": "1",
36
+ "Host": "127.0.0.1:3000",
37
+ "If-None-Match": "W/\"9ec262e15d1de5a948ea376aadf0467f\"",
38
+ "Referer": "http://127.0.0.1:3000/post-list",
39
+ "Sec-Ch-Ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
40
+ "Sec-Ch-Ua-Mobile": "?0",
41
+ "Sec-Ch-Ua-Platform": "\"macOS\"",
42
+ "Sec-Fetch-Dest": "document",
43
+ "Sec-Fetch-Mode": "navigate",
44
+ "Sec-Fetch-Site": "same-origin",
45
+ "Sec-Fetch-User": "?1",
46
+ "Upgrade-Insecure-Requests": "1",
47
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
48
+ "Version": "HTTP/1.1"
49
+ }
50
+ },
51
+ "response": {
52
+ "status": 200,
53
+ "headers": {
54
+ "X-Frame-Options": "SAMEORIGIN",
55
+ "X-Xss-Protection": "0",
56
+ "X-Content-Type-Options": "nosniff",
57
+ "X-Permitted-Cross-Domain-Policies": "none",
58
+ "Referrer-Policy": "strict-origin-when-cross-origin",
59
+ "Link": "</assets/application-f8c090dd3cd5575b45894e4b6478d0b328f7a89e69c744e74f1153c5eca55e4e.css>; rel=preload; as=style; nopush,</assets/es-module-shims.min-4ca9b3dd5e434131e3bb4b0c1d7dff3bfd4035672a5086deec6f73979a49be73.js>; rel=preload; as=script; nopush",
60
+ "Content-Type": "text/html; charset=utf-8",
61
+ "Etag": "W/\"864d5fabd6f11d8c86c28559b93ec819\"",
62
+ "Cache-Control": "max-age=0, private, must-revalidate"
63
+ },
64
+ "body": "<!DOCTYPE html>\n<html>\n <head>\n <title>DemoApp</title>\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n <meta name=\"csrf-param\" content=\"authenticity_token\" />\n<meta name=\"csrf-token\" content=\"jkANCVc1y22rmM8YKU9seDSeSv3Jau1PJl99VLJo39ZICB3vzDcvN8r1xzwOrE713viWxdWsSZfx_pYnPAaNMQ\" />\n \n\n\n <link rel=\"stylesheet\" href=\"/assets/application-f8c090dd3cd5575b45894e4b6478d0b328f7a89e69c744e74f1153c5eca55e4e.css\" data-turbo-track=\"reload\" />\n <script type=\"importmap\" data-turbo-track=\"reload\">{\n \"imports\": {\n \"application\": \"/assets/application-f3e871e7be89ccb0adccd09d1fb0f2c5f0583d0626142906e3b227e5641284be.js\",\n \"@hotwired/turbo-rails\": \"/assets/turbo.min-dfd93b3092d1d0ff56557294538d069bdbb28977d3987cb39bc0dd892f32fc57.js\",\n \"@hotwired/stimulus\": \"/assets/stimulus.min-dd364f16ec9504dfb72672295637a1c8838773b01c0b441bd41008124c407894.js\",\n \"@hotwired/stimulus-loading\": \"/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js\",\n \"controllers/application\": \"/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js\",\n \"controllers/hello_controller\": \"/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js\",\n \"controllers\": \"/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js\"\n }\n}</script>\n<link rel=\"modulepreload\" href=\"/assets/application-f3e871e7be89ccb0adccd09d1fb0f2c5f0583d0626142906e3b227e5641284be.js\">\n<link rel=\"modulepreload\" href=\"/assets/turbo.min-dfd93b3092d1d0ff56557294538d069bdbb28977d3987cb39bc0dd892f32fc57.js\">\n<link rel=\"modulepreload\" href=\"/assets/stimulus.min-dd364f16ec9504dfb72672295637a1c8838773b01c0b441bd41008124c407894.js\">\n<link rel=\"modulepreload\" href=\"/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js\">\n<script src=\"/assets/es-module-shims.min-4ca9b3dd5e434131e3bb4b0c1d7dff3bfd4035672a5086deec6f73979a49be73.js\" async=\"async\" data-turbo-track=\"reload\"></script>\n<script type=\"module\">import \"application\"</script>\n\n </head>\n\n <body>\n <div class=\"container mb-5\">\n\n\n <nav class=\"mt-2 mb-4 navbar navbar-expand-lg navbar-light bg-light\">\n <div class=\"container-fluid\">\n <a class=\"navbar-brand\" href=\"#\">Rails Demo app</a>\n <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarText\" aria-controls=\"navbarText\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"collapse navbar-collapse\" id=\"navbarText\">\n <ul class=\"navbar-nav me-auto mb-2 mb-lg-0\">\n <li class=\"nav-item\">\n <a class=\"nav-link\" aria-current=\"page\" href=\"/post-list\">Post List</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" aria-current=\"page\" href=\"/random\">Random</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" aria-current=\"page\" href=\"/slow-page\">Slow page</a>\n </li>\n </ul>\n <ul class=\"navbar-nav\">\n <li class=\"nav-item\">\n <button type=\"button\" class=\"nav-link\" onclick=\"fetch('/api/errors?code=404'); fetch('/api/errors?code=401'); fetch('/api/errors?code=500')\">Errors</button>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n\n <div class=\"mb-5\">\n <div class=\"d-grid gap-5\">\n\n <h1>\n Mother Night\n <span class=\"text-muted\">(#5000)</span>\n </h1>\n\n <div>\n <h4>Quo</h4>\n\n<p>Aperiam modi et. Eius vel sit. Illum corporis hic.\n<code>Voluptatem.</code></p>\n\n </div>\n\n <pre>\n #### Quo\nAperiam modi et. Eius vel sit. Illum corporis hic.\n`Voluptatem.`\n </pre>\n\n <div class=\"d-flex gap-5\">\n <button type=\"button\" onclick=\"fetch('/api/add_reaction?name=up&post_id=5000')\" class=\"btn btn-primary position-relative\">\n Like 👍\n <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-black\">\n 242\n </span>\n </button>\n\n <button type=\"button\" onclick=\"fetch('/api/add_reaction?name=down&post_id=5000')\" class=\"btn btn-danger position-relative\">\n Nope 👎\n <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-black\">\n 220\n </span>\n </button>\n\n <button type=\"button\" onclick=\"fetch('/api/add_reaction?name=star&post_id=5000')\" class=\"btn btn-success position-relative\">\n Awesome 🤩\n <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-black\">\n 226\n </span>\n </button>\n </div>\n\n</div>\n\n </div>\n\n </div>\n\n <div id=\"__debugbar\"></div>\n <script type=\"text/javascript\">\n window._debugbarConfigOptions = {}\n </script>\n <script defer src=\"/_debugbar/assets/script\"></script>\n <script type=\"module\">\n import sheet from '/_debugbar/assets/style' assert { type: 'css' }\n const debugbar = document.getElementById('__debugbar-shadow-root')\n debugbar.shadowRoot.adoptedStyleSheets = [sheet];\n </script>\n\n </body>\n</html>\n"
65
+ },
66
+ "models": {
67
+ "Post": 1,
68
+ "Reaction": 688
69
+ },
70
+ "queries": [
71
+ {
72
+ "id": "a49beead96b5a5e5ec7b",
73
+ "title": "Post Load (0.9ms)",
74
+ "name": "Post Load",
75
+ "sql": "SELECT `posts`.* FROM `posts` ORDER BY `posts`.`id` DESC LIMIT 1 ",
76
+ "cached": false,
77
+ "async": false,
78
+ "duration": 0.9,
79
+ "lock_wait": null,
80
+ "binds": null,
81
+ "source": [
82
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/controllers/demo_controller.rb:26",
83
+ " `slow_page'"
84
+ ]
85
+ },
86
+ {
87
+ "id": "a49beead96b5a5e5ec7b",
88
+ "title": "Reaction Load (2.3ms)",
89
+ "name": "Reaction Load",
90
+ "sql": "SELECT `reactions`.* FROM `reactions` WHERE `reactions`.`post_id` = 5000 ",
91
+ "cached": false,
92
+ "async": false,
93
+ "duration": 2.3,
94
+ "lock_wait": null,
95
+ "binds": null,
96
+ "source": [
97
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/views/demo/post.html.erb:20",
98
+ " `_app_views_demo_post_html_erb__3830923846294067042_28740'"
99
+ ]
100
+ }
101
+ ],
102
+ "jobs": [
103
+
104
+ ],
105
+ "messages": [
106
+ {
107
+ "msg": "before_action",
108
+ "extra": [
109
+ {
110
+ "params": {
111
+ "controller": "demo",
112
+ "action": "slow_page"
113
+ }
114
+ }
115
+ ]
116
+ },
117
+ {
118
+ "msg": "Rendering navigation",
119
+ "extra": [
120
+
121
+ ]
122
+ }
123
+ ],
124
+ "cache": [
125
+
126
+ ],
127
+ "logs": [
128
+
129
+ ]
130
+ }
@@ -0,0 +1,164 @@
1
+ {
2
+ "id": "7462bd75-373f-4eba-95f0-86717d9e3fb9",
3
+ "meta": {
4
+ "controller": "DemoController",
5
+ "action": "post",
6
+ "params": {
7
+ "controller": "demo",
8
+ "action": "post",
9
+ "id": "930"
10
+ },
11
+ "format": "html",
12
+ "method": "GET",
13
+ "path": "/post/930",
14
+ "status": 200,
15
+ "view_runtime": 3.9580001030117273,
16
+ "db_runtime": 3.467999864369631,
17
+ "duration": 16.772000074386597,
18
+ "cpu_time": 13.348917,
19
+ "idle_time": 3.4230830743865965,
20
+ "allocations": 14349
21
+ },
22
+ "request": {
23
+ "method": "GET",
24
+ "path": "/post/930",
25
+ "format": "html",
26
+ "params": {
27
+ "controller": "demo",
28
+ "action": "post",
29
+ "id": "930"
30
+ },
31
+ "headers": {
32
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
33
+ "Accept-Encoding": "gzip, deflate, br",
34
+ "Accept-Language": "fr,en;q=0.9",
35
+ "Connection": "keep-alive",
36
+ "Cookie": "_demo_app_session=BQrfrqwaDxQLlcrCZCSwiiJrCVN6pWaGEmTUMl5s%2BWP2xDdT5GgSbZ1GjUxNevxh9zy%2FCWIXiCSkpd1bAMAEefyD7BUi4cgt%2BQ4xclmmUfebk8Hnl1sw0fhO0uGUk%2BsR6rZdEHZf%2FOQcUtzhuvk%2BNO4JdOoqLPqD6Z9A%2FuvUroWg3NHedrkYIx5yESdgdL7vYseAorT%2B2BtUH%2BRCftEXrEWRWdWyBHDgAanAcwu96zfwLBURN9h%2FAUBPn8wtvCc%2BoZPQXJlDGXSVEUxLd%2FiZ4INeR707T7HyCw%3D%3D--xI%2FllNiOtCHGENRn--%2Bh1H%2FRmTDAzWYcvTavhbTQ%3D%3D",
37
+ "Dnt": "1",
38
+ "Host": "127.0.0.1:3000",
39
+ "Referer": "http://127.0.0.1:3000/slow-page",
40
+ "Sec-Ch-Ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
41
+ "Sec-Ch-Ua-Mobile": "?0",
42
+ "Sec-Ch-Ua-Platform": "\"macOS\"",
43
+ "Sec-Fetch-Dest": "document",
44
+ "Sec-Fetch-Mode": "navigate",
45
+ "Sec-Fetch-Site": "same-origin",
46
+ "Sec-Fetch-User": "?1",
47
+ "Upgrade-Insecure-Requests": "1",
48
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
49
+ "Version": "HTTP/1.1"
50
+ }
51
+ },
52
+ "response": {
53
+ "status": 200,
54
+ "headers": {
55
+ "X-Frame-Options": "SAMEORIGIN",
56
+ "X-Xss-Protection": "0",
57
+ "X-Content-Type-Options": "nosniff",
58
+ "X-Permitted-Cross-Domain-Policies": "none",
59
+ "Referrer-Policy": "strict-origin-when-cross-origin",
60
+ "Link": "</assets/application-f8c090dd3cd5575b45894e4b6478d0b328f7a89e69c744e74f1153c5eca55e4e.css>; rel=preload; as=style; nopush,</assets/es-module-shims.min-4ca9b3dd5e434131e3bb4b0c1d7dff3bfd4035672a5086deec6f73979a49be73.js>; rel=preload; as=script; nopush",
61
+ "Content-Type": "text/html; charset=utf-8",
62
+ "Etag": "W/\"fe2dfd1a73e8caa6703d73252e559d37\"",
63
+ "Cache-Control": "max-age=0, private, must-revalidate"
64
+ },
65
+ "body": "<!DOCTYPE html>\n<html>\n <head>\n <title>DemoApp</title>\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n <meta name=\"csrf-param\" content=\"authenticity_token\" />\n<meta name=\"csrf-token\" content=\"hGJ5kpdI-WKAtpjuRFfnVM6gTxN09O5LvuOwISKu3MJCKml0DEodOOHbkMpjtMXZJMaTK2gySpNpQltSrMCOJQ\" />\n \n\n\n <link rel=\"stylesheet\" href=\"/assets/application-f8c090dd3cd5575b45894e4b6478d0b328f7a89e69c744e74f1153c5eca55e4e.css\" data-turbo-track=\"reload\" />\n <script type=\"importmap\" data-turbo-track=\"reload\">{\n \"imports\": {\n \"application\": \"/assets/application-f3e871e7be89ccb0adccd09d1fb0f2c5f0583d0626142906e3b227e5641284be.js\",\n \"@hotwired/turbo-rails\": \"/assets/turbo.min-dfd93b3092d1d0ff56557294538d069bdbb28977d3987cb39bc0dd892f32fc57.js\",\n \"@hotwired/stimulus\": \"/assets/stimulus.min-dd364f16ec9504dfb72672295637a1c8838773b01c0b441bd41008124c407894.js\",\n \"@hotwired/stimulus-loading\": \"/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js\",\n \"controllers/application\": \"/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js\",\n \"controllers/hello_controller\": \"/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js\",\n \"controllers\": \"/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js\"\n }\n}</script>\n<link rel=\"modulepreload\" href=\"/assets/application-f3e871e7be89ccb0adccd09d1fb0f2c5f0583d0626142906e3b227e5641284be.js\">\n<link rel=\"modulepreload\" href=\"/assets/turbo.min-dfd93b3092d1d0ff56557294538d069bdbb28977d3987cb39bc0dd892f32fc57.js\">\n<link rel=\"modulepreload\" href=\"/assets/stimulus.min-dd364f16ec9504dfb72672295637a1c8838773b01c0b441bd41008124c407894.js\">\n<link rel=\"modulepreload\" href=\"/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js\">\n<script src=\"/assets/es-module-shims.min-4ca9b3dd5e434131e3bb4b0c1d7dff3bfd4035672a5086deec6f73979a49be73.js\" async=\"async\" data-turbo-track=\"reload\"></script>\n<script type=\"module\">import \"application\"</script>\n\n </head>\n\n <body>\n <div class=\"container mb-5\">\n\n\n <nav class=\"mt-2 mb-4 navbar navbar-expand-lg navbar-light bg-light\">\n <div class=\"container-fluid\">\n <a class=\"navbar-brand\" href=\"#\">Rails Demo app</a>\n <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarText\" aria-controls=\"navbarText\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"collapse navbar-collapse\" id=\"navbarText\">\n <ul class=\"navbar-nav me-auto mb-2 mb-lg-0\">\n <li class=\"nav-item\">\n <a class=\"nav-link\" aria-current=\"page\" href=\"/post-list\">Post List</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" aria-current=\"page\" href=\"/random\">Random</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" aria-current=\"page\" href=\"/slow-page\">Slow page</a>\n </li>\n </ul>\n <ul class=\"navbar-nav\">\n <li class=\"nav-item\">\n <button type=\"button\" class=\"nav-link\" onclick=\"fetch('/api/errors?code=404'); fetch('/api/errors?code=401'); fetch('/api/errors?code=500')\">Errors</button>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n\n <div class=\"mb-5\">\n <div class=\"d-grid gap-5\">\n\n <h1>\n The Wind&#39;s Twelve Quarters\n <span class=\"text-muted\">(#930)</span>\n </h1>\n\n <div>\n <h1>Voluptas</h1>\n\n<p>Ullam culpa voluptates. Nobis est eos. Debitis architecto odio.\n0. Nemo. \n1. Quidem. \n2. Eos. \n3. Incidunt. \n4. Expedita. \n5. Autem. </p>\n\n </div>\n\n <pre>\n # Voluptas\nUllam culpa voluptates. Nobis est eos. Debitis architecto odio.\n0. Nemo. \n1. Quidem. \n2. Eos. \n3. Incidunt. \n4. Expedita. \n5. Autem. \n\n </pre>\n\n <div class=\"d-flex gap-5\">\n <button type=\"button\" onclick=\"fetch('/api/add_reaction?name=up&post_id=930')\" class=\"btn btn-primary position-relative\">\n Like 👍\n <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-black\">\n 59\n </span>\n </button>\n\n <button type=\"button\" onclick=\"fetch('/api/add_reaction?name=down&post_id=930')\" class=\"btn btn-danger position-relative\">\n Nope 👎\n <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-black\">\n 57\n </span>\n </button>\n\n <button type=\"button\" onclick=\"fetch('/api/add_reaction?name=star&post_id=930')\" class=\"btn btn-success position-relative\">\n Awesome 🤩\n <span class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-black\">\n 60\n </span>\n </button>\n </div>\n\n</div>\n\n </div>\n\n </div>\n\n <div id=\"__debugbar\"></div>\n <script type=\"text/javascript\">\n window._debugbarConfigOptions = {}\n </script>\n <script defer src=\"/_debugbar/assets/script\"></script>\n <script type=\"module\">\n import sheet from '/_debugbar/assets/style' assert { type: 'css' }\n const debugbar = document.getElementById('__debugbar-shadow-root')\n debugbar.shadowRoot.adoptedStyleSheets = [sheet];\n </script>\n\n </body>\n</html>\n"
66
+ },
67
+ "models": {
68
+ "Post": 1,
69
+ "PostAuthor": 9,
70
+ "Author": 9,
71
+ "Reaction": 176
72
+ },
73
+ "queries": [
74
+ {
75
+ "id": "a49beead96b5a5e5ec7b",
76
+ "title": "Post Load (0.4ms)",
77
+ "name": "Post Load",
78
+ "sql": "SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 930 LIMIT 1 ",
79
+ "cached": false,
80
+ "async": false,
81
+ "duration": 0.4,
82
+ "lock_wait": null,
83
+ "binds": null,
84
+ "source": [
85
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/controllers/demo_controller.rb:16",
86
+ " `post'"
87
+ ]
88
+ },
89
+ {
90
+ "id": "a49beead96b5a5e5ec7b",
91
+ "title": "PostAuthor Load (1.0ms)",
92
+ "name": "PostAuthor Load",
93
+ "sql": "SELECT `post_authors`.* FROM `post_authors` WHERE `post_authors`.`post_id` = 930 ",
94
+ "cached": false,
95
+ "async": false,
96
+ "duration": 1.0,
97
+ "lock_wait": null,
98
+ "binds": null,
99
+ "source": [
100
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/controllers/demo_controller.rb:16",
101
+ " `post'"
102
+ ]
103
+ },
104
+ {
105
+ "id": "a49beead96b5a5e5ec7b",
106
+ "title": "Author Load (0.3ms)",
107
+ "name": "Author Load",
108
+ "sql": "SELECT `authors`.* FROM `authors` WHERE `authors`.`id` IN (1684, 804, 1785, 1306, 188, 376, 165, 1009, 1809) ",
109
+ "cached": false,
110
+ "async": false,
111
+ "duration": 0.3,
112
+ "lock_wait": null,
113
+ "binds": null,
114
+ "source": [
115
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/controllers/demo_controller.rb:16",
116
+ " `post'"
117
+ ]
118
+ },
119
+ {
120
+ "id": "a49beead96b5a5e5ec7b",
121
+ "title": "Reaction Load (1.8ms)",
122
+ "name": "Reaction Load",
123
+ "sql": "SELECT `reactions`.* FROM `reactions` WHERE `reactions`.`post_id` = 930 ",
124
+ "cached": false,
125
+ "async": false,
126
+ "duration": 1.8,
127
+ "lock_wait": null,
128
+ "binds": null,
129
+ "source": [
130
+ "/Users/julien.bourdeau/Personal/rails/demo_app/app/controllers/demo_controller.rb:16",
131
+ " `post'"
132
+ ]
133
+ }
134
+ ],
135
+ "jobs": [
136
+
137
+ ],
138
+ "messages": [
139
+ {
140
+ "msg": "before_action",
141
+ "extra": [
142
+ {
143
+ "params": {
144
+ "controller": "demo",
145
+ "action": "post",
146
+ "id": "930"
147
+ }
148
+ }
149
+ ]
150
+ },
151
+ {
152
+ "msg": "Rendering navigation",
153
+ "extra": [
154
+
155
+ ]
156
+ }
157
+ ],
158
+ "cache": [
159
+
160
+ ],
161
+ "logs": [
162
+
163
+ ]
164
+ }