You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.4 KiB
111 lines
3.4 KiB
package dao |
|
|
|
import ( |
|
"database/sql" |
|
"fmt" |
|
"strconv" |
|
|
|
"go-common/app/admin/ep/merlin/model" |
|
|
|
pkgerr "github.com/pkg/errors" |
|
) |
|
|
|
const ( |
|
_machineRightJoinLogSQL = "SELECT m.id,m.name,ml.username,ml.operation_type,ml.operation_result,ml.ctime FROM machines AS m INNER JOIN machine_logs AS ml ON m.id = ml.machine_id" |
|
_machineRightCountSQL = "SELECT count(m.id) FROM machines AS m INNER JOIN machine_logs AS ml ON m.id = ml.machine_id" |
|
) |
|
|
|
// InsertMachineLog insert machine log. |
|
func (d *Dao) InsertMachineLog(machineLog *model.MachineLog) (err error) { |
|
return pkgerr.WithStack(d.db.Create(machineLog).Error) |
|
} |
|
|
|
// FindMachineLogsByMachineID find machine log by machineId. |
|
func (d *Dao) FindMachineLogsByMachineID(machineID int64, pn, ps int) (total int64, machineLogs []*model.AboundMachineLog, err error) { |
|
var ( |
|
qSQL = _machineRightJoinLogSQL |
|
cSQL = _machineRightCountSQL |
|
rows *sql.Rows |
|
) |
|
if machineID > 0 { |
|
qSQL = _machineRightJoinLogSQL + " WHERE machine_id = " + strconv.FormatInt(machineID, 10) |
|
cSQL = _machineRightCountSQL + " WHERE machine_id = " + strconv.FormatInt(machineID, 10) |
|
} |
|
|
|
cDB := d.db.Raw(cSQL) |
|
if err = pkgerr.WithStack(cDB.Count(&total).Error); err != nil { |
|
return |
|
} |
|
gDB := d.db.Raw(qSQL) |
|
if rows, err = gDB.Order("ml.ctime DESC").Offset((pn - 1) * ps).Limit(ps).Rows(); err != nil { |
|
return |
|
} |
|
defer rows.Close() |
|
for rows.Next() { |
|
ml := &model.AboundMachineLog{} |
|
if err = rows.Scan(&ml.MachineID, &ml.Name, &ml.Username, &ml.OperateType, &ml.OperateResult, &ml.OperateTime); err != nil { |
|
return |
|
} |
|
machineLogs = append(machineLogs, ml) |
|
} |
|
return |
|
} |
|
|
|
// FindMachineLogs Find Machine Logs. |
|
func (d *Dao) FindMachineLogs(queryRequest *model.QueryMachineLogRequest) (total int64, machineLogs []*model.AboundMachineLog, err error) { |
|
var ( |
|
qSQL = _machineRightJoinLogSQL |
|
cSQL = _machineRightCountSQL |
|
rows *sql.Rows |
|
) |
|
|
|
if queryRequest.MachineID > 0 || queryRequest.OperateType != "" || queryRequest.OperateUser != "" || queryRequest.MachineName != "" { |
|
var ( |
|
strSQL = "" |
|
logicalWord = _where |
|
) |
|
|
|
if queryRequest.MachineID > 0 { |
|
strSQL = fmt.Sprintf("%s %s ml.machine_id = %s", strSQL, logicalWord, strconv.FormatInt(queryRequest.MachineID, 10)) |
|
logicalWord = _and |
|
} |
|
|
|
if queryRequest.OperateType != "" { |
|
strSQL = fmt.Sprintf("%s %s ml.operation_type like '%s'", strSQL, logicalWord, _wildcards+queryRequest.OperateType+_wildcards) |
|
logicalWord = _and |
|
} |
|
|
|
if queryRequest.MachineName != "" { |
|
strSQL = fmt.Sprintf("%s %s m.name like '%s'", strSQL, logicalWord, _wildcards+queryRequest.MachineName+_wildcards) |
|
logicalWord = _and |
|
} |
|
|
|
if queryRequest.OperateUser != "" { |
|
strSQL = fmt.Sprintf("%s %s ml.username like '%s'", strSQL, logicalWord, _wildcards+queryRequest.OperateUser+_wildcards) |
|
logicalWord = _and |
|
} |
|
|
|
qSQL = _machineRightJoinLogSQL + " " + strSQL |
|
cSQL = _machineRightCountSQL + " " + strSQL |
|
|
|
} |
|
|
|
cDB := d.db.Raw(cSQL) |
|
if err = pkgerr.WithStack(cDB.Count(&total).Error); err != nil { |
|
return |
|
} |
|
gDB := d.db.Raw(qSQL) |
|
if rows, err = gDB.Order("ml.ctime DESC").Offset((queryRequest.PageNum - 1) * queryRequest.PageSize).Limit(queryRequest.PageSize).Rows(); err != nil { |
|
return |
|
} |
|
defer rows.Close() |
|
for rows.Next() { |
|
ml := &model.AboundMachineLog{} |
|
if err = rows.Scan(&ml.MachineID, &ml.Name, &ml.Username, &ml.OperateType, &ml.OperateResult, &ml.OperateTime); err != nil { |
|
return |
|
} |
|
machineLogs = append(machineLogs, ml) |
|
} |
|
|
|
return |
|
}
|
|
|