87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
package httpsrv
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"git.leolab.info/lib/errs"
|
|
"git.leolab.info/lib/file"
|
|
"gorm.io/datatypes"
|
|
)
|
|
|
|
//Структура записи лога запросов
|
|
// 0.1.1
|
|
type ReqRec struct {
|
|
SSID string
|
|
Addr string
|
|
XAddr string
|
|
UserAgent string
|
|
ReqUrl string
|
|
ReqVars datatypes.JSONMap //map[string]string
|
|
ReqData datatypes.JSONMap //map[string]interface{}
|
|
TimeStart time.Time
|
|
TimeFinish time.Time
|
|
Duration time.Duration
|
|
Err datatypes.JSONMap
|
|
s *Server
|
|
}
|
|
|
|
//Преобразовать в JSON
|
|
// 0.1.1
|
|
func (rl *ReqRec) MarshalJSON() ([]byte, error) {
|
|
jm := map[string]interface{}{
|
|
"SSID": rl.SSID,
|
|
"Addr": rl.Addr,
|
|
"XAddr": rl.XAddr,
|
|
"UserAgent": rl.UserAgent,
|
|
"ReqUrl": rl.ReqUrl,
|
|
"ReqVars": rl.ReqVars,
|
|
"ReqData": rl.ReqData,
|
|
"TimeStart": rl.TimeStart,
|
|
"TimeFinish": rl.TimeFinish,
|
|
"Duration": rl.Duration,
|
|
"Err": rl.Err,
|
|
}
|
|
jb, e := json.MarshalIndent(jm, "", "\t")
|
|
if e != nil {
|
|
errs.RaiseError(ErrJSONError, e.Error())
|
|
return nil, e
|
|
}
|
|
return jb, nil
|
|
}
|
|
|
|
//Преобразовать в строку
|
|
// 0.1.1
|
|
func (rl *ReqRec) toString() string {
|
|
return rl.TimeStart.Format("02-01-06 03:04:05.000") + " [" + rl.Duration.String() + "] " + rl.SSID + " " + rl.ReqUrl
|
|
}
|
|
|
|
//Начать запись лога
|
|
// 0.1.1
|
|
func rlStart(srv *Server) *ReqRec {
|
|
return &ReqRec{
|
|
TimeStart: time.Now(),
|
|
s: srv,
|
|
ReqVars: map[string]interface{}{},
|
|
ReqData: map[string]interface{}{},
|
|
}
|
|
}
|
|
|
|
//Завершить запись лога
|
|
// 0.1.1
|
|
func (rl *ReqRec) Finish(err *errs.Err) {
|
|
if err != nil {
|
|
rl.Err = err.Map()
|
|
} else {
|
|
rl.Err = nil
|
|
}
|
|
rl.TimeFinish = time.Now()
|
|
rl.Duration = rl.TimeFinish.Sub(rl.TimeStart)
|
|
file.Append(file.GetBinDir()+"/"+file.GetBinName()+".reqlog", []byte(rl.toString()+"\n"))
|
|
if rl.s.ds != nil {
|
|
if e := rl.s.ds.Model(&ReqRec{}).Create(rl).Error; e != nil {
|
|
errs.RaiseError(errs.ErrDSError, e.Error())
|
|
}
|
|
}
|
|
}
|