-
Notifications
You must be signed in to change notification settings - Fork 465
/
PipelineStrategyHistoryRepository.go
115 lines (104 loc) · 5.1 KB
/
PipelineStrategyHistoryRepository.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package repository
import (
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
"github.com/devtron-labs/devtron/pkg/sql"
"github.com/go-pg/pg"
"go.uber.org/zap"
"time"
)
type PipelineStrategyHistoryRepository interface {
CreateHistory(model *PipelineStrategyHistory) (*PipelineStrategyHistory, error)
CreateHistoryWithTxn(model *PipelineStrategyHistory, tx *pg.Tx) (*PipelineStrategyHistory, error)
GetHistoryForDeployedStrategyById(id, pipelineId int) (*PipelineStrategyHistory, error)
GetDeploymentDetailsForDeployedStrategyHistory(pipelineId int) ([]*PipelineStrategyHistory, error)
GetHistoryByPipelineIdAndWfrId(pipelineId, wfrId int) (*PipelineStrategyHistory, error)
GetDeployedHistoryList(pipelineId, baseConfigId int) ([]*PipelineStrategyHistory, error)
}
type PipelineStrategyHistoryRepositoryImpl struct {
dbConnection *pg.DB
logger *zap.SugaredLogger
}
func NewPipelineStrategyHistoryRepositoryImpl(logger *zap.SugaredLogger, dbConnection *pg.DB) *PipelineStrategyHistoryRepositoryImpl {
return &PipelineStrategyHistoryRepositoryImpl{dbConnection: dbConnection, logger: logger}
}
type PipelineStrategyHistory struct {
TableName struct{} `sql:"pipeline_strategy_history" pg:",discard_unknown_columns"`
Id int `sql:"id,pk"`
PipelineId int `sql:"pipeline_id, notnull"`
Strategy pipelineConfig.DeploymentTemplate `sql:"strategy,notnull"`
Config string `sql:"config"`
Default bool `sql:"default,notnull"`
Deployed bool `sql:"deployed"`
DeployedOn time.Time `sql:"deployed_on"`
DeployedBy int32 `sql:"deployed_by"`
PipelineTriggerType pipelineConfig.TriggerType `sql:"pipeline_trigger_type"`
sql.AuditLog
//getting below data from cd_workflow_runner and users join
DeploymentStatus string `sql:"-"`
DeployedByEmailId string `sql:"-"`
}
func (impl PipelineStrategyHistoryRepositoryImpl) CreateHistory(model *PipelineStrategyHistory) (*PipelineStrategyHistory, error) {
err := impl.dbConnection.Insert(model)
if err != nil {
impl.logger.Errorw("err in creating strategy history entry", "err", err)
return model, err
}
return model, nil
}
func (impl PipelineStrategyHistoryRepositoryImpl) CreateHistoryWithTxn(model *PipelineStrategyHistory, tx *pg.Tx) (*PipelineStrategyHistory, error) {
err := tx.Insert(model)
if err != nil {
impl.logger.Errorw("err in creating strategy history entry", "err", err)
return model, err
}
return model, nil
}
func (impl PipelineStrategyHistoryRepositoryImpl) GetHistoryForDeployedStrategyById(id, pipelineId int) (*PipelineStrategyHistory, error) {
var history PipelineStrategyHistory
err := impl.dbConnection.Model(&history).Where("id = ?", id).
Where("pipeline_id = ?", pipelineId).
Where("deployed = ?", true).Select()
if err != nil {
impl.logger.Errorw("error in getting strategy history", "err", err)
return &history, err
}
return &history, nil
}
func (impl PipelineStrategyHistoryRepositoryImpl) GetDeploymentDetailsForDeployedStrategyHistory(pipelineId int) ([]*PipelineStrategyHistory, error) {
var histories []*PipelineStrategyHistory
err := impl.dbConnection.Model(&histories).Where("pipeline_id = ?", pipelineId).
Where("deployed = ?", true).Select()
if err != nil {
impl.logger.Errorw("error in getting strategy history", "err", err)
return histories, err
}
return histories, nil
}
func (impl PipelineStrategyHistoryRepositoryImpl) GetHistoryByPipelineIdAndWfrId(pipelineId, wfrId int) (*PipelineStrategyHistory, error) {
var history PipelineStrategyHistory
err := impl.dbConnection.Model(&history).Join("INNER JOIN cd_workflow_runner cwr ON cwr.started_on = pipeline_strategy_history.deployed_on").
Where("pipeline_strategy_history.pipeline_id = ?", pipelineId).
Where("pipeline_strategy_history.deployed = ?", true).
Where("cwr.id = ?", wfrId).
Select()
if err != nil {
impl.logger.Errorw("error in getting pipeline strategy history by pipelineId & wfrId", "err", err, "pipelineId", pipelineId, "wfrId", wfrId)
return &history, err
}
return &history, nil
}
func (impl PipelineStrategyHistoryRepositoryImpl) GetDeployedHistoryList(pipelineId, baseConfigId int) ([]*PipelineStrategyHistory, error) {
var histories []*PipelineStrategyHistory
query := "SELECT psh.id, psh.deployed_on, psh.deployed_by, cwr.status as deployment_status, users.email_id as deployed_by_email_id" +
" FROM pipeline_strategy_history psh" +
" INNER JOIN cd_workflow_runner cwr ON cwr.started_on = psh.deployed_on" +
" INNER JOIN users ON users.id = psh.deployed_by" +
" WHERE psh.pipeline_id = ? AND psh.deployed = true AND psh.id <= ?" +
" ORDER BY psh.id DESC;"
_, err := impl.dbConnection.Query(&histories, query, pipelineId, baseConfigId)
if err != nil {
impl.logger.Errorw("error in getting pipeline strategy history list by pipelineId", "err", err, "pipelineId", pipelineId)
return histories, err
}
return histories, nil
}