Feat: Add search and levels to logs API (#2835)

* feat: add log levels and search query to log query

* feat: pass levels, search through

* feat: add log level to query

* feat: wire up levels and search query
This commit is contained in:
matt
2026-01-21 14:27:47 -05:00
committed by GitHub
parent c792113f06
commit b093cc4878
8 changed files with 242 additions and 137 deletions
@@ -477,6 +477,20 @@ listLogs:
schema:
type: string
format: date-time
- description: A full-text search query to filter for
in: query
name: search
required: false
schema:
type: string
- description: The log level(s) to include
in: query
name: levels
required: false
schema:
type: array
items:
$ref: "../../../components/schemas/_index.yaml#/V1LogLineLevel"
responses:
"200":
content:
+20 -6
View File
@@ -28,9 +28,11 @@ func (t *TasksService) V1LogLineList(ctx echo.Context, request gen.V1LogLineList
)
var (
limit = int64(50)
since *time.Time
until *time.Time
limit = int64(50)
since *time.Time
until *time.Time
levels []string
search *string
)
if request.Params.Limit != nil {
@@ -45,12 +47,24 @@ func (t *TasksService) V1LogLineList(ctx echo.Context, request gen.V1LogLineList
until = request.Params.Until
}
if request.Params.Levels != nil {
for _, level := range *request.Params.Levels {
levels = append(levels, string(level))
}
}
if request.Params.Search != nil {
search = request.Params.Search
}
limitInt := int(limit)
opts := &v1.ListLogsOpts{
Limit: &limitInt,
Since: since,
Until: until,
Limit: &limitInt,
Since: since,
Until: until,
Search: search,
Levels: levels,
}
logLines, err := t.config.V1.Logs().ListLogLines(reqCtx, tenantId, task.ExternalID.String(), opts)
+148 -127
View File
@@ -2403,6 +2403,12 @@ type V1LogLineListParams struct {
// Until The end time to get logs for
Until *time.Time `form:"until,omitempty" json:"until,omitempty"`
// Search A full-text search query to filter for
Search *string `form:"search,omitempty" json:"search,omitempty"`
// Levels The log level(s) to include
Levels *[]V1LogLineLevel `form:"levels,omitempty" json:"levels,omitempty"`
}
// V1TaskEventListParams defines parameters for V1TaskEventList.
@@ -3797,6 +3803,20 @@ func (w *ServerInterfaceWrapper) V1LogLineList(ctx echo.Context) error {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter until: %s", err))
}
// ------------- Optional query parameter "search" -------------
err = runtime.BindQueryParameter("form", true, false, "search", ctx.QueryParams(), &params.Search)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter search: %s", err))
}
// ------------- Optional query parameter "levels" -------------
err = runtime.BindQueryParameter("form", true, false, "levels", ctx.QueryParams(), &params.Levels)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter levels: %s", err))
}
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.V1LogLineList(ctx, task, params)
return err
@@ -16236,133 +16256,134 @@ var swaggerSpec = []string{
"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",
"ZJ5kXB4ksd950+k8f33+/wEAAP//8rXzVA0wAwA=",
}
// GetSwagger returns the content of the embedded swagger specification file
@@ -103,6 +103,7 @@ import {
V1EventList,
V1Filter,
V1FilterList,
V1LogLineLevel,
V1LogLineList,
V1ReplayTaskRequest,
V1ReplayedTasks,
@@ -236,6 +237,10 @@ export class Api<
* @format date-time
*/
until?: string;
/** A full-text search query to filter for */
search?: string;
/** The log level(s) to include */
levels?: V1LogLineLevel[];
},
params: RequestParams = {},
) =>
+38
View File
@@ -2400,6 +2400,12 @@ type V1LogLineListParams struct {
// Until The end time to get logs for
Until *time.Time `form:"until,omitempty" json:"until,omitempty"`
// Search A full-text search query to filter for
Search *string `form:"search,omitempty" json:"search,omitempty"`
// Levels The log level(s) to include
Levels *[]V1LogLineLevel `form:"levels,omitempty" json:"levels,omitempty"`
}
// V1TaskEventListParams defines parameters for V1TaskEventList.
@@ -6335,6 +6341,38 @@ func NewV1LogLineListRequest(server string, task openapi_types.UUID, params *V1L
}
if params.Search != nil {
if queryFrag, err := runtime.StyleParamWithLocation("form", true, "search", runtime.ParamLocationQuery, *params.Search); err != nil {
return nil, err
} else if parsed, err := url.ParseQuery(queryFrag); err != nil {
return nil, err
} else {
for k, v := range parsed {
for _, v2 := range v {
queryValues.Add(k, v2)
}
}
}
}
if params.Levels != nil {
if queryFrag, err := runtime.StyleParamWithLocation("form", true, "levels", runtime.ParamLocationQuery, *params.Levels); err != nil {
return nil, err
} else if parsed, err := url.ParseQuery(queryFrag); err != nil {
return nil, err
} else {
for k, v := range parsed {
for _, v2 := range v {
queryValues.Add(k, v2)
}
}
}
}
queryURL.RawQuery = queryValues.Encode()
}
+9
View File
@@ -115,6 +115,15 @@ func (r *logLineRepositoryImpl) ListLogLines(ctx context.Context, tenantId, task
}
}
if opts.Levels != nil {
levels := make([]sqlcv1.V1LogLineLevel, len(opts.Levels))
for i, level := range opts.Levels {
levels[i] = sqlcv1.V1LogLineLevel(level)
}
queryParams.Levels = levels
}
logLines, err := r.queries.ListLogLines(ctx, r.pool, queryParams)
if err != nil {
return nil, err
+2 -1
View File
@@ -26,9 +26,10 @@ WHERE
l.tenant_id = @tenantId::UUID
AND l.task_id = @taskId::BIGINT
AND l.task_inserted_at = @taskInsertedAt::TIMESTAMPTZ
AND (sqlc.narg('search')::TEXT IS NULL OR l.message iLIKE concat('%', sqlc.narg('search')::TEXT, '%'))
AND (sqlc.narg('search')::TEXT IS NULL OR l.message ILIKE CONCAT('%', sqlc.narg('search')::TEXT, '%'))
AND (sqlc.narg('since')::TIMESTAMPTZ IS NULL OR l.created_at > sqlc.narg('since')::TIMESTAMPTZ)
AND (sqlc.narg('until')::TIMESTAMPTZ IS NULL OR l.created_at < sqlc.narg('until')::TIMESTAMPTZ)
AND (sqlc.narg('levels')::v1_log_line_level[] IS NULL OR l.level = ANY(sqlc.narg('levels')::v1_log_line_level[]))
ORDER BY
l.created_at ASC
LIMIT COALESCE(sqlc.narg('limit'), 1000)
+6 -3
View File
@@ -30,13 +30,14 @@ WHERE
l.tenant_id = $1::UUID
AND l.task_id = $2::BIGINT
AND l.task_inserted_at = $3::TIMESTAMPTZ
AND ($4::TEXT IS NULL OR l.message iLIKE concat('%', $4::TEXT, '%'))
AND ($4::TEXT IS NULL OR l.message ILIKE CONCAT('%', $4::TEXT, '%'))
AND ($5::TIMESTAMPTZ IS NULL OR l.created_at > $5::TIMESTAMPTZ)
AND ($6::TIMESTAMPTZ IS NULL OR l.created_at < $6::TIMESTAMPTZ)
AND ($7::v1_log_line_level[] IS NULL OR l.level = ANY($7::v1_log_line_level[]))
ORDER BY
l.created_at ASC
LIMIT COALESCE($8, 1000)
OFFSET COALESCE($7, 0)
LIMIT COALESCE($9, 1000)
OFFSET COALESCE($8, 0)
`
type ListLogLinesParams struct {
@@ -46,6 +47,7 @@ type ListLogLinesParams struct {
Search pgtype.Text `json:"search"`
Since pgtype.Timestamptz `json:"since"`
Until pgtype.Timestamptz `json:"until"`
Levels []V1LogLineLevel `json:"levels"`
Offset interface{} `json:"offset"`
Limit interface{} `json:"limit"`
}
@@ -58,6 +60,7 @@ func (q *Queries) ListLogLines(ctx context.Context, db DBTX, arg ListLogLinesPar
arg.Search,
arg.Since,
arg.Until,
arg.Levels,
arg.Offset,
arg.Limit,
)