appmap 0.61.1 → 0.62.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -16
  3. data/ARCHITECTURE.md +68 -0
  4. data/CHANGELOG.md +15 -0
  5. data/exe/appmap-index +7 -0
  6. data/lib/appmap.rb +2 -0
  7. data/lib/appmap/agent.rb +0 -11
  8. data/lib/appmap/command/index.rb +25 -0
  9. data/lib/appmap/command/inspect.rb +0 -1
  10. data/lib/appmap/config.rb +8 -1
  11. data/lib/appmap/depends.rb +2 -0
  12. data/lib/appmap/depends/api.rb +84 -0
  13. data/lib/appmap/depends/configuration.rb +59 -0
  14. data/lib/appmap/depends/node_cli.rb +44 -0
  15. data/lib/appmap/depends/rake_tasks.rb +58 -0
  16. data/lib/appmap/depends/test_file_inspector.rb +89 -0
  17. data/lib/appmap/depends/test_runner.rb +106 -0
  18. data/lib/appmap/depends/util.rb +34 -0
  19. data/lib/appmap/version.rb +1 -1
  20. data/package.json +1 -1
  21. data/spec/depends/api_spec.rb +184 -0
  22. data/spec/depends/spec_helper.rb +27 -0
  23. data/spec/fixtures/depends/.gitignore +2 -0
  24. data/spec/fixtures/depends/app/controllers/api/api_keys_controller.rb +2 -0
  25. data/spec/fixtures/depends/app/controllers/organizations_controller.rb +2 -0
  26. data/spec/fixtures/depends/app/models/api_key.rb +2 -0
  27. data/spec/fixtures/depends/app/models/configuration.rb +2 -0
  28. data/spec/fixtures/depends/app/models/show.rb +2 -0
  29. data/spec/fixtures/depends/app/models/user.rb +2 -0
  30. data/spec/fixtures/depends/revoke_api_key.appmap.json +901 -0
  31. data/spec/fixtures/depends/spec/actual_rspec_test.rb +7 -0
  32. data/spec/fixtures/depends/spec/api_spec.rb +2 -0
  33. data/spec/fixtures/depends/spec/user_spec.rb +2 -0
  34. data/spec/fixtures/depends/test/actual_minitest_test.rb +5 -0
  35. data/spec/fixtures/depends/user_page_scenario.appmap.json +1776 -0
  36. data/spec/fixtures/rails5_users_app/create_app +3 -3
  37. data/spec/fixtures/rails6_users_app/create_app +3 -3
  38. data/spec/fixtures/rails6_users_app/lib/tasks/appmap.rake +11 -1
  39. data/test/test_helper.rb +3 -0
  40. data/yarn.lock +23 -9
  41. metadata +29 -2
