From 9648482ed6ed7f8e732aba92c3a64fc951d41fd3 Mon Sep 17 00:00:00 2001 From: fuxiaohei Date: Tue, 11 Oct 2022 20:42:35 +0800 Subject: [PATCH] feat(bots): move runner status update function to context --- routers/api/bots/runner/runner.go | 18 ------------------ routers/api/bots/runner/unary.go | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/routers/api/bots/runner/runner.go b/routers/api/bots/runner/runner.go index 9564398205..9af96bcd78 100644 --- a/routers/api/bots/runner/runner.go +++ b/routers/api/bots/runner/runner.go @@ -18,7 +18,6 @@ import ( "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/timeutil" runnerv1 "gitea.com/gitea/proto-go/runner/v1" "gitea.com/gitea/proto-go/runner/v1/runnerv1connect" @@ -129,8 +128,6 @@ func (s *Service) Register( return res, nil } -const runnerOnlineTimeDeltaSecs = 30 - // FetchTask assigns a task to the runner func (s *Service) FetchTask( ctx context.Context, @@ -138,21 +135,6 @@ func (s *Service) FetchTask( ) (*connect.Response[runnerv1.FetchTaskResponse], error) { runner := GetRunner(ctx) - // update runner online status - if runner.Status == runnerv1.RunnerStatus_RUNNER_STATUS_OFFLINE { - runner.LastOnline = timeutil.TimeStampNow() - runner.Status = runnerv1.RunnerStatus_RUNNER_STATUS_ACTIVE - if err := bots_model.UpdateRunner(ctx, runner, "last_online", "status"); err != nil { - log.Error("can't update runner status: %v", err) - } - } - if timeutil.TimeStampNow()-runner.LastOnline >= runnerOnlineTimeDeltaSecs { - runner.LastOnline = timeutil.TimeStampNow() - if err := bots_model.UpdateRunner(ctx, runner, "last_online"); err != nil { - log.Error("can't update runner last_online: %v", err) - } - } - var task *runnerv1.Task if t, ok, err := s.pickTask(ctx, runner); err != nil { return nil, status.Errorf(codes.Internal, "pick task: %v", err) diff --git a/routers/api/bots/runner/unary.go b/routers/api/bots/runner/unary.go index df6324e144..f644a90fe1 100644 --- a/routers/api/bots/runner/unary.go +++ b/routers/api/bots/runner/unary.go @@ -9,12 +9,17 @@ import ( "strings" bots_model "code.gitea.io/gitea/models/bots" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/timeutil" + runnerv1 "gitea.com/gitea/proto-go/runner/v1" "github.com/bufbuild/connect-go" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) +const runnerOnlineTimeDeltaSecs = 30 + var WithRunner = connect.WithInterceptors(connect.UnaryInterceptorFunc(func(unaryFunc connect.UnaryFunc) connect.UnaryFunc { return func(ctx context.Context, request connect.AnyRequest) (connect.AnyResponse, error) { if methodName(request) == "Register" { @@ -28,6 +33,22 @@ var WithRunner = connect.WithInterceptors(connect.UnaryInterceptorFunc(func(unar } return nil, status.Error(codes.Internal, err.Error()) } + + // update runner online status + if runner.Status == runnerv1.RunnerStatus_RUNNER_STATUS_OFFLINE { + runner.LastOnline = timeutil.TimeStampNow() + runner.Status = runnerv1.RunnerStatus_RUNNER_STATUS_ACTIVE + if err := bots_model.UpdateRunner(ctx, runner, "last_online", "status"); err != nil { + log.Error("can't update runner status: %v", err) + } + } + if timeutil.TimeStampNow()-runner.LastOnline >= runnerOnlineTimeDeltaSecs { + runner.LastOnline = timeutil.TimeStampNow() + if err := bots_model.UpdateRunner(ctx, runner, "last_online"); err != nil { + log.Error("can't update runner last_online: %v", err) + } + } + ctx = context.WithValue(ctx, runnerCtxKey{}, runner) return unaryFunc(ctx, request) }