mirror of
https://github.com/AmanTahiliani/box-box.git
synced 2026-08-07 11:54:59 -04:00
89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
package query
|
|
|
|
import "strings"
|
|
|
|
const (
|
|
DatasetStatusAvailable = "available"
|
|
DatasetStatusMissing = "missing"
|
|
|
|
DataSourceLocal = "local"
|
|
DataSourceNone = "none"
|
|
DataSourceOpenF1 = "openf1"
|
|
|
|
ResponseSourceLocal = "local"
|
|
ResponseSourceNone = "none"
|
|
ResponseSourcePartial = "partial"
|
|
ResponseSourceCancelled = "cancelled"
|
|
)
|
|
|
|
// DatasetInfo describes availability of a single dataset.
|
|
type DatasetInfo struct {
|
|
Status string `json:"status"`
|
|
Source string `json:"source"`
|
|
Count int `json:"count,omitempty"`
|
|
}
|
|
|
|
func skippedNA() DatasetInfo {
|
|
return DatasetInfo{
|
|
Status: "skipped",
|
|
Source: "na",
|
|
Count: 0,
|
|
}
|
|
}
|
|
|
|
func isGridExpected(sessionType, sessionName string) bool {
|
|
t := strings.ToLower(sessionType)
|
|
n := strings.ToLower(sessionName)
|
|
// Grid is only expected on main Sprint or Race sessions, not qualifying, practice, or shootout
|
|
return (strings.Contains(t, "race") || strings.Contains(n, "race") ||
|
|
strings.Contains(t, "sprint") || strings.Contains(n, "sprint")) &&
|
|
!strings.Contains(t, "qualifying") && !strings.Contains(n, "qualifying") &&
|
|
!strings.Contains(t, "shootout") && !strings.Contains(n, "shootout") &&
|
|
!strings.Contains(t, "practice") && !strings.Contains(n, "practice")
|
|
}
|
|
|
|
func availableLocal(count int) DatasetInfo {
|
|
return DatasetInfo{
|
|
Status: DatasetStatusAvailable,
|
|
Source: DataSourceLocal,
|
|
Count: count,
|
|
}
|
|
}
|
|
|
|
func missingDataset() DatasetInfo {
|
|
return DatasetInfo{
|
|
Status: DatasetStatusMissing,
|
|
Source: DataSourceNone,
|
|
Count: 0,
|
|
}
|
|
}
|
|
|
|
func responseSource(datasets map[string]DatasetInfo) string {
|
|
if len(datasets) == 0 {
|
|
return ResponseSourceNone
|
|
}
|
|
|
|
hasLocal := false
|
|
allMissing := true
|
|
for _, info := range datasets {
|
|
if info.Status == DatasetStatusAvailable && info.Source == DataSourceLocal {
|
|
hasLocal = true
|
|
allMissing = false
|
|
} else if info.Status == DatasetStatusAvailable {
|
|
allMissing = false
|
|
}
|
|
}
|
|
if allMissing {
|
|
return ResponseSourceNone
|
|
}
|
|
if hasLocal {
|
|
for _, info := range datasets {
|
|
if info.Status == DatasetStatusMissing {
|
|
return ResponseSourcePartial
|
|
}
|
|
}
|
|
return ResponseSourceLocal
|
|
}
|
|
return ResponseSourceNone
|
|
}
|