Fix ticket page 500 from unbounded audit timeline (#112)
Lint / PHP (phpcs PSR-12) (push) Successful in 21s
Lint / JS (eslint) (push) Successful in 8s
Lint / PHP requirements (version + extensions) (push) Successful in 20s
Lint / Notify on failure (push) Skipped
Security / PHP Security (semgrep) (push) Successful in 1m22s
Lint / Deploy (push) Successful in 4s
Lint / PHP (phpcs PSR-12) (push) Successful in 21s
Lint / JS (eslint) (push) Successful in 8s
Lint / PHP requirements (version + extensions) (push) Successful in 20s
Lint / Notify on failure (push) Skipped
Security / PHP Security (semgrep) (push) Successful in 1m22s
Lint / Deploy (push) Successful in 4s
A ticket updated by hwmonDaemon had ~52k audit rows; getTicketTimeline() loaded all of them and exhausted PHP's 128MB memory limit, so the ticket page returned 500. Not related to the MCP server. - getTicketTimeline() takes a limit (newest first). The ticket page shows the latest 500 events with a note when older ones are omitted; the JSON export caps at 5000. - create_ticket_api.php: the description is refreshed on every run, and that alone wrote a reason-only audit row every few minutes per open ticket. Audit only real title/priority changes. - create_ticket_api.php: after creating a brand-new ticket the dedup retry loop fell through into a second iteration on a closed connection, appending a 500 error body after the success response. Exit instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MGDKHiU5RJdo3dqQUDow3X
This commit is contained in:
@@ -54,8 +54,14 @@ class TicketController
|
||||
$totalComments = $this->commentModel->getCommentCount((int)$id);
|
||||
$comments = $this->commentModel->getCommentsByTicketId($id, true, $commentPageSize, 0);
|
||||
|
||||
// Get timeline for this ticket
|
||||
$timeline = $this->auditLogModel->getTicketTimeline($id);
|
||||
// Get the newest timeline events for this ticket. One extra row is
|
||||
// fetched only to tell the view that older events were left out.
|
||||
$timelineLimit = 500;
|
||||
$timeline = $this->auditLogModel->getTicketTimeline($id, $timelineLimit + 1);
|
||||
$timelineTruncated = count($timeline) > $timelineLimit;
|
||||
if ($timelineTruncated) {
|
||||
array_pop($timeline);
|
||||
}
|
||||
|
||||
// Get all users for assignment dropdown
|
||||
$allUsers = $this->userModel->getAllUsers();
|
||||
|
||||
Reference in New Issue
Block a user