This commit is contained in:
40
.github/workflows/build.yml
vendored
Normal file
40
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
name: Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main, master]
|
||||||
|
create:
|
||||||
|
tag:
|
||||||
|
- 'v*'
|
||||||
|
pull_request:
|
||||||
|
branches: [main, master]
|
||||||
|
|
||||||
|
env:
|
||||||
|
GO_VERSION: '1.25'
|
||||||
|
APP_NAME: schedule_converter
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
cd schedule_converter
|
||||||
|
go mod download
|
||||||
|
|
||||||
|
- name: Build Linux AMD64
|
||||||
|
run: |
|
||||||
|
cd schedule_converter
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o ${{ env.APP_NAME }}-linux-amd64 .
|
||||||
|
|
||||||
|
- name: Build Windows AMD64
|
||||||
|
run: |
|
||||||
|
cd schedule_converter
|
||||||
|
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o ${{ env.APP_NAME }}-windows-amd64.exe .
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ env.APP_NAME }}
|
||||||
|
path: |
|
||||||
|
schedule_converter/${{ env.APP_NAME }}-linux-amd64
|
||||||
|
schedule_converter/${{ env.APP_NAME }}-windows-amd64.exe
|
||||||
23
main.go
23
main.go
@@ -68,25 +68,38 @@ func runGRPCClient(serverAddr string) {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
reconnectInterval := 5 * time.Second
|
reconnectInterval := 5 * time.Second
|
||||||
|
const maxReconnectInterval = 60 * time.Second
|
||||||
|
retryCount := 0
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
slog.Info("客户端已停止")
|
slog.Info("客户端已停止", "total_retries", retryCount)
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
retryCount++
|
||||||
|
currentInterval := reconnectInterval
|
||||||
|
if retryCount > 1 {
|
||||||
|
currentInterval = min(reconnectInterval*time.Duration(retryCount-1), maxReconnectInterval)
|
||||||
|
}
|
||||||
|
|
||||||
|
slog.Info("正在连接服务器", "attempt", retryCount, "server", serverAddr)
|
||||||
|
|
||||||
c := grpcClient.NewClient(serverAddr, runnerID, version)
|
c := grpcClient.NewClient(serverAddr, runnerID, version)
|
||||||
handler := grpcClient.NewTaskHandler()
|
handler := grpcClient.NewTaskHandler()
|
||||||
c.SetHandler(handler)
|
c.SetHandler(handler)
|
||||||
|
|
||||||
if err := c.Connect(ctx); err != nil {
|
if err := c.Connect(ctx); err != nil {
|
||||||
slog.Warn("连接失败,稍后重试", "error", err, "retry_after", reconnectInterval)
|
slog.Warn("连接失败", "error", err, "attempt", retryCount, "retry_after", currentInterval)
|
||||||
time.Sleep(reconnectInterval)
|
time.Sleep(currentInterval)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
slog.Info("连接成功", "attempt", retryCount)
|
||||||
|
retryCount = 0
|
||||||
|
|
||||||
heartbeatCtx, heartbeatCancel := context.WithCancel(ctx)
|
heartbeatCtx, heartbeatCancel := context.WithCancel(ctx)
|
||||||
go c.HeartbeatLoop(heartbeatCtx, 30*time.Second)
|
go c.HeartbeatLoop(heartbeatCtx, 30*time.Second)
|
||||||
|
|
||||||
@@ -99,9 +112,9 @@ func runGRPCClient(serverAddr string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Warn("连接断开,稍后重连", "error", err, "retry_after", reconnectInterval)
|
slog.Warn("连接断开", "error", err, "retry_after", reconnectInterval)
|
||||||
} else {
|
} else {
|
||||||
slog.Info("连接已关闭,稍后重连", "retry_after", reconnectInterval)
|
slog.Info("连接已关闭")
|
||||||
}
|
}
|
||||||
time.Sleep(reconnectInterval)
|
time.Sleep(reconnectInterval)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user