mirror of
https://github.com/fleetdm/fleet
synced 2026-05-20 15:38:39 +00:00
<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #38756 - Changed to NOT mark many client errors as exceptions - Instead, added client_error and server_error metrics that can be used to alert on unusual error rates # Checklist for submitter - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added separate metrics for distinguishing between client and server errors, enhancing observability and monitoring capabilities. * **Bug Fixes** * Client request errors no longer incorrectly appear in error tracking as exceptions; improved accuracy of error reporting to external services. * Adjusted logging levels for authentication and enrollment operations to provide clearer diagnostics. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package mysql
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
platform_http "github.com/fleetdm/fleet/v4/server/platform/http"
|
|
)
|
|
|
|
type NotFoundError struct {
|
|
ID uint
|
|
Name string
|
|
Message string
|
|
ResourceType string
|
|
}
|
|
|
|
// Compile-time interface check.
|
|
var _ platform_http.NotFoundError = &NotFoundError{}
|
|
|
|
func NotFound(kind string) *NotFoundError {
|
|
return &NotFoundError{
|
|
ResourceType: kind,
|
|
}
|
|
}
|
|
|
|
func (e *NotFoundError) Error() string {
|
|
if e.ID != 0 {
|
|
return fmt.Sprintf("%s %d was not found in the datastore", e.ResourceType, e.ID)
|
|
}
|
|
if e.Name != "" {
|
|
return fmt.Sprintf("%s %s was not found in the datastore", e.ResourceType, e.Name)
|
|
}
|
|
if e.Message != "" {
|
|
return fmt.Sprintf("%s %s was not found in the datastore", e.ResourceType, e.Message)
|
|
}
|
|
return fmt.Sprintf("%s was not found in the datastore", e.ResourceType)
|
|
}
|
|
|
|
func (e *NotFoundError) WithID(id uint) error {
|
|
e.ID = id
|
|
return e
|
|
}
|
|
|
|
func (e *NotFoundError) WithName(name string) error {
|
|
e.Name = name
|
|
return e
|
|
}
|
|
|
|
func (e *NotFoundError) WithMessage(msg string) error {
|
|
e.Message = msg
|
|
return e
|
|
}
|
|
|
|
func (e *NotFoundError) IsNotFound() bool {
|
|
return true
|
|
}
|
|
|
|
// IsClientError implements ErrWithIsClientError.
|
|
func (e *NotFoundError) IsClientError() bool {
|
|
return true
|
|
}
|
|
|
|
// Is helps so that errors.Is(err, sql.ErrNoRows) returns true for an
|
|
// error of type *NotFoundError, without having to wrap sql.ErrNoRows
|
|
// explicitly.
|
|
func (e *NotFoundError) Is(other error) bool {
|
|
return other == sql.ErrNoRows
|
|
}
|