/
audit.go
152 lines (128 loc) · 4.69 KB
/
audit.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// Copyright (c) 2021 Terminus, Inc.
//
// This program is free software: you can use, redistribute, and/or modify
// it under the terms of the GNU Affero General Public License, version 3
// or later ("AGPL"), as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package dao
import (
"encoding/json"
"time"
"github.com/erda-project/erda/apistructs"
"github.com/erda-project/erda/modules/core-services/model"
)
// CreateAudit 创建审计
func (client *DBClient) CreateAudit(audit *model.Audit) error {
return client.Create(audit).Error
}
// BatchCreateAudit 批量传教审计
func (client *DBClient) BatchCreateAudit(audits []model.Audit) error {
return client.BulkInsert(audits)
}
// GetAuditsByParam 通过参数查询成员
func (client *DBClient) GetAuditsByParam(param *apistructs.AuditsListRequest) (int, []model.Audit, error) {
var audits []model.Audit
var total int
db := client.Table("dice_audit").Where("deleted = 0").Where("start_time >= ? AND start_time <= ?", param.StartAt, param.EndAt)
if !param.Sys {
db = db.Where("org_id = ?", param.OrgID)
} else {
db = db.Where("scope_type = 'sys'")
}
if param.UserID != nil {
db = db.Where("user_id in ( ? )", param.UserID)
}
if param.FDPProjectID != "" {
db = db.Where("fdp_project_id = ?", param.FDPProjectID)
} else {
db = db.Where("fdp_project_id = ? or fdp_project_id is NULL", "")
}
if err := db.Order("start_time DESC").Offset((param.PageNo - 1) * param.PageSize).Limit(param.PageSize).
Find(&audits).Offset(0).Limit(-1).Count(&total).Error; err != nil {
return 0, nil, err
}
return total, audits, nil
}
// GetAuditSettings 从 dice_org 获取审计事件清理周期
func (client *DBClient) GetAuditSettings() ([]model.AuditSettings, error) {
var auditSettings []model.AuditSettings
if err := client.Table("dice_org").Select("id, config").Find(&auditSettings).Error; err != nil {
return nil, err
}
return auditSettings, nil
}
// DeleteAuditsByTimeAndOrg 软删除某个企业的审计事件
func (client *DBClient) DeleteAuditsByTimeAndOrg(startTime time.Time, orgIDs []uint64) error {
// var audit model.Audit
return client.Table("dice_audit").Where("org_id in ( ? )", orgIDs).Where("start_time <= ?", startTime).
Where("scope_type != 'sys'").Update("deleted", "1").Error
}
// DeleteAuditsByTimeAndSys 软删除系统级别的审计事件
func (client *DBClient) DeleteAuditsByTimeAndSys(startTime time.Time) error {
// var audit model.Audit
return client.Table("dice_audit").Where("start_time <= ?", startTime).Where("scope_type = 'sys'").
Update("deleted", "1").Error
}
// ArchiveAuditsByTimeAndOrg 归档某个企业的审计事件
func (client *DBClient) ArchiveAuditsByTimeAndOrg() error {
// 在审计历史表创建
if err := client.Table("dice_audit_history").
Exec("INSERT INTO `dice_audit_history` SELECT * FROM `dice_audit` Where deleted = '1'").Error; err != nil {
return err
}
// 删除审计表数据
if err := client.Table("dice_audit").Where("deleted = '1'").Delete(model.Audit{}).Error; err != nil {
return err
}
return nil
}
// InitOrgAuditInterval 初始化企业的审计事件清理周期
func (client *DBClient) InitOrgAuditInterval(orgIDs []uint64) error {
var orgs []model.Org
if err := client.Table("dice_org").Where("id in ( ? )", orgIDs).Find(&orgs).Error; err != nil {
return err
}
for _, v := range orgs {
config := &v.Config
config.AuditInterval = -7
cfg, err := json.Marshal(config)
if err != nil {
return err
}
if err := client.Table("dice_org").Where("id = ?", v.ID).Update("config", string(cfg)).Error; err != nil {
return err
}
}
return nil
}
// UpdateAuditCleanCron 修改企业事件清理周期
func (client *DBClient) UpdateAuditCleanCron(orgID, interval int64) error {
var org model.Org
if err := client.Table("dice_org").Where("id = ( ? )", orgID).Find(&org).Error; err != nil {
return err
}
config := &org.Config
config.AuditInterval = interval
cfg, err := json.Marshal(config)
if err != nil {
return err
}
if err := client.Table("dice_org").Where("id = ?", org.ID).Update("config", string(cfg)).Error; err != nil {
return err
}
return nil
}
// GetAuditCleanCron 获取企业事件清理周期
func (client *DBClient) GetAuditCleanCron(orgID int64) (*model.Org, error) {
var org model.Org
if err := client.Table("dice_org").Where("id = ( ? )", orgID).Find(&org).Error; err != nil {
return nil, err
}
return &org, nil
}