Samples API

Samples index

Endpoints [GET]:

EndpointDescription
/api/[app_id]/samples.jsonThis returns ALL sample types
/api/[app_id]/samples/performance.jsonThis returns performance samples
/api/[app_id]/samples/errors.jsonThis returns error samples

Parameters:

ParamTypeDescription
action_idstringExample: BlogPostsController-hash-show
exceptionstringExample: NoMethodError
sincetimestamp/integerAll times are UTC
beforetimestamp/integerAll times are UTC
limitintegerThe amount of entries returned (defaults to 10)
count_onlyboolean(true/false) To only return a count

Escape actions by replacing:

  • # with -hash-
  • / with -slash-
  • . with -dot-

So BlogPostsController#show becomes: BlogPostsController-hash-show

An example of a full request would be:

Shell
https://appsignal.com/api/5114f7e38c5ce90000000011/samples.json?token=HseUe&action_id=AccountsController-hash-index&exception=ActionView::Template::Error&since=1374843246

Result

This endpoint returns the following JSON (a slow sample and an error sample):

JSON
{ "count": 2, "log_entries": [ { "id": "51f29e7b183d700800150358_SlowController#show_1476962400", "action": "SlowController#show", "path": "/slow-request", "duration": 3182.545407, "status": 200, "time": 1476962400, "is_exception": false, "exception": { "name": null } }, { "id": "57f653fa16b7e24cb0dc9e2b_ErrorController#trigger_1475761080", "action": "ErrorController#trigger", "path": "/error-request", "duration": null, "status": null, "time": 1475761080, "is_exception": true, "exception": { "name": "ActionView::Template::Error" } } ] }

Samples show

Endpoint [GET]: /api/[app_id]/samples/[id].json

Parameters:

ParamTypeDescription
idstringSanitized sample id (example: 51f29e7b183d700800150358_SlowController-hash-show_1476962400)

Result

This is a SLOW log entry:

JSON
{ "id": "51f29e7b183d700800150358_SlowController#show_1476962400", "action": "slow#request", "db_runtime": 500.0, "duration": 300.0, "environment": {}, "hostname": "app1", "is_exception": null, "kind": "http_request", "params": {}, "path": "/blog", "request_format": "html", "request_method": "GET", "session_data": {}, "status": "200", "view_runtime": 500.0, "time": 1002700800, "end": 978339601, "allocation_count": 110101, "events": [ { "action": "query", "duration": 250.0, "group": "mongoid", "name": "query.mongoid", "payload": { "query": "this is a mongoid query" }, "time": 0, "end": 0 "digest": 00000, "allocation_count": 1010101 } ], "exception": null }

This is an ERROR log entry:

JSON
{ "id": "57f653fa16b7e24cb0dc9e2b_ErrorController#trigger_1475761080", "action": "Error#trigger", "db_runtime": 500.0, "duration": null, "environment": { "HTTP_USER_AGENT": "Mozilla/5.0 (Macintosh" }, "hostname": "app1", "is_exception": true, "kind": "http_request", "params": { "id": 1, "get": "something" }, "path": "/blog", "request_format": "html", "request_method": "GET", "session_data": { "current_user_id": 1 }, "status": "200", "view_runtime": 500.0, "time": 1002700800, "end": 978339601, "events": [], "tags": { "user": "john doe", "id": 1 }, "exception": { "message": "The method was not found", "name": "NoMethodError", "backtrace": ["Backtrace line 1", "Backtrace line 2", "Backtrace line 3"] } }

Note: If you need more advanced querying, such as searching samples by tag, you can do that using our GraphQL API. Check out the GraphQL API docs for query examples and more details.