diff --git a/cmd/huashijie_work_go/huashijie_work_go.go b/cmd/huashijie_work_go/huashijie_work_go.go index 3aa1c45..23710a4 100644 --- a/cmd/huashijie_work_go/huashijie_work_go.go +++ b/cmd/huashijie_work_go/huashijie_work_go.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "os/signal" + "runtime/debug" "sync" "time" @@ -49,15 +50,38 @@ func init() { Logger = log.New(os.Stdout, "["+project_id+"] ", log.Ldate|log.Ltime|log.Lmsgprefix) } +var custom_delay_lock = sync.Mutex{} + +func panicDelyRecoverExit() { + if r := recover(); r != nil { + Logger.Println("Panic:", r) + Logger.Println("debug.Stack():", string(debug.Stack())) + Logger.Println("Sleep 60s before exit...") + time.Sleep(60 * time.Second) + os.Exit(1) + } +} + // ClaimTask 并把任务放入 task_chan func claimWorker(i int, tracker *savewebtracker.Tracker) { Logger.Println("[START] ClaimWorker", i) defer Logger.Println("[STOP] ClaimWorker", i, " exited...") defer WaitClaimWorker.Done() + defer panicDelyRecoverExit() for { if Interrupted { return } + if os.Getenv("CUSTOM_DELAY") != "" { + custom_delay_lock.Lock() + // xxxms + custom_delay, _ := time.ParseDuration(os.Getenv("CUSTOM_DELAY")) + Logger.Println("Custom delay:", custom_delay, "...") + time.Sleep(custom_delay) + custom_delay_lock.Unlock() + + WITH_DELAY = false + } task := tracker.ClaimTask(WITH_DELAY) if task == nil { notask_sleep := max( @@ -77,6 +101,7 @@ func ProcesserWorker(i int, tracker *savewebtracker.Tracker) { Logger.Println("[START] ProcesserWorker", i) defer Logger.Println("[STOP] ProcesserWorker", i, " exited...") defer WaitProcesserWorker.Done() + defer panicDelyRecoverExit() for task := range tasks_chan { Logger.Println("Processing task", task.Id) @@ -173,7 +198,7 @@ func ShowStatus(t *savewebtracker.Tracker) { } func main() { - tracker := savewebtracker.GetTracker(project_id, "0.4", savewebtracker.Archivist()) + tracker := savewebtracker.GetTracker(project_id, "0.5", savewebtracker.Archivist()) tracker.PING_client = GetRetryableHttpClient(10*time.Second, DEBUG) tracker.HTTP_client = GetRetryableHttpClient(10*time.Second, DEBUG) tracker.SelectBestTracker().StartSelectTrackerBackground().StartFetchProjectBackground() @@ -181,6 +206,11 @@ func main() { go InterruptHandler() go ShowStatus(tracker) + time.Sleep(3 * time.Second) + Logger.Println("force sleep 10s before start...") + time.Sleep(7 * time.Second) + Logger.Println("start...") + huashijie_api.EnsureConnection(*tracker.HTTP_client) Logger.Println("-- Start --") diff --git a/pkg/huashijie_api.go b/pkg/huashijie_api.go index ad88823..c0ffe08 100644 --- a/pkg/huashijie_api.go +++ b/pkg/huashijie_api.go @@ -35,7 +35,7 @@ func EnsureConnection(client http.Client) { if err != nil { panic(err) } - req.Header.Add("Referer", "https://app.huashijie.art/") + // req.Header.Add("Referer", "https://app.huashijie.art/") req.Header.Add("User-Agent", "Dalvik/2.1.0 (Linux; U; Android 9; MI 8 SE MIUI/V12.0.2.0.PEBCNXM)") resp, err := client.Do(req) @@ -55,7 +55,7 @@ func EnsureConnection(client http.Client) { } // 125277547 - body, r_status := GetWorkDetailResponse(client, "125277547") + body, r_status := GetWorkDetailResponse(client, "129107778") if r_status != 200 { Logger.Println("HTTP status code:", r_status, "body:", string(body)) @@ -69,6 +69,11 @@ func EnsureConnection(client http.Client) { panic("failed to parse JSON: " + string(body)) } + if !strings.Contains(string(body), "要你管啦离人家远远") { + Logger.Println("JSON:", string(body)) + Logger.Panicln("assertion failed: body not contains '要你管啦离人家远远'") + } + // check if 'status' in r_json if status, ok := r_json["status"]; ok { switch status := status.(type) { @@ -127,9 +132,9 @@ func GetWorkDetailResponse(client http.Client, work_id string) ([]byte, int) { p += fmt.Sprintf("&os_version=%d", os_version) if os.Getenv("HSJ_ENDPOINT") == "pandapaint" { - p += "&version_code=168" + p += "&version_code=170" } else { - p += "&version_code=241" + p += "&version_code=247" } p += "&device_brand=xiaomi"