Skip to content

Commit 98886db

Browse files
committed
add release plan instance code
Signed-off-by: Patrick Zhao <[email protected]>
1 parent fe5bba4 commit 98886db

File tree

4 files changed

+62
-2
lines changed

4 files changed

+62
-2
lines changed

pkg/microservice/aslan/core/common/repository/models/release_plan.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ type ReleasePlan struct {
5151
ExecutingTime int64 `bson:"executing_time" yaml:"executing_time" json:"executing_time"`
5252
SuccessTime int64 `bson:"success_time" yaml:"success_time" json:"success_time"`
5353

54+
InstanceCode string `bson:"instance_code" yaml:"instance_code" json:"instance_code"`
5455
HookSettings *HookSettings `bson:"hook_settings" yaml:"hook_settings" json:"hook_settings"`
5556

5657
WaitForApproveExternalCheckTime int64 `bson:"wait_for_approve_external_check_time" yaml:"wait_for_approve_external_check_time" json:"wait_for_approve_external_check_time"`

pkg/microservice/aslan/core/common/repository/models/workflow_v4.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ type Approval struct {
158158
type NativeApproval struct {
159159
Timeout int `bson:"timeout" yaml:"timeout" json:"timeout"`
160160
ApproveUsers []*User `bson:"approve_users" yaml:"approve_users" json:"approve_users"`
161-
FloatApproveUsers []*User `bson:"-" yaml:"flat_approve_users" json:"flat_approve_users"`
161+
FloatApproveUsers []*User `bson:"-" yaml:"flat_approve_users" json:"flat_approve_users"`
162162
NeededApprovers int `bson:"needed_approvers" yaml:"needed_approvers" json:"needed_approvers"`
163163
RejectOrApprove config.ApprovalStatus `bson:"reject_or_approve" yaml:"-" json:"reject_or_approve"`
164164
// InstanceCode: native approval instance code, save for working after restart aslan

pkg/microservice/aslan/core/common/service/webhooknotify/types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ type ReleasePlanHookBody struct {
156156
UpdatedBy string `json:"updated_by"`
157157
// 更新时间
158158
UpdateTime int64 `json:"update_time"`
159+
// 实例代码
160+
InstanceCode string `json:"instance_code"`
159161

160162
// 发布任务列表
161163
Jobs []*ReleasePlanHookJob `json:"jobs"`

pkg/microservice/aslan/core/release_plan/service/release_plan.go

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package service
1818

1919
import (
2020
"context"
21+
"crypto/sha256"
22+
"encoding/hex"
2123
"encoding/json"
2224
"fmt"
2325
"strconv"
@@ -29,6 +31,7 @@ import (
2931
"github.com/koderover/zadig/v2/pkg/types"
3032
"github.com/pkg/errors"
3133
"github.com/samber/lo"
34+
"go.mongodb.org/mongo-driver/bson"
3235
"go.mongodb.org/mongo-driver/bson/primitive"
3336
"go.mongodb.org/mongo-driver/mongo"
3437

@@ -402,6 +405,14 @@ func UpdateReleasePlan(c *handler.Context, planID string, args *UpdateReleasePla
402405
}
403406
plan.HookSettings = hookSetting.ToHookSettings()
404407

408+
instanceCode, err := generateInstanceCode(plan)
409+
if err != nil {
410+
fmtErr := fmt.Errorf("failed generate instance code, err: %v", err)
411+
log.Error(fmtErr)
412+
return fmtErr
413+
}
414+
plan.InstanceCode = instanceCode
415+
405416
if err = mongodb.NewReleasePlanColl().UpdateByID(ctx, planID, plan); err != nil {
406417
return errors.Wrap(err, "update plan")
407418
}
@@ -883,6 +894,12 @@ func UpdateReleasePlanStatus(c *handler.Context, planID, targetStatus string, is
883894
plan.WaitForExecuteExternalCheckTime = 0
884895
plan.WaitForAllDoneExternalCheckTime = 0
885896
plan.ExternalCheckFailedReason = ""
897+
plan.InstanceCode, err = generateInstanceCode(plan)
898+
if err != nil {
899+
fmtErr := fmt.Errorf("failed generate instance code, err: %v", err)
900+
log.Error(fmtErr)
901+
return fmtErr
902+
}
886903

887904
cancelReleasePlanApproval(c, plan)
888905
case config.ReleasePlanStatusExecuting:
@@ -1297,13 +1314,14 @@ func UpdateReleasePlanHookSetting(c *handler.Context, req *models.ReleasePlanHoo
12971314

12981315
type ReleasePlanCallBackBody struct {
12991316
ReleasePlanID string `json:"release_plan_id"`
1317+
InstanceCode string `json:"instance_code"`
13001318
HookEvent models.ReleasePlanHookEvent `json:"hook_event"`
13011319
Result setting.ReleasePlanCallBackResultType `json:"result"`
13021320
FailedReason string `json:"failed_reason"`
13031321
}
13041322

13051323
func ReleasePlanHookCallback(c *handler.Context, callback *ReleasePlanCallBackBody) error {
1306-
log.Infof("release plan hook callback, id: %s, hook event: %s, result: %s, failed reason: %s", callback.ReleasePlanID, callback.HookEvent, callback.Result, callback.FailedReason)
1324+
log.Infof("release plan hook callback, id: %s, instance code: %s, hook event: %s, result: %s, failed reason: %s", callback.ReleasePlanID, callback.InstanceCode, callback.HookEvent, callback.Result, callback.FailedReason)
13071325

13081326
hookSetting, err := mongodb.NewSystemSettingColl().GetReleasePlanHookSetting()
13091327
if err != nil {
@@ -1339,6 +1357,12 @@ func ReleasePlanHookCallback(c *handler.Context, callback *ReleasePlanCallBackBo
13391357
return fmtErr
13401358
}
13411359

1360+
if releasePlan.InstanceCode != callback.InstanceCode {
1361+
fmtErr := fmt.Errorf("release plan instance code is not correct, name: %s, instance code: %s, expected: %s", releasePlan.Name, callback.InstanceCode, releasePlan.InstanceCode)
1362+
log.Error(fmtErr)
1363+
return fmtErr
1364+
}
1365+
13421366
if !hookEventStatusMap[releasePlan.Status] {
13431367
fmtErr := fmt.Errorf("release plan's status is not correct, status: %s", releasePlan.Status)
13441368
log.Error(fmtErr)
@@ -1516,6 +1540,7 @@ func convertReleasePlanToHookBody(plan *models.ReleasePlan, hookEvent commonmode
15161540
Name: plan.Name,
15171541
Manager: plan.Manager,
15181542
ManagerID: plan.ManagerID,
1543+
InstanceCode: plan.InstanceCode,
15191544
StartTime: plan.StartTime,
15201545
EndTime: plan.EndTime,
15211546
ScheduleExecuteTime: plan.ScheduleExecuteTime,
@@ -2061,6 +2086,38 @@ func waitForExternalCheck(plan *models.ReleasePlan, systemHookSetting *commonmod
20612086
return &nextStatus, shouldWait
20622087
}
20632088

2089+
func generateInstanceCode(plan *models.ReleasePlan) (string, error) {
2090+
newPlan := new(models.ReleasePlan)
2091+
err := util.DeepCopy(newPlan, plan)
2092+
if err != nil {
2093+
err := fmt.Errorf("failed deep copy plan, err: %v", err)
2094+
log.Error(err)
2095+
return "", err
2096+
}
2097+
newPlan.UpdateTime = 0
2098+
newPlan.UpdatedBy = ""
2099+
newPlan.InstanceCode = ""
2100+
newPlan.Status = ""
2101+
newPlan.PlanningTime = 0
2102+
newPlan.ApprovalTime = 0
2103+
newPlan.ExecutingTime = 0
2104+
newPlan.SuccessTime = 0
2105+
newPlan.WaitForApproveExternalCheckTime = 0
2106+
newPlan.WaitForExecuteExternalCheckTime = 0
2107+
newPlan.WaitForAllDoneExternalCheckTime = 0
2108+
newPlan.ExternalCheckFailedReason = ""
2109+
2110+
newPlanBytes, err := bson.Marshal(newPlan)
2111+
if err != nil {
2112+
err := fmt.Errorf("failed marshal plan, err: %v", err)
2113+
log.Error(err)
2114+
return "", err
2115+
}
2116+
2117+
sum := sha256.Sum256([]byte(newPlanBytes))
2118+
return hex.EncodeToString(sum[:])[:16], nil
2119+
}
2120+
20642121
func cancelReleasePlanApproval(ctx *handler.Context, plan *models.ReleasePlan) error {
20652122
if plan == nil {
20662123
log.Warnf("cancelReleasePlanApproval: release plan is nil")

0 commit comments

Comments
 (0)