mirror of
https://github.com/coder/coder.git
synced 2026-06-04 05:28:20 +00:00
86ca61d6ca
Audit and connection log pages were timing out due to expensive COUNT(*) queries over large tables. This commit adds opt-in count capping: requests can return a `count_cap` field signaling that the count was truncated at a threshold, avoiding full table scans that caused page timeouts. Text-cast UUID comparisons in regosql-generated authorization queries also contributed to the slowdown by preventing index usage for connection and audit log queries. These now emit native UUID operators. Frontend changes handle the capped state in usePaginatedQuery and PaginationWidget, optionally displaying a capped count in the pagination UI (e.g. "Showing 2,076 to 2,100 of 2,000+ logs") Related to: https://linear.app/codercom/issue/PLAT-31/connectionaudit-log-performance-issue
105 lines
2.9 KiB
Markdown
Generated
105 lines
2.9 KiB
Markdown
Generated
# Audit
|
|
|
|
## Get audit logs
|
|
|
|
### Code samples
|
|
|
|
```shell
|
|
# Example request using curl
|
|
curl -X GET http://coder-server:8080/api/v2/audit?limit=0 \
|
|
-H 'Accept: application/json' \
|
|
-H 'Coder-Session-Token: API_KEY'
|
|
```
|
|
|
|
`GET /audit`
|
|
|
|
### Parameters
|
|
|
|
| Name | In | Type | Required | Description |
|
|
|----------|-------|---------|----------|--------------|
|
|
| `q` | query | string | false | Search query |
|
|
| `limit` | query | integer | true | Page limit |
|
|
| `offset` | query | integer | false | Page offset |
|
|
|
|
### Example responses
|
|
|
|
> 200 Response
|
|
|
|
```json
|
|
{
|
|
"audit_logs": [
|
|
{
|
|
"action": "create",
|
|
"additional_fields": {},
|
|
"description": "string",
|
|
"diff": {
|
|
"property1": {
|
|
"new": null,
|
|
"old": null,
|
|
"secret": true
|
|
},
|
|
"property2": {
|
|
"new": null,
|
|
"old": null,
|
|
"secret": true
|
|
}
|
|
},
|
|
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
|
|
"ip": "string",
|
|
"is_deleted": true,
|
|
"organization": {
|
|
"display_name": "string",
|
|
"icon": "string",
|
|
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
|
|
"name": "string"
|
|
},
|
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
|
"request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
|
|
"resource_icon": "string",
|
|
"resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
|
|
"resource_link": "string",
|
|
"resource_target": "string",
|
|
"resource_type": "template",
|
|
"status_code": 0,
|
|
"time": "2019-08-24T14:15:22Z",
|
|
"user": {
|
|
"avatar_url": "http://example.com",
|
|
"created_at": "2019-08-24T14:15:22Z",
|
|
"email": "user@example.com",
|
|
"has_ai_seat": true,
|
|
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
|
|
"is_service_account": true,
|
|
"last_seen_at": "2019-08-24T14:15:22Z",
|
|
"login_type": "",
|
|
"name": "string",
|
|
"organization_ids": [
|
|
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
|
|
],
|
|
"roles": [
|
|
{
|
|
"display_name": "string",
|
|
"name": "string",
|
|
"organization_id": "string"
|
|
}
|
|
],
|
|
"status": "active",
|
|
"theme_preference": "string",
|
|
"updated_at": "2019-08-24T14:15:22Z",
|
|
"username": "string"
|
|
},
|
|
"user_agent": "string"
|
|
}
|
|
],
|
|
"count": 0,
|
|
"count_cap": 0
|
|
}
|
|
```
|
|
|
|
### Responses
|
|
|
|
| Status | Meaning | Description | Schema |
|
|
|--------|---------------------------------------------------------|-------------|------------------------------------------------------------------|
|
|
| 200 | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK | [codersdk.AuditLogResponse](schemas.md#codersdkauditlogresponse) |
|
|
|
|
To perform this operation, you must be authenticated. [Learn more](authentication.md).
|