fix: Logs page pagination (#883)

This commit is contained in:
jamesread 2026-02-19 20:33:24 +00:00
parent 7dcbca31fc
commit ea4cdf9df2
8 changed files with 36 additions and 8 deletions

View File

@ -495,6 +495,13 @@ export declare type GetLogsRequest = Message<"olivetin.api.v1.GetLogsRequest"> &
* @generated from field: string date_filter = 2;
*/
dateFilter: string;
/**
* Number of logs per page (optional; server default used if 0 or unset)
*
* @generated from field: int64 page_size = 3;
*/
pageSize: bigint;
};
/**
@ -1846,3 +1853,4 @@ export declare const OliveTinApiService: GenService<{
output: typeof EntitySchema;
},
}>;

File diff suppressed because one or more lines are too long

View File

@ -78,7 +78,7 @@
</tbody>
</table>
<Pagination :pageSize="pageSize" :total="totalCount" :currentPage="currentPage" @page-change="handlePageChange" class="padding"
<Pagination :pageSize="pageSize" :total="totalCount" :currentPage="currentPage" :page="currentPage" @page-change="handlePageChange" class="padding"
@page-size-change="handlePageSizeChange" itemTitle="execution logs" />
</div>

View File

@ -68,7 +68,7 @@
</tbody>
</table>
<Pagination :pageSize="pageSize" :total="totalCount" :currentPage="currentPage" @page-change="handlePageChange" class = "padding"
<Pagination :pageSize="pageSize" :total="totalCount" :currentPage="currentPage" :page="currentPage" @page-change="handlePageChange" class = "padding"
@page-size-change="handlePageSizeChange" itemTitle="execution logs" />
</div>
@ -150,6 +150,7 @@ async function fetchLogs() {
const args = {
"startOffset": BigInt(startOffset),
"pageSize": BigInt(pageSize.value),
}
// Add date filter if selected
@ -160,7 +161,6 @@ async function fetchLogs() {
const response = await window.client.getLogs(args)
logs.value = response.logs
pageSize.value = Number(response.pageSize) || 0
totalCount.value = Number(response.totalCount) || 0
} catch (err) {
console.error('Failed to fetch logs:', err)

View File

@ -121,6 +121,7 @@ message StartActionByGetAndWaitResponse {
message GetLogsRequest{
int64 start_offset = 1;
string date_filter = 2; // Optional date filter in YYYY-MM-DD format
int64 page_size = 3; // Number of logs per page (optional; server default used if 0 or unset)
};
message LogEntry {

View File

@ -1105,6 +1105,7 @@ type GetLogsRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
StartOffset int64 `protobuf:"varint,1,opt,name=start_offset,json=startOffset,proto3" json:"start_offset,omitempty"`
DateFilter string `protobuf:"bytes,2,opt,name=date_filter,json=dateFilter,proto3" json:"date_filter,omitempty"` // Optional date filter in YYYY-MM-DD format
PageSize int64 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` // Number of logs per page (optional; server default used if 0 or unset)
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -1153,6 +1154,13 @@ func (x *GetLogsRequest) GetDateFilter() string {
return ""
}
func (x *GetLogsRequest) GetPageSize() int64 {
if x != nil {
return x.PageSize
}
return 0
}
type LogEntry struct {
state protoimpl.MessageState `protogen:"open.v1"`
DatetimeStarted string `protobuf:"bytes,1,opt,name=datetime_started,json=datetimeStarted,proto3" json:"datetime_started,omitempty"`
@ -3972,11 +3980,12 @@ const file_olivetin_api_v1_olivetin_proto_rawDesc = "" +
"\x1eStartActionByGetAndWaitRequest\x12\x1b\n" +
"\taction_id\x18\x01 \x01(\tR\bactionId\"Y\n" +
"\x1fStartActionByGetAndWaitResponse\x126\n" +
"\tlog_entry\x18\x01 \x01(\v2\x19.olivetin.api.v1.LogEntryR\blogEntry\"T\n" +
"\tlog_entry\x18\x01 \x01(\v2\x19.olivetin.api.v1.LogEntryR\blogEntry\"q\n" +
"\x0eGetLogsRequest\x12!\n" +
"\fstart_offset\x18\x01 \x01(\x03R\vstartOffset\x12\x1f\n" +
"\vdate_filter\x18\x02 \x01(\tR\n" +
"dateFilter\"\x89\x05\n" +
"dateFilter\x12\x1b\n" +
"\tpage_size\x18\x03 \x01(\x03R\bpageSize\"\x89\x05\n" +
"\bLogEntry\x12)\n" +
"\x10datetime_started\x18\x01 \x01(\tR\x0fdatetimeStarted\x12!\n" +
"\faction_title\x18\x02 \x01(\tR\vactionTitle\x12\x16\n" +

View File

@ -506,7 +506,16 @@ func (api *oliveTinAPI) GetLogs(ctx ctx.Context, req *connect.Request[apiv1.GetL
if req.Msg.DateFilter != "" {
dateFilter = req.Msg.DateFilter
}
logEntries, paging := api.executor.GetLogTrackingIdsACL(api.cfg, user, req.Msg.StartOffset, api.cfg.LogHistoryPageSize, dateFilter)
pageSize := api.cfg.LogHistoryPageSize
if req.Msg.GetPageSize() > 0 {
pageSize = req.Msg.GetPageSize()
if pageSize < 10 {
pageSize = 10
} else if pageSize > 100 {
pageSize = 100
}
}
logEntries, paging := api.executor.GetLogTrackingIdsACL(api.cfg, user, req.Msg.StartOffset, pageSize, dateFilter)
for _, le := range logEntries {
ret.Logs = append(ret.Logs, api.internalLogEntryToPb(le, user))
}

View File

@ -57,7 +57,7 @@ func buildEntityFieldsetContents(contents []*config.DashboardComponent, ent *ent
for _, subitem := range contents {
c := cloneItem(subitem, ent, entityType, rr)
log.Infof("cloneItem: %+v", c)
log.Tracef("cloneItem: %+v", c)
if c != nil {
ret = append(ret, c)