44 "fmt"
55 "net/http"
66 "net/url"
7- "sort"
87 "strconv"
98 "strings"
109
@@ -38,9 +37,9 @@ func SlotsFiltered(w http.ResponseWriter, r *http.Request) {
3837 if urlArgs .Has ("s" ) {
3938 pageIdx , _ = strconv .ParseUint (urlArgs .Get ("s" ), 10 , 64 )
4039 }
41- var displayColumns string = ""
40+ var displayColumns uint64 = 0
4241 if urlArgs .Has ("d" ) {
43- displayColumns = urlArgs . Get ( "d" )
42+ displayColumns = utils . DecodeUint64BitfieldFromQuery ( r . URL . RawQuery , "d" )
4443 }
4544
4645 var graffiti string
@@ -136,7 +135,7 @@ func SlotsFiltered(w http.ResponseWriter, r *http.Request) {
136135 }
137136}
138137
139- func getFilteredSlotsPageData (pageIdx uint64 , pageSize uint64 , graffiti string , invertgraffiti bool , extradata string , invertextradata bool , proposer string , pname string , invertproposer bool , withOrphaned uint8 , withMissing uint8 , minSyncAgg string , maxSyncAgg string , minExecTime string , maxExecTime string , minTxCount string , maxTxCount string , minBlobCount string , maxBlobCount string , forkIds string , displayColumns string ) (* models.SlotsFilteredPageData , error ) {
138+ func getFilteredSlotsPageData (pageIdx uint64 , pageSize uint64 , graffiti string , invertgraffiti bool , extradata string , invertextradata bool , proposer string , pname string , invertproposer bool , withOrphaned uint8 , withMissing uint8 , minSyncAgg string , maxSyncAgg string , minExecTime string , maxExecTime string , minTxCount string , maxTxCount string , minBlobCount string , maxBlobCount string , forkIds string , displayColumns uint64 ) (* models.SlotsFilteredPageData , error ) {
140139 pageData := & models.SlotsFilteredPageData {}
141140 pageCacheKey := fmt .Sprintf ("slots_filtered:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v:%v" , pageIdx , pageSize , graffiti , invertgraffiti , extradata , invertextradata , proposer , pname , invertproposer , withOrphaned , withMissing , minSyncAgg , maxSyncAgg , minExecTime , maxExecTime , minTxCount , maxTxCount , minBlobCount , maxBlobCount , forkIds , displayColumns )
142141 pageRes , pageErr := services .GlobalFrontendCache .ProcessCachedPage (pageCacheKey , true , pageData , func (_ * services.FrontendCacheProcessingPage ) interface {} {
@@ -152,7 +151,7 @@ func getFilteredSlotsPageData(pageIdx uint64, pageSize uint64, graffiti string,
152151 return pageData , pageErr
153152}
154153
155- func buildFilteredSlotsPageData (pageIdx uint64 , pageSize uint64 , graffiti string , invertgraffiti bool , extradata string , invertextradata bool , proposer string , pname string , invertproposer bool , withOrphaned uint8 , withMissing uint8 , minSyncAgg string , maxSyncAgg string , minExecTime string , maxExecTime string , minTxCount string , maxTxCount string , minBlobCount string , maxBlobCount string , forkIds string , displayColumns string ) * models.SlotsFilteredPageData {
154+ func buildFilteredSlotsPageData (pageIdx uint64 , pageSize uint64 , graffiti string , invertgraffiti bool , extradata string , invertextradata bool , proposer string , pname string , invertproposer bool , withOrphaned uint8 , withMissing uint8 , minSyncAgg string , maxSyncAgg string , minExecTime string , maxExecTime string , minTxCount string , maxTxCount string , minBlobCount string , maxBlobCount string , forkIds string , displayColumns uint64 ) * models.SlotsFilteredPageData {
156155 chainState := services .GlobalBeaconService .GetChainState ()
157156 filterArgs := url.Values {}
158157 if graffiti != "" {
@@ -217,17 +216,14 @@ func buildFilteredSlotsPageData(pageIdx uint64, pageSize uint64, graffiti string
217216 }
218217
219218 displayMap := map [uint64 ]bool {}
220- if displayColumns != "" {
221- for _ , col := range strings .Split (displayColumns , " " ) {
222- colNum , err := strconv .ParseUint (col , 10 , 64 )
223- if err != nil {
224- continue
219+ if displayColumns != 0 {
220+ for i := 0 ; i < 64 ; i ++ {
221+ if displayColumns & (1 << i ) != 0 {
222+ displayMap [uint64 (i + 1 )] = true
225223 }
226- displayMap [colNum ] = true
227224 }
228225 }
229226 if len (displayMap ) == 0 {
230-
231227 displayMap = map [uint64 ]bool {
232228 1 : true ,
233229 2 : true ,
@@ -249,20 +245,14 @@ func buildFilteredSlotsPageData(pageIdx uint64, pageSize uint64, graffiti string
249245 18 : hasSnooperClients , // Enable exec time if snooper clients exist
250246 }
251247 } else {
252- displayList := make ([]uint64 , len (displayMap ))
253- displayIdx := 0
248+ displayMask := uint64 (0 )
254249 for col := range displayMap {
255- displayList [displayIdx ] = col
256- displayIdx ++
257- }
258- sort .Slice (displayList , func (a , b int ) bool {
259- return displayList [a ] < displayList [b ]
260- })
261- displayStr := make ([]string , len (displayMap ))
262- for idx , col := range displayList {
263- displayStr [idx ] = fmt .Sprintf ("%v" , col )
250+ if col == 0 || col > 64 {
251+ continue
252+ }
253+ displayMask |= 1 << (col - 1 )
264254 }
265- filterArgs .Add ("d" , strings . Join ( displayStr , " " ))
255+ filterArgs .Add ("d" , fmt . Sprintf ( "%v" , displayMask ))
266256 }
267257
268258 pageData := & models.SlotsFilteredPageData {
0 commit comments