harbor/dao/accesslog.go

142 lines
4.2 KiB
Go
Raw Normal View History

2016-02-01 12:59:10 +01:00
/*
Copyright (c) 2016 VMware, Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
2016-02-26 11:54:14 +01:00
2016-02-01 12:59:10 +01:00
package dao
import (
"strings"
"github.com/vmware/harbor/models"
2016-04-21 18:28:59 +02:00
"github.com/vmware/harbor/utils/log"
2016-02-01 12:59:10 +01:00
"github.com/astaxie/beego/orm"
)
// AddAccessLog persists the access logs
2016-02-01 12:59:10 +01:00
func AddAccessLog(accessLog models.AccessLog) error {
o := orm.NewOrm()
p, err := o.Raw(`insert into access_log
2016-04-21 18:28:59 +02:00
(user_id, project_id, repo_name, repo_tag, guid, operation, op_time)
values (?, ?, ?, ?, ?, ?, now())`).Prepare()
2016-02-01 12:59:10 +01:00
if err != nil {
return err
}
defer p.Close()
2016-04-21 18:28:59 +02:00
_, err = p.Exec(accessLog.UserID, accessLog.ProjectID, accessLog.RepoName, accessLog.RepoTag, accessLog.GUID, accessLog.Operation)
2016-02-01 12:59:10 +01:00
return err
}
//GetAccessLogs gets access logs according to different conditions
2016-02-01 12:59:10 +01:00
func GetAccessLogs(accessLog models.AccessLog) ([]models.AccessLog, error) {
o := orm.NewOrm()
2016-04-21 18:28:59 +02:00
sql := `select a.log_id, u.username, a.repo_name, a.repo_tag, a.operation, a.op_time
2016-02-01 12:59:10 +01:00
from access_log a left join user u on a.user_id = u.user_id
where a.project_id = ? `
queryParam := make([]interface{}, 1)
2016-02-26 03:15:01 +01:00
queryParam = append(queryParam, accessLog.ProjectID)
2016-02-01 12:59:10 +01:00
2016-02-26 03:15:01 +01:00
if accessLog.UserID != 0 {
2016-02-01 12:59:10 +01:00
sql += ` and a.user_id = ? `
2016-02-26 03:15:01 +01:00
queryParam = append(queryParam, accessLog.UserID)
2016-02-01 12:59:10 +01:00
}
if accessLog.Operation != "" {
sql += ` and a.operation = ? `
queryParam = append(queryParam, accessLog.Operation)
}
if accessLog.Username != "" {
sql += ` and u.username like ? `
queryParam = append(queryParam, accessLog.Username)
}
2016-05-03 10:54:01 +02:00
if accessLog.RepoName != "" {
sql += ` and a.repo_name = ? `
queryParam = append(queryParam, accessLog.RepoName)
}
if accessLog.RepoTag != "" {
sql += ` and a.repo_tag = ? `
queryParam = append(queryParam, accessLog.RepoTag)
}
2016-02-01 12:59:10 +01:00
if accessLog.Keywords != "" {
sql += ` and a.operation in ( `
keywordList := strings.Split(accessLog.Keywords, "/")
num := len(keywordList)
for i := 0; i < num; i++ {
if keywordList[i] != "" {
if i == num-1 {
sql += `?)`
} else {
sql += `?,`
}
queryParam = append(queryParam, keywordList[i])
}
}
}
if accessLog.BeginTimestamp > 0 {
sql += ` and a.op_time >= ? `
queryParam = append(queryParam, accessLog.BeginTime)
2016-02-01 12:59:10 +01:00
}
if accessLog.EndTimestamp > 0 {
sql += ` and a.op_time <= ? `
queryParam = append(queryParam, accessLog.EndTime)
2016-02-01 12:59:10 +01:00
}
sql += ` order by a.op_time desc `
var accessLogList []models.AccessLog
_, err := o.Raw(sql, queryParam).QueryRows(&accessLogList)
if err != nil {
return nil, err
}
return accessLogList, nil
}
// AccessLog ...
2016-04-21 18:28:59 +02:00
func AccessLog(username, projectName, repoName, repoTag, action string) error {
2016-02-01 12:59:10 +01:00
o := orm.NewOrm()
2016-04-21 18:28:59 +02:00
sql := "insert into access_log (user_id, project_id, repo_name, repo_tag, operation, op_time) " +
2016-02-01 12:59:10 +01:00
"select (select user_id as user_id from user where username=?), " +
2016-04-21 18:28:59 +02:00
"(select project_id as project_id from project where name=?), ?, ?, ?, now() "
_, err := o.Raw(sql, username, projectName, repoName, repoTag, action).Exec()
2016-02-01 12:59:10 +01:00
2016-04-21 18:28:59 +02:00
if err != nil {
log.Errorf("error in AccessLog: %v ", err)
}
2016-02-01 12:59:10 +01:00
return err
}
//GetRecentLogs returns recent logs according to parameters
2016-05-20 11:03:50 +02:00
func GetRecentLogs(lines int, startTime, endTime string) ([]models.AccessLog, error) {
var recentLogList []models.AccessLog
queryParam := make([]interface{}, 1)
2016-05-20 11:03:50 +02:00
queryParam = append(queryParam, startTime)
queryParam = append(queryParam, endTime)
qb, _ := orm.NewQueryBuilder("mysql")
qb.Select("log_id",
"user_id", "project_id", "repo_name", "repo_tag", "GUID", "operation", "op_time").
From("access_log").
Where("op_time BETWEEN ? AND ? ").
OrderBy("op_time").Desc().
Limit(lines)
sql := qb.String()
o := orm.NewOrm()
_, err := o.Raw(sql, queryParam).QueryRows(&recentLogList)
if err != nil {
return nil, err
}
return recentLogList, nil
}