Skip to content

Commit 7bd5e43

Browse files
authored
Merge pull request #1 from stydxm/main
feat: robot data support
2 parents 2cd91c3 + e3a7f66 commit 7bd5e43

File tree

11 files changed

+187
-197
lines changed

11 files changed

+187
-197
lines changed

internal/analyze/schedule.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414

1515
// GetScheduleData 获取赛程数据
1616
func GetScheduleData() ([]byte, error) {
17-
resp, err := http.Get(job.ScheduleUrl)
17+
resp, err := http.Get(job.Params["schedule"].Url)
1818
if err != nil {
1919
return nil, err
2020
}

internal/handler/group_rank_info.go

Lines changed: 0 additions & 51 deletions
This file was deleted.

internal/handler/handler_factory.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package handler
2+
3+
import (
4+
"github.com/kataras/iris/v12"
5+
"github.com/scutrobotlab/rm-schedule/internal/svc"
6+
)
7+
8+
type RouteHandlerParam struct {
9+
Name, CacheControl, OriginalUrl string
10+
Static bool
11+
SeasonMap map[string][]byte
12+
Data []byte
13+
}
14+
15+
func RouteHandlerFactory(param RouteHandlerParam) func(c iris.Context) {
16+
return func(c iris.Context) {
17+
if param.SeasonMap != nil {
18+
season := c.URLParam("season")
19+
if data, ok := param.SeasonMap[season]; ok {
20+
c.Header("Cache-Control", "public, max-age=60")
21+
c.ContentType("application/json")
22+
_, err := c.Write(data)
23+
if err != nil {
24+
_ = c.JSON(iris.Map{"code": -1, "msg": "Failed to get " + param.Name})
25+
}
26+
return
27+
}
28+
}
29+
30+
if param.Static {
31+
c.Header("Cache-Control", "public, max-age=60")
32+
c.ContentType("application/json")
33+
_, err := c.Write(param.Data)
34+
if err != nil {
35+
_ = c.JSON(iris.Map{"code": -1, "msg": "Failed to get " + param.Name})
36+
}
37+
return
38+
}
39+
40+
// 是否存在 Tencent-Acceleration-Domain-Name
41+
if c.GetHeader("Tencent-Acceleration-Domain-Name") != "" {
42+
c.Header("Cache-Control", param.CacheControl)
43+
c.Redirect(param.OriginalUrl, 301)
44+
return
45+
}
46+
47+
if cached, b := svc.Cache.Get(param.Name); b {
48+
c.Header("Cache-Control", param.CacheControl)
49+
c.ContentType("application/json")
50+
_, err := c.Write(cached.([]byte))
51+
if err != nil {
52+
_ = c.JSON(iris.Map{"code": -1, "msg": "Failed to get " + param.Name})
53+
}
54+
return
55+
}
56+
57+
c.Header("Cache-Control", param.CacheControl)
58+
c.StatusCode(500)
59+
_ = c.JSON(iris.Map{"code": -1, "msg": "Failed to get " + param.Name})
60+
}
61+
}

internal/handler/schedule.go

Lines changed: 0 additions & 53 deletions
This file was deleted.

internal/job/group_rank_info.go

Lines changed: 0 additions & 35 deletions
This file was deleted.

internal/job/init.go

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,45 @@ import (
66
"github.com/robfig/cron/v3"
77
)
88

9+
type CronJobParam struct {
10+
Name, Url string
11+
ReplaceRMStatic bool
12+
}
13+
14+
var Params = map[string]CronJobParam{
15+
"group_rank_info": {
16+
Name: "group_rank_info",
17+
Url: "https://pro-robomasters-hz-n5i3.oss-cn-hangzhou.aliyuncs.com/live_json/group_rank_info.json",
18+
ReplaceRMStatic: false,
19+
},
20+
"robot_data": {
21+
Name: "robot_data",
22+
Url: "https://pro-robomasters-hz-n5i3.oss-cn-hangzhou.aliyuncs.com/live_json/robot_data.json",
23+
ReplaceRMStatic: false,
24+
},
25+
"schedule": {
26+
Name: "schedule",
27+
Url: "https://pro-robomasters-hz-n5i3.oss-cn-hangzhou.aliyuncs.com/live_json/schedule.json",
28+
ReplaceRMStatic: true,
29+
},
30+
}
31+
932
func InitCronJob() *cron.Cron {
33+
var jobFuncArray []func()
34+
for _, param := range Params {
35+
jobFuncArray = append(jobFuncArray, CronJobFactory(param))
36+
}
37+
1038
c := cron.New()
1139

12-
_, err := c.AddFunc("@every 5s", UpdateGroupRankInfo)
13-
if err != nil {
14-
log.Fatalf("cron add func failed: %v", err)
15-
}
40+
for _, jobFunc := range jobFuncArray {
41+
_, err := c.AddFunc("@every 5s", jobFunc)
42+
if err != nil {
43+
log.Fatalf("cron add func failed: %v", err)
44+
}
1645

17-
_, err = c.AddFunc("@every 5s", UpdateSchedule)
18-
if err != nil {
19-
log.Fatalf("cron add func failed: %v", err)
46+
jobFunc()
2047
}
2148

22-
UpdateGroupRankInfo()
23-
UpdateSchedule()
24-
2549
return c
2650
}

internal/job/job_factory.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package job
2+
3+
import (
4+
"github.com/patrickmn/go-cache"
5+
"github.com/scutrobotlab/rm-schedule/internal/svc"
6+
"golang.org/x/text/cases"
7+
"golang.org/x/text/language"
8+
"io"
9+
"log"
10+
"net/http"
11+
"strings"
12+
)
13+
14+
func CronJobFactory(param CronJobParam) func() {
15+
return func() {
16+
resp, err := http.Get(param.Url)
17+
if err != nil {
18+
log.Printf("Failed to get %s: %v\n", param.Name, err)
19+
return
20+
}
21+
defer resp.Body.Close()
22+
23+
if resp.StatusCode != http.StatusOK {
24+
log.Printf("Failed to get %s: status code %d\n", param.Name, resp.StatusCode)
25+
return
26+
}
27+
28+
bytes, err := io.ReadAll(resp.Body)
29+
if err != nil {
30+
log.Printf("Failed to read %s: %v\n", param.Name, err)
31+
return
32+
}
33+
34+
if param.ReplaceRMStatic {
35+
bytes = replaceRMStatic(bytes)
36+
}
37+
38+
svc.Cache.Set(param.Name, bytes, cache.DefaultExpiration)
39+
40+
log.Printf("%s updated\n", strings.ReplaceAll(cases.Title(language.English).String(param.Name), "_", " "))
41+
}
42+
}
43+
44+
func replaceRMStatic(data []byte) []byte {
45+
str := string(data)
46+
str = strings.ReplaceAll(str, "https://rm-static.djicdn.com", "/api/static/rm-static_djicdn_com")
47+
str = strings.ReplaceAll(str, "https://terra-cn-oss-cdn-public-pro.oss-cn-hangzhou.aliyuncs.com", "/api/static/terra-cn-oss-cdn-public-pro_oss-cn-hangzhou_aliyuncs_com")
48+
str = strings.ReplaceAll(str, "https://pro-robomasters-hz-n5i3.oss-cn-hangzhou.aliyuncs.com", "/api/static/pro-robomasters-hz-n5i3_oss-cn-hangzhou_aliyuncs_com")
49+
return []byte(str)
50+
}

internal/job/schedule.go

Lines changed: 0 additions & 45 deletions
This file was deleted.

0 commit comments

Comments
 (0)