feat: complete 2.0.7.12 platform overhaul
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package reference
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
//go:embed data/*.json
|
||||
var bundled embed.FS
|
||||
|
||||
var ErrNotFound = errors.New("reference data not found")
|
||||
|
||||
type Service struct {
|
||||
overrideRoot string
|
||||
}
|
||||
|
||||
func NewService(overrideRoot string) *Service {
|
||||
return &Service{overrideRoot: strings.TrimSpace(overrideRoot)}
|
||||
}
|
||||
|
||||
func (s *Service) Read(kind string) (map[string]any, error) {
|
||||
name, ok := fileName(kind)
|
||||
if !ok {
|
||||
return nil, ErrNotFound
|
||||
}
|
||||
var data []byte
|
||||
var err error
|
||||
if s.overrideRoot != "" {
|
||||
data, err = os.ReadFile(filepath.Join(s.overrideRoot, "reference-data", name))
|
||||
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if len(data) == 0 {
|
||||
data, err = bundled.ReadFile("data/" + name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
var payload map[string]any
|
||||
if err := json.Unmarshal(data, &payload); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if payload["schemaVersion"] == nil || payload["items"] == nil {
|
||||
return nil, errors.New("reference data schema is invalid")
|
||||
}
|
||||
return payload, nil
|
||||
}
|
||||
|
||||
func (s *Service) Descriptors() map[string]any {
|
||||
return map[string]any{
|
||||
"cpu": map[string]any{
|
||||
"url": "/api/client/reference-data/cpu",
|
||||
"bundledFallback": true,
|
||||
},
|
||||
"gpu": map[string]any{
|
||||
"url": "/api/client/reference-data/gpu",
|
||||
"bundledFallback": true,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func fileName(kind string) (string, bool) {
|
||||
switch strings.ToLower(strings.TrimSpace(kind)) {
|
||||
case "cpu", "cpu-ranking":
|
||||
return "cpu-ranking.json", true
|
||||
case "gpu", "gpu-ranking":
|
||||
return "gpu-ranking.json", true
|
||||
default:
|
||||
return "", false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user