@@ -0,0 +1,27 @@
1
+ require_relative '../spec_helper'
2
+
3
+ DEPENDS_TEST_DIR = 'spec/fixtures/depends'
4
+ DEPENDS_BASE_DIR = DEPENDS_TEST_DIR
5
+
6
+ def update_appmap_index
7
+ cmd = [
8
+ './exe/appmap-index',
9
+ '--appmap-dir',
10
+ DEPENDS_TEST_DIR
11
+ ]
12
+ if ENV['DEBUG'] == 'true'
13
+ cmd << '--verbose'
14
+ end
15
+
16
+ system cmd.join(' ') or raise "Failed to update AppMap index in #{DEPENDS_TEST_DIR}"
17
+ end
18
+
19
+ RSpec.configure do |rspec|
20
+ rspec.before do
21
+ Dir.glob("#{DEPENDS_TEST_DIR}/*.appmap.json").each { |fname| FileUtils.touch fname }
22
+ update_appmap_index
23
+
24
+ FileUtils.rm_rf 'spec/tmp'
25
+ FileUtils.mkdir_p 'spec/tmp'
26
+ end
27
+ end
@@ -0,0 +1,2 @@
1
+ user_page_scenario
2
+ revoke_api_key
@@ -0,0 +1,2 @@
1
+ # dummy
2
+ # This file is just here so it can be touched and trigger re-test.
@@ -0,0 +1,2 @@
1
+ # dummy
2
+ # This file is just here so it can be touched and trigger re-test.
@@ -0,0 +1,2 @@
1
+ # dummy
2
+ # This file is just here so it can be touched and trigger re-test.
@@ -0,0 +1,2 @@
1
+ # dummy
2
+ # This file is just here so it can be touched and trigger re-test.
@@ -0,0 +1,2 @@
1
+ # dummy
2
+ # This file is just here so it can be touched and trigger re-test.
@@ -0,0 +1,2 @@
1
+ # dummy
2
+ # This file is just here so it can be touched and trigger re-test.
@@ -0,0 +1,901 @@
1
+ {
2
+ "version": "1.3",
3
+ "metadata": {
4
+ "app": "appland/AppLand",
5
+ "language": {
6
+ "name": "ruby",
7
+ "engine": "ruby",
8
+ "version": "2.6.6"
9
+ },
10
+ "client": {
11
+ "name": "appmap",
12
+ "url": "https://github.com/applandinc/appmap-ruby",
13
+ "version": "0.38.1"
14
+ },
15
+ "frameworks": [
16
+ {
17
+ "name": "rails",
18
+ "version": "5.2.4.2"
19
+ },
20
+ {
21
+ "name": "rspec",
22
+ "version": "3.9.1"
23
+ }
24
+ ],
25
+ "git": {
26
+ "repository": "git@github.com:applandinc/appland.git",
27
+ "branch": "feature/show-sql-in-source-code-tab",
28
+ "commit": "d52bd55d5a08f0e9b27760780bf2737829f5f25f",
29
+ "status_code": [
30
+ "M Gemfile.lock"
31
+ ],
32
+ "git_last_annotated_tag": null,
33
+ "git_last_tag": "v0.17.1",
34
+ "git_commits_since_last_annotated_tag": null,
35
+ "git_commits_since_last_tag": 0
36
+ },
37
+ "name": "API::APIKeysController revoke an existing api key",
38
+ "feature": "API::APIKeysController revoke",
39
+ "feature_group": "API API keys",
40
+ "labels": [
41
+ "api key",
42
+ "api"
43
+ ],
44
+ "recorder": {
45
+ "name": "rspec"
46
+ },
47
+ "source_location": "spec/fixtures/depends/spec/api_spec.rb",
48
+ "test_status": "succeeded",
49
+ "fingerprints": [
50
+ {
51
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
52
+ "canonicalization_algorithm": "classDependencies",
53
+ "digest": "b03b42964920b123b5c5f1ae158a01b3bbbaad44c4bcb23ff12c7dc50b89f63e",
54
+ "fingerprint_algorithm": "sha256"
55
+ },
56
+ {
57
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
58
+ "canonicalization_algorithm": "classes",
59
+ "digest": "9717f0de0c287764b0504895124418e6360e6114c62ea49cef434943127325b1",
60
+ "fingerprint_algorithm": "sha256"
61
+ },
62
+ {
63
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
64
+ "canonicalization_algorithm": "httpClientRequests",
65
+ "digest": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
66
+ "fingerprint_algorithm": "sha256"
67
+ },
68
+ {
69
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
70
+ "canonicalization_algorithm": "httpServerRequests",
71
+ "digest": "39d2d586f3afb6c6cc5da0e6c99b07c38561c76cff17badc9fa092d1f3d5e0f5",
72
+ "fingerprint_algorithm": "sha256"
73
+ },
74
+ {
75
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
76
+ "canonicalization_algorithm": "info",
77
+ "digest": "bd63ed674a87494c9565d4bf7ecad797683528b8b83bbb66f27b334b6e303f67",
78
+ "fingerprint_algorithm": "sha256"
79
+ },
80
+ {
81
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
82
+ "canonicalization_algorithm": "labels",
83
+ "digest": "e95576d7e3b78f79946291943fd30ae46cdeea011c1ee0fe4f880d80e514e282",
84
+ "fingerprint_algorithm": "sha256"
85
+ },
86
+ {
87
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
88
+ "canonicalization_algorithm": "packageDependencies",
89
+ "digest": "3f108b0a9ca874a5bc90a30f48da9b068269e0a91d01d3eb4d2af3fe25cb09f3",
90
+ "fingerprint_algorithm": "sha256"
91
+ },
92
+ {
93
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
94
+ "canonicalization_algorithm": "packages",
95
+ "digest": "174dff39ae750e61f0eac4933a745eb8059c7e2a98a1c94c34f722037c80a468",
96
+ "fingerprint_algorithm": "sha256"
97
+ },
98
+ {
99
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
100
+ "canonicalization_algorithm": "sqlNormalized",
101
+ "digest": "bcb13a826aa404fa0afbaeae8cea134cf674e599619f14e3864173dd52987ee4",
102
+ "fingerprint_algorithm": "sha256"
103
+ },
104
+ {
105
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
106
+ "canonicalization_algorithm": "sqlTables",
107
+ "digest": "a7daba4152bc0c118de3840f9b02cd3eed9ab4922c96ed5edd33dbdcd71c43e6",
108
+ "fingerprint_algorithm": "sha256"
109
+ },
110
+ {
111
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
112
+ "canonicalization_algorithm": "trace",
113
+ "digest": "464056ee79400cf881d31e4db167cf12caadfffdc814bc89ed01b89f746dcbd1",
114
+ "fingerprint_algorithm": "sha256"
115
+ },
116
+ {
117
+ "appmap_digest": "7fecdd763d47626364364da02387f1fcbfe805123e806f08bacde96636cfc91d",
118
+ "canonicalization_algorithm": "update",
119
+ "digest": "a78760f0ae6eabb20403b812101d86c609294e36fff53be54dec71b1244076b0",
120
+ "fingerprint_algorithm": "sha256"
121
+ }
122
+ ]
123
+ },
124
+ "classMap": [
125
+ {
126
+ "name": "app/models",
127
+ "type": "package",
128
+ "children": [
129
+ {
130
+ "name": "ApiKey",
131
+ "type": "class",
132
+ "children": [
133
+ {
134
+ "name": "issue",
135
+ "type": "function",
136
+ "location": "app/models/api_key.rb:28",
137
+ "static": true,
138
+ "labels": [
139
+ "security"
140
+ ]
141
+ },
142
+ {
143
+ "name": "encode",
144
+ "type": "function",
145
+ "location": "app/models/api_key.rb:20",
146
+ "static": true
147
+ },
148
+ {
149
+ "name": "authenticate",
150
+ "type": "function",
151
+ "location": "app/models/api_key.rb:51",
152
+ "static": true,
153
+ "labels": [
154
+ "security",
155
+ "provider.authenticate"
156
+ ]
157
+ },
158
+ {
159
+ "name": "decode",
160
+ "type": "function",
161
+ "location": "app/models/api_key.rb:24",
162
+ "static": true
163
+ },
164
+ {
165
+ "name": "touch",
166
+ "type": "function",
167
+ "location": "app/models/api_key.rb:11",
168
+ "static": true
169
+ },
170
+ {
171
+ "name": "revoke",
172
+ "type": "function",
173
+ "location": "app/models/api_key.rb:40",
174
+ "static": true,
175
+ "labels": [
176
+ "security"
177
+ ]
178
+ }
179
+ ]
180
+ }
181
+ ]
182
+ },
183
+ {
184
+ "name": "app/controllers",
185
+ "type": "package",
186
+ "children": [
187
+ {
188
+ "name": "API",
189
+ "type": "class",
190
+ "children": [
191
+ {
192
+ "name": "APIKeysController",
193
+ "type": "class",
194
+ "children": [
195
+ {
196
+ "name": "destroy",
197
+ "type": "function",
198
+ "location": "app/controllers/api/api_keys_controller.rb:15",
199
+ "static": false
200
+ }
201
+ ]
202
+ }
203
+ ]
204
+ }
205
+ ]
206
+ },
207
+ {
208
+ "name": "json",
209
+ "type": "package",
210
+ "children": [
211
+ {
212
+ "name": "JSON",
213
+ "type": "class",
214
+ "children": [
215
+ {
216
+ "name": "Ext",
217
+ "type": "class",
218
+ "children": [
219
+ {
220
+ "name": "Generator",
221
+ "type": "class",
222
+ "children": [
223
+ {
224
+ "name": "State",
225
+ "type": "class",
226
+ "children": [
227
+ {
228
+ "name": "generate",
229
+ "type": "function",
230
+ "location": "JSON::Ext::Generator::State#generate",
231
+ "static": false,
232
+ "labels": [
233
+ "serialization",
234
+ "json"
235
+ ]
236
+ }
237
+ ]
238
+ }
239
+ ]
240
+ }
241
+ ]
242
+ }
243
+ ]
244
+ }
245
+ ]
246
+ }
247
+ ],
248
+ "events": [
249
+ {
250
+ "id": 1,
251
+ "event": "call",
252
+ "thread_id": 70143606759380,
253
+ "defined_class": "ApiKey",
254
+ "method_id": "issue",
255
+ "path": "app/models/api_key.rb",
256
+ "lineno": 28,
257
+ "static": true,
258
+ "parameters": [
259
+ {
260
+ "name": "login",
261
+ "class": "String",
262
+ "object_id": 70143707320560,
263
+ "value": "admin",
264
+ "kind": "req"
265
+ },
266
+ {
267
+ "name": "description",
268
+ "class": "String",
269
+ "object_id": 70143709034840,
270
+ "value": "example api key",
271
+ "kind": "key"
272
+ },
273
+ {
274
+ "name": "encode",
275
+ "class": "NilClass",
276
+ "object_id": 8,
277
+ "value": null,
278
+ "kind": "key"
279
+ }
280
+ ],
281
+ "receiver": {
282
+ "class": "Class",
283
+ "object_id": 70143710327480,
284
+ "value": "ApiKey"
285
+ }
286
+ },
287
+ {
288
+ "id": 2,
289
+ "event": "call",
290
+ "thread_id": 70143606759380,
291
+ "sql_query": {
292
+ "sql": "INSERT INTO \"api_keys\" (\"login\", \"description\") VALUES ('admin', 'example api key') RETURNING *",
293
+ "database_type": "postgres",
294
+ "server_version": 120003
295
+ }
296
+ },
297
+ {
298
+ "id": 3,
299
+ "event": "return",
300
+ "thread_id": 70143606759380,
301
+ "parent_id": 2,
302
+ "elapsed": 0.001786
303
+ },
304
+ {
305
+ "id": 4,
306
+ "event": "call",
307
+ "thread_id": 70143606759380,
308
+ "defined_class": "ApiKey",
309
+ "method_id": "encode",
310
+ "path": "app/models/api_key.rb",
311
+ "lineno": 20,
312
+ "static": true,
313
+ "parameters": [
314
+ {
315
+ "name": "api_key",
316
+ "class": "DAO::ApiKey",
317
+ "object_id": 70143624613220,
318
+ "value": "#<DAO::ApiKey:0x00007f972ba81ac8>",
319
+ "kind": "req"
320
+ }
321
+ ],
322
+ "receiver": {
323
+ "class": "Class",
324
+ "object_id": 70143710327480,
325
+ "value": "ApiKey"
326
+ }
327
+ },
328
+ {
329
+ "id": 5,
330
+ "event": "return",
331
+ "thread_id": 70143606759380,
332
+ "parent_id": 4,
333
+ "elapsed": 0.000024,
334
+ "return_value": {
335
+ "class": "String",
336
+ "value": "YWRtaW46ZTU3YTgzMTAtZTcxOC00OTE0LWIzZmEtYjExZDRhMDY4N2Vl",
337
+ "object_id": 70143608697140
338
+ }
339
+ },
340
+ {
341
+ "id": 6,
342
+ "event": "return",
343
+ "thread_id": 70143606759380,
344
+ "parent_id": 1,
345
+ "elapsed": 0.038045,
346
+ "return_value": {
347
+ "class": "String",
348
+ "value": "YWRtaW46ZTU3YTgzMTAtZTcxOC00OTE0LWIzZmEtYjExZDRhMDY4N2Vl",
349
+ "object_id": 70143608697140
350
+ }
351
+ },
352
+ {
353
+ "id": 7,
354
+ "event": "call",
355
+ "thread_id": 70143606759380,
356
+ "http_server_request": {
357
+ "request_method": "DELETE",
358
+ "path_info": "/api/api_keys"
359
+ },
360
+ "message": [
361
+ {
362
+ "name": "controller",
363
+ "class": "String",
364
+ "value": "api/api_keys",
365
+ "object_id": 70143625900420
366
+ },
367
+ {
368
+ "name": "action",
369
+ "class": "String",
370
+ "value": "destroy",
371
+ "object_id": 70143625903660
372
+ }
373
+ ]
374
+ },
375
+ {
376
+ "id": 8,
377
+ "event": "call",
378
+ "thread_id": 70143606759380,
379
+ "defined_class": "ApiKey",
380
+ "method_id": "authenticate",
381
+ "path": "app/models/api_key.rb",
382
+ "lineno": 51,
383
+ "static": true,
384
+ "parameters": [
385
+ {
386
+ "name": "api_key",
387
+ "class": "String",
388
+ "object_id": 70143626063440,
389
+ "value": "YWRtaW46ZTU3YTgzMTAtZTcxOC00OTE0LWIzZmEtYjExZDRhMDY4N2Vl",
390
+ "kind": "req"
391
+ }
392
+ ],
393
+ "receiver": {
394
+ "class": "Class",
395
+ "object_id": 70143710327480,
396
+ "value": "ApiKey"
397
+ }
398
+ },
399
+ {
400
+ "id": 9,
401
+ "event": "call",
402
+ "thread_id": 70143606759380,
403
+ "defined_class": "ApiKey",
404
+ "method_id": "decode",
405
+ "path": "app/models/api_key.rb",
406
+ "lineno": 24,
407
+ "static": true,
408
+ "parameters": [
409
+ {
410
+ "name": "api_key",
411
+ "class": "String",
412
+ "object_id": 70143626063440,
413
+ "value": "YWRtaW46ZTU3YTgzMTAtZTcxOC00OTE0LWIzZmEtYjExZDRhMDY4N2Vl",
414
+ "kind": "req"
415
+ }
416
+ ],
417
+ "receiver": {
418
+ "class": "Class",
419
+ "object_id": 70143710327480,
420
+ "value": "ApiKey"
421
+ }
422
+ },
423
+ {
424
+ "id": 10,
425
+ "event": "return",
426
+ "thread_id": 70143606759380,
427
+ "parent_id": 9,
428
+ "elapsed": 0.000019,
429
+ "return_value": {
430
+ "class": "Array",
431
+ "value": "[\"admin\", \"e57a8310-e718-4914-b3fa-b11d4a0687ee\"]",
432
+ "object_id": 70143626079020
433
+ }
434
+ },
435
+ {
436
+ "id": 11,
437
+ "event": "call",
438
+ "thread_id": 70143606759380,
439
+ "sql_query": {
440
+ "sql": "SELECT * FROM \"api_keys\" WHERE (\"login\" = 'admin')",
441
+ "database_type": "postgres",
442
+ "server_version": 120003
443
+ }
444
+ },
445
+ {
446
+ "id": 12,
447
+ "event": "return",
448
+ "thread_id": 70143606759380,
449
+ "parent_id": 11,
450
+ "elapsed": 0.001087
451
+ },
452
+ {
453
+ "id": 13,
454
+ "event": "call",
455
+ "thread_id": 70143606759380,
456
+ "defined_class": "ApiKey",
457
+ "method_id": "touch",
458
+ "path": "app/models/api_key.rb",
459
+ "lineno": 11,
460
+ "static": true,
461
+ "parameters": [
462
+ {
463
+ "name": "api_key",
464
+ "class": "DAO::ApiKey",
465
+ "object_id": 70143621442700,
466
+ "value": "#<DAO::ApiKey:0x00007f972b475918>",
467
+ "kind": "req"
468
+ }
469
+ ],
470
+ "receiver": {
471
+ "class": "Class",
472
+ "object_id": 70143710327480,
473
+ "value": "ApiKey"
474
+ }
475
+ },
476
+ {
477
+ "id": 14,
478
+ "event": "call",
479
+ "thread_id": 70143606759380,
480
+ "sql_query": {
481
+ "sql": "UPDATE \"api_keys\" SET \"last_used\" = '2021-01-12 18:48:00.281150+0000' WHERE (\"id\" = 9)",
482
+ "database_type": "postgres",
483
+ "server_version": 120003
484
+ }
485
+ },
486
+ {
487
+ "id": 15,
488
+ "event": "return",
489
+ "thread_id": 70143606759380,
490
+ "parent_id": 14,
491
+ "elapsed": 0.000805
492
+ },
493
+ {
494
+ "id": 16,
495
+ "event": "return",
496
+ "thread_id": 70143606759380,
497
+ "parent_id": 13,
498
+ "elapsed": 0.005023,
499
+ "return_value": {
500
+ "class": "DAO::ApiKey",
501
+ "value": "#<DAO::ApiKey:0x00007f972b475918>",
502
+ "object_id": 70143621442700
503
+ }
504
+ },
505
+ {
506
+ "id": 17,
507
+ "event": "call",
508
+ "thread_id": 70143606759380,
509
+ "sql_query": {
510
+ "sql": "SELECT * FROM \"users\" WHERE (\"users\".\"login\" = 'admin') LIMIT 1",
511
+ "database_type": "postgres",
512
+ "server_version": 120003
513
+ }
514
+ },
515
+ {
516
+ "id": 18,
517
+ "event": "return",
518
+ "thread_id": 70143606759380,
519
+ "parent_id": 17,
520
+ "elapsed": 0.00103
521
+ },
522
+ {
523
+ "id": 19,
524
+ "event": "call",
525
+ "thread_id": 70143606759380,
526
+ "sql_query": {
527
+ "sql": "SELECT \"pg_type\".\"oid\", \"typrelid\", \"typarray\" FROM \"pg_type\" WHERE ((\"typtype\" = 'c') AND (\"typname\" = 'q_class')) LIMIT 1",
528
+ "database_type": "postgres",
529
+ "server_version": 120003
530
+ }
531
+ },
532
+ {
533
+ "id": 20,
534
+ "event": "return",
535
+ "thread_id": 70143606759380,
536
+ "parent_id": 19,
537
+ "elapsed": 0.001234
538
+ },
539
+ {
540
+ "id": 21,
541
+ "event": "call",
542
+ "thread_id": 70143606759380,
543
+ "sql_query": {
544
+ "sql": "SELECT \"attname\", (CASE \"pg_type\".\"typbasetype\" WHEN 0 THEN \"atttypid\" ELSE \"pg_type\".\"typbasetype\" END) AS \"atttypid\" FROM \"pg_attribute\" INNER JOIN \"pg_type\" ON (\"pg_type\".\"oid\" = \"pg_attribute\".\"atttypid\") WHERE ((\"attrelid\" = 223731) AND (\"attnum\" > 0) AND NOT \"attisdropped\") ORDER BY \"attnum\"",
545
+ "database_type": "postgres",
546
+ "server_version": 120003
547
+ }
548
+ },
549
+ {
550
+ "id": 22,
551
+ "event": "return",
552
+ "thread_id": 70143606759380,
553
+ "parent_id": 21,
554
+ "elapsed": 0.001281
555
+ },
556
+ {
557
+ "id": 23,
558
+ "event": "call",
559
+ "thread_id": 70143606759380,
560
+ "sql_query": {
561
+ "sql": "SELECT \"pg_type\".\"oid\", \"typrelid\", \"typarray\" FROM \"pg_type\" WHERE ((\"typtype\" = 'c') AND (\"typname\" = 'fn_call')) LIMIT 1",
562
+ "database_type": "postgres",
563
+ "server_version": 120003
564
+ }
565
+ },
566
+ {
567
+ "id": 24,
568
+ "event": "return",
569
+ "thread_id": 70143606759380,
570
+ "parent_id": 23,
571
+ "elapsed": 0.000838
572
+ },
573
+ {
574
+ "id": 25,
575
+ "event": "call",
576
+ "thread_id": 70143606759380,
577
+ "sql_query": {
578
+ "sql": "SELECT \"attname\", (CASE \"pg_type\".\"typbasetype\" WHEN 0 THEN \"atttypid\" ELSE \"pg_type\".\"typbasetype\" END) AS \"atttypid\" FROM \"pg_attribute\" INNER JOIN \"pg_type\" ON (\"pg_type\".\"oid\" = \"pg_attribute\".\"atttypid\") WHERE ((\"attrelid\" = 223734) AND (\"attnum\" > 0) AND NOT \"attisdropped\") ORDER BY \"attnum\"",
579
+ "database_type": "postgres",
580
+ "server_version": 120003
581
+ }
582
+ },
583
+ {
584
+ "id": 26,
585
+ "event": "return",
586
+ "thread_id": 70143606759380,
587
+ "parent_id": 25,
588
+ "elapsed": 0.001017
589
+ },
590
+ {
591
+ "id": 27,
592
+ "event": "return",
593
+ "thread_id": 70143606759380,
594
+ "parent_id": 8,
595
+ "elapsed": 0.150356,
596
+ "return_value": {
597
+ "class": "User::Show",
598
+ "value": "#<User::Show:0x00007f972cee0d20>",
599
+ "object_id": 70143635293840
600
+ }
601
+ },
602
+ {
603
+ "id": 28,
604
+ "event": "call",
605
+ "thread_id": 70143606759380,
606
+ "defined_class": "API::APIKeysController",
607
+ "method_id": "destroy",
608
+ "path": "app/controllers/api/api_keys_controller.rb",
609
+ "lineno": 15,
610
+ "static": false,
611
+ "parameters": [],
612
+ "receiver": {
613
+ "class": "API::APIKeysController",
614
+ "object_id": 70143625216500,
615
+ "value": "#<API::APIKeysController:0x00007f972bba83e8>"
616
+ }
617
+ },
618
+ {
619
+ "id": 29,
620
+ "event": "call",
621
+ "thread_id": 70143606759380,
622
+ "defined_class": "ApiKey",
623
+ "method_id": "revoke",
624
+ "path": "app/models/api_key.rb",
625
+ "lineno": 40,
626
+ "static": true,
627
+ "parameters": [
628
+ {
629
+ "name": "api_key",
630
+ "class": "String",
631
+ "object_id": 70143626063440,
632
+ "value": "YWRtaW46ZTU3YTgzMTAtZTcxOC00OTE0LWIzZmEtYjExZDRhMDY4N2Vl",
633
+ "kind": "req"
634
+ }
635
+ ],
636
+ "receiver": {
637
+ "class": "Class",
638
+ "object_id": 70143710327480,
639
+ "value": "ApiKey"
640
+ }
641
+ },
642
+ {
643
+ "id": 30,
644
+ "event": "call",
645
+ "thread_id": 70143606759380,
646
+ "defined_class": "ApiKey",
647
+ "method_id": "decode",
648
+ "path": "app/models/api_key.rb",
649
+ "lineno": 24,
650
+ "static": true,
651
+ "parameters": [
652
+ {
653
+ "name": "api_key",
654
+ "class": "String",
655
+ "object_id": 70143626063440,
656
+ "value": "YWRtaW46ZTU3YTgzMTAtZTcxOC00OTE0LWIzZmEtYjExZDRhMDY4N2Vl",
657
+ "kind": "req"
658
+ }
659
+ ],
660
+ "receiver": {
661
+ "class": "Class",
662
+ "object_id": 70143710327480,
663
+ "value": "ApiKey"
664
+ }
665
+ },
666
+ {
667
+ "id": 31,
668
+ "event": "return",
669
+ "thread_id": 70143606759380,
670
+ "parent_id": 30,
671
+ "elapsed": 0.000011,
672
+ "return_value": {
673
+ "class": "Array",
674
+ "value": "[\"admin\", \"e57a8310-e718-4914-b3fa-b11d4a0687ee\"]",
675
+ "object_id": 70143613653900
676
+ }
677
+ },
678
+ {
679
+ "id": 32,
680
+ "event": "call",
681
+ "thread_id": 70143606759380,
682
+ "sql_query": {
683
+ "sql": "SELECT * FROM \"api_keys\" WHERE (\"login\" = 'admin')",
684
+ "database_type": "postgres",
685
+ "server_version": 120003
686
+ }
687
+ },
688
+ {
689
+ "id": 33,
690
+ "event": "return",
691
+ "thread_id": 70143606759380,
692
+ "parent_id": 32,
693
+ "elapsed": 0.001134
694
+ },
695
+ {
696
+ "id": 34,
697
+ "event": "call",
698
+ "thread_id": 70143606759380,
699
+ "sql_query": {
700
+ "sql": "DELETE FROM \"api_keys\" WHERE \"id\" = 9",
701
+ "database_type": "postgres",
702
+ "server_version": 120003
703
+ }
704
+ },
705
+ {
706
+ "id": 35,
707
+ "event": "return",
708
+ "thread_id": 70143606759380,
709
+ "parent_id": 34,
710
+ "elapsed": 0.001028
711
+ },
712
+ {
713
+ "id": 36,
714
+ "event": "return",
715
+ "thread_id": 70143606759380,
716
+ "parent_id": 29,
717
+ "elapsed": 0.008962,
718
+ "return_value": {
719
+ "class": "DAO::ApiKey",
720
+ "value": "#<DAO::ApiKey:0x00007f972cfa8de8>",
721
+ "object_id": 70143635703540
722
+ }
723
+ },
724
+ {
725
+ "id": 37,
726
+ "event": "return",
727
+ "thread_id": 70143606759380,
728
+ "parent_id": 28,
729
+ "elapsed": 0.009195,
730
+ "return_value": {
731
+ "class": "String",
732
+ "value": "",
733
+ "object_id": 70143606590020
734
+ }
735
+ },
736
+ {
737
+ "id": 38,
738
+ "event": "return",
739
+ "thread_id": 70143606759380,
740
+ "parent_id": 7,
741
+ "elapsed": 0.163302,
742
+ "http_server_response": {
743
+ "mime_type": "application/json; charset=utf-8",
744
+ "status": 200
745
+ }
746
+ },
747
+ {
748
+ "id": 39,
749
+ "event": "call",
750
+ "thread_id": 70143606759380,
751
+ "http_server_request": {
752
+ "request_method": "DELETE",
753
+ "path_info": "/api/api_keys"
754
+ },
755
+ "message": [
756
+ {
757
+ "name": "controller",
758
+ "class": "String",
759
+ "value": "api/api_keys",
760
+ "object_id": 70143625900420
761
+ },
762
+ {
763
+ "name": "action",
764
+ "class": "String",
765
+ "value": "destroy",
766
+ "object_id": 70143625903660
767
+ }
768
+ ]
769
+ },
770
+ {
771
+ "id": 40,
772
+ "event": "call",
773
+ "thread_id": 70143606759380,
774
+ "defined_class": "ApiKey",
775
+ "method_id": "authenticate",
776
+ "path": "app/models/api_key.rb",
777
+ "lineno": 51,
778
+ "static": true,
779
+ "parameters": [
780
+ {
781
+ "name": "api_key",
782
+ "class": "String",
783
+ "object_id": 70143707623380,
784
+ "value": "YWRtaW46ZTU3YTgzMTAtZTcxOC00OTE0LWIzZmEtYjExZDRhMDY4N2Vl",
785
+ "kind": "req"
786
+ }
787
+ ],
788
+ "receiver": {
789
+ "class": "Class",
790
+ "object_id": 70143710327480,
791
+ "value": "ApiKey"
792
+ }
793
+ },
794
+ {
795
+ "id": 41,
796
+ "event": "call",
797
+ "thread_id": 70143606759380,
798
+ "defined_class": "ApiKey",
799
+ "method_id": "decode",
800
+ "path": "app/models/api_key.rb",
801
+ "lineno": 24,
802
+ "static": true,
803
+ "parameters": [
804
+ {
805
+ "name": "api_key",
806
+ "class": "String",
807
+ "object_id": 70143707623380,
808
+ "value": "YWRtaW46ZTU3YTgzMTAtZTcxOC00OTE0LWIzZmEtYjExZDRhMDY4N2Vl",
809
+ "kind": "req"
810
+ }
811
+ ],
812
+ "receiver": {
813
+ "class": "Class",
814
+ "object_id": 70143710327480,
815
+ "value": "ApiKey"
816
+ }
817
+ },
818
+ {
819
+ "id": 42,
820
+ "event": "return",
821
+ "thread_id": 70143606759380,
822
+ "parent_id": 41,
823
+ "elapsed": 0.000015,
824
+ "return_value": {
825
+ "class": "Array",
826
+ "value": "[\"admin\", \"e57a8310-e718-4914-b3fa-b11d4a0687ee\"]",
827
+ "object_id": 70143707620080
828
+ }
829
+ },
830
+ {
831
+ "id": 43,
832
+ "event": "call",
833
+ "thread_id": 70143606759380,
834
+ "sql_query": {
835
+ "sql": "SELECT * FROM \"api_keys\" WHERE (\"login\" = 'admin')",
836
+ "database_type": "postgres",
837
+ "server_version": 120003
838
+ }
839
+ },
840
+ {
841
+ "id": 44,
842
+ "event": "return",
843
+ "thread_id": 70143606759380,
844
+ "parent_id": 43,
845
+ "elapsed": 0.001356
846
+ },
847
+ {
848
+ "id": 45,
849
+ "event": "return",
850
+ "thread_id": 70143606759380,
851
+ "parent_id": 40,
852
+ "elapsed": 0.005355
853
+ },
854
+ {
855
+ "id": 46,
856
+ "event": "call",
857
+ "thread_id": 70143606759380,
858
+ "defined_class": "JSON::Ext::Generator::State",
859
+ "method_id": "generate",
860
+ "path": "JSON::Ext::Generator::State#generate",
861
+ "static": false,
862
+ "parameters": [
863
+ {
864
+ "name": "arg",
865
+ "class": "Hash",
866
+ "object_id": 70143708130600,
867
+ "value": "{\"error\"=>\"must provide authorization\"}",
868
+ "kind": "req"
869
+ }
870
+ ],
871
+ "receiver": {
872
+ "class": "JSON::Ext::Generator::State",
873
+ "object_id": 70143708130560,
874
+ "value": "#<JSON::Ext::Generator::State:0x00007f97359cda00>"
875
+ }
876
+ },
877
+ {
878
+ "id": 47,
879
+ "event": "return",
880
+ "thread_id": 70143606759380,
881
+ "parent_id": 46,
882
+ "elapsed": 0.00005,
883
+ "return_value": {
884
+ "class": "String",
885
+ "value": "{\"error\":\"must provide authorization\"}",
886
+ "object_id": 70143708128640
887
+ }
888
+ },
889
+ {
890
+ "id": 48,
891
+ "event": "return",
892
+ "thread_id": 70143606759380,
893
+ "parent_id": 39,
894
+ "elapsed": 0.006339,
895
+ "http_server_response": {
896
+ "mime_type": "application/json; charset=utf-8",
897
+ "status": 401
898
+ }
899
+ }
900
+ ]
901
+ }