mirror of
https://github.com/grafana/grafana.git
synced 2025-07-31 10:32:42 +08:00
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package legacy
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type continueToken struct {
|
|
orgId int64
|
|
id int64 // the internal id (sort by!)
|
|
folder string // from the query
|
|
}
|
|
|
|
func readContinueToken(next string) (continueToken, error) {
|
|
var err error
|
|
token := continueToken{}
|
|
if next == "" {
|
|
return token, nil
|
|
}
|
|
parts := strings.Split(next, "/")
|
|
if len(parts) < 3 {
|
|
return token, fmt.Errorf("invalid continue token (too few parts)")
|
|
}
|
|
sub := strings.Split(parts[0], ":")
|
|
if sub[0] != "org" {
|
|
return token, fmt.Errorf("expected org in first slug")
|
|
}
|
|
token.orgId, err = strconv.ParseInt(sub[1], 10, 64)
|
|
if err != nil {
|
|
return token, fmt.Errorf("error parsing orgid")
|
|
}
|
|
|
|
sub = strings.Split(parts[1], ":")
|
|
if sub[0] != "start" {
|
|
return token, fmt.Errorf("expected internal ID in second slug")
|
|
}
|
|
token.id, err = strconv.ParseInt(sub[1], 10, 64)
|
|
if err != nil {
|
|
return token, fmt.Errorf("error parsing updated")
|
|
}
|
|
|
|
sub = strings.Split(parts[2], ":")
|
|
if sub[0] != "folder" {
|
|
return token, fmt.Errorf("expected folder UID in third slug")
|
|
}
|
|
token.folder = sub[1]
|
|
|
|
// // Check if the folder filter is the same from the previous query
|
|
// if q.Requirements.Folder == nil {
|
|
// if token.folder != "" {
|
|
// return token, fmt.Errorf("invalid token, the folder must match previous query")
|
|
// }
|
|
// } else if token.folder != *q.Requirements.Folder {
|
|
// return token, fmt.Errorf("invalid token, the folder must match previous query")
|
|
// }
|
|
|
|
return token, err
|
|
}
|
|
|
|
func (r *continueToken) String() string {
|
|
return fmt.Sprintf("org:%d/start:%d/folder:%s",
|
|
r.orgId, r.id, r.folder)
|
|
}
|