111 lines
2.3 KiB
Go
111 lines
2.3 KiB
Go
package rest
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/eyebluecn/tank/code/core"
|
|
"github.com/eyebluecn/tank/code/tool/util"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
//@Service
|
|
type FootprintService struct {
|
|
BaseBean
|
|
footprintDao *FootprintDao
|
|
userDao *UserDao
|
|
}
|
|
|
|
func (this *FootprintService) Init() {
|
|
this.BaseBean.Init()
|
|
|
|
b := core.CONTEXT.GetBean(this.footprintDao)
|
|
if b, ok := b.(*FootprintDao); ok {
|
|
this.footprintDao = b
|
|
}
|
|
|
|
b = core.CONTEXT.GetBean(this.userDao)
|
|
if b, ok := b.(*UserDao); ok {
|
|
this.userDao = b
|
|
}
|
|
|
|
}
|
|
|
|
func (this *FootprintService) Detail(uuid string) *Footprint {
|
|
|
|
footprint := this.footprintDao.CheckByUuid(uuid)
|
|
|
|
return footprint
|
|
}
|
|
|
|
//log a request.
|
|
func (this *FootprintService) Trace(request *http.Request, duration time.Duration, success bool) {
|
|
|
|
params := make(map[string][]string)
|
|
|
|
//POST params
|
|
values := request.PostForm
|
|
for key, val := range values {
|
|
params[key] = val
|
|
}
|
|
//GET params
|
|
values1 := request.URL.Query()
|
|
for key, val := range values1 {
|
|
params[key] = val
|
|
}
|
|
|
|
//ignore password.
|
|
for key, _ := range params {
|
|
if key == core.PASSWORD_KEY || key == "password" || key == "adminPassword" {
|
|
params[key] = []string{"******"}
|
|
}
|
|
}
|
|
|
|
paramsString := "{}"
|
|
paramsData, err := json.Marshal(params)
|
|
if err == nil {
|
|
paramsString = string(paramsData)
|
|
}
|
|
|
|
footprint := &Footprint{
|
|
Ip: util.GetIpAddress(request),
|
|
Host: request.Host,
|
|
Uri: request.URL.Path,
|
|
Params: paramsString,
|
|
Cost: int64(duration / time.Millisecond),
|
|
Success: success,
|
|
}
|
|
|
|
//if db not config just print content.
|
|
if core.CONFIG.Installed() {
|
|
user := this.findUser(request)
|
|
userUuid := ""
|
|
if user != nil {
|
|
userUuid = user.Uuid
|
|
}
|
|
footprint.UserUuid = userUuid
|
|
footprint = this.footprintDao.Create(footprint)
|
|
}
|
|
|
|
this.logger.Info("Ip:%s Cost:%d Uri:%s Params:%s", footprint.Ip, int64(duration/time.Millisecond), footprint.Uri, paramsString)
|
|
|
|
}
|
|
|
|
func (this *FootprintService) Bootstrap() {
|
|
|
|
this.logger.Info("Immediately delete Footprint data of 8 days ago.")
|
|
|
|
go core.RunWithRecovery(this.CleanOldData)
|
|
}
|
|
|
|
func (this *FootprintService) CleanOldData() {
|
|
|
|
day8Ago := time.Now()
|
|
day8Ago = day8Ago.AddDate(0, 0, -8)
|
|
day8Ago = util.FirstSecondOfDay(day8Ago)
|
|
|
|
this.logger.Info("Delete footprint data before %s", util.ConvertTimeToDateTimeString(day8Ago))
|
|
|
|
this.footprintDao.DeleteByCreateTimeBefore(day8Ago)
|
|
}
|