|
@@ -1,222 +0,0 @@
|
|
|
-/**
|
|
|
-日志过滤器
|
|
|
-记录网站所有访问和请求
|
|
|
-2015-7-2
|
|
|
-任政
|
|
|
-**/
|
|
|
-package filter
|
|
|
-
|
|
|
-import (
|
|
|
- "encoding/json"
|
|
|
- "jfw/public"
|
|
|
- "net"
|
|
|
- "net/http"
|
|
|
- "net/url"
|
|
|
- "regexp"
|
|
|
- "strings"
|
|
|
- "sync"
|
|
|
- "time"
|
|
|
- uc "ucbsutil"
|
|
|
-
|
|
|
- "github.com/go-xweb/httpsession"
|
|
|
- "github.com/go-xweb/xweb"
|
|
|
- "github.com/gocql/gocql"
|
|
|
-)
|
|
|
-
|
|
|
-//日志过滤器
|
|
|
-type logfilter struct {
|
|
|
- App *xweb.App
|
|
|
- SessionName string
|
|
|
-}
|
|
|
-
|
|
|
-//"/swordfish"
|
|
|
-//"/list"
|
|
|
-//"/article"
|
|
|
-//"/wxkeyset"
|
|
|
-//"/swordfish"
|
|
|
-var reg = regexp.MustCompile("^/(swordfish|list|article|wxkeyset|wxpush|front/subscribe)|\\.html$")
|
|
|
-
|
|
|
-//继承过滤器方法
|
|
|
-func (l *logfilter) Do(w http.ResponseWriter, req *http.Request) bool {
|
|
|
- req.Proto = GetIp(req)
|
|
|
- session := l.App.SessionManager.Session(req, w)
|
|
|
- //if url == "/" || reg.MatchString(url) {
|
|
|
- go func() {
|
|
|
- addLog(l, session, req)
|
|
|
- }()
|
|
|
- //}
|
|
|
- return true
|
|
|
-}
|
|
|
-
|
|
|
-//定时保存日志
|
|
|
-func SaveLogTask() {
|
|
|
- lock.Lock()
|
|
|
- /*if len(arr) >= 1 {
|
|
|
- tmp := arr
|
|
|
- arr = make([]map[string]interface{}, 0)
|
|
|
- go func() {
|
|
|
- log.Println("timer..save..visit..log", len(tmp))
|
|
|
- public.MQFW.SaveBulk("jyapp_logs", tmp...)
|
|
|
- }()
|
|
|
- }*/
|
|
|
- if len(arr) >= 1 {
|
|
|
- tmp := arr
|
|
|
- arr = make([]map[string]interface{}, 0)
|
|
|
- for _, v := range tmp {
|
|
|
- go func(v map[string]interface{}) {
|
|
|
- if !public.Ca_Log.SaveCache("jy_fapp", v) {
|
|
|
- public.MQFW.Save("jyapp_logs", v)
|
|
|
- }
|
|
|
- }(v)
|
|
|
- }
|
|
|
- }
|
|
|
- lock.Unlock()
|
|
|
- time.AfterFunc(5*time.Minute, SaveLogTask)
|
|
|
-}
|
|
|
-
|
|
|
-//内存缓存日志数量,超过此数量存库
|
|
|
-var nc = 500
|
|
|
-
|
|
|
-//内存缓存日志map
|
|
|
-var arr = make([]map[string]interface{}, 0)
|
|
|
-
|
|
|
-//对map的同步
|
|
|
-var lock sync.Mutex
|
|
|
-
|
|
|
-//用线程处理,增加日志
|
|
|
-const (
|
|
|
- URL = "127.0.0.1-www.zhaobiao.info"
|
|
|
-)
|
|
|
-
|
|
|
-func addLog(l *logfilter, session *httpsession.Session, req *http.Request) {
|
|
|
- userName := session.Get(l.SessionName)
|
|
|
- hasSession := (userName != nil)
|
|
|
- timeNow := time.Now()
|
|
|
- agent := req.Header.Get("user-agent")
|
|
|
- ref := req.Referer()
|
|
|
- if session.Get("brefer") == nil {
|
|
|
- bexist := false
|
|
|
- rurl, err := url.ParseRequestURI(ref)
|
|
|
- if err == nil && rurl != nil {
|
|
|
- host := rurl.Host
|
|
|
- if host != "" {
|
|
|
- host = strings.Split(host, ":")[0]
|
|
|
- if strings.Index(URL, host) < 0 && strings.Index(host, "qmx.top") < 0 {
|
|
|
- bexist = true
|
|
|
- session.Set("brefer", 1)
|
|
|
- session.Set("referhost", host)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if !bexist {
|
|
|
- session.Set("brefer", -1)
|
|
|
- }
|
|
|
- }
|
|
|
- s_url := req.RequestURI
|
|
|
- md, _ := json.Marshal(req.Form)
|
|
|
- str := string(md)
|
|
|
- logs := map[string]interface{}{
|
|
|
- "id": uc.DayShortTime(),
|
|
|
- "tuid": gocql.TimeUUID(),
|
|
|
- "date": timeNow,
|
|
|
- "ip": req.Proto,
|
|
|
- "refer": ref,
|
|
|
- "year": timeNow.Year(),
|
|
|
- "month": timeNow.Month(),
|
|
|
- "day": timeNow.Day(),
|
|
|
- "hour": timeNow.Hour(),
|
|
|
- "minutes": timeNow.Minute(),
|
|
|
- "mdescribe": str,
|
|
|
- "client": agent,
|
|
|
- "os": GetOS(agent),
|
|
|
- "browse": GetBrowse(agent),
|
|
|
- "method": req.Method,
|
|
|
- "url": s_url,
|
|
|
- }
|
|
|
- if hasSession {
|
|
|
- logs["openid"] = session.Get("userId")
|
|
|
- logs["uname"] = userName
|
|
|
- }
|
|
|
- lock.Lock()
|
|
|
- arr = append(arr, logs)
|
|
|
- if len(arr) >= nc || s_url == "/sl" {
|
|
|
- for _, v := range arr {
|
|
|
- go func(v map[string]interface{}) {
|
|
|
- if !public.Ca_Log.SaveCache("jy_fapp", v) {
|
|
|
- public.MQFW.Save("jyapp_logs", v)
|
|
|
- }
|
|
|
- }(v)
|
|
|
- }
|
|
|
- arr = make([]map[string]interface{}, 0)
|
|
|
- }
|
|
|
- lock.Unlock()
|
|
|
-}
|
|
|
-
|
|
|
-//获取平台类型
|
|
|
-func GetOS(useros string) string {
|
|
|
- osVersion := "其他"
|
|
|
- if strings.Contains(useros, "NT 6.0") {
|
|
|
- osVersion = "Windows Vista/Server 2008"
|
|
|
- } else if strings.Contains(useros, "NT 5.2") {
|
|
|
- osVersion = "Windows Server 2003"
|
|
|
- } else if strings.Contains(useros, "NT 5.1") {
|
|
|
- osVersion = "Windows XP"
|
|
|
- } else if strings.Contains(useros, "NT 5") {
|
|
|
- osVersion = "Windows 2000"
|
|
|
- } else if strings.Contains(useros, "Mac") {
|
|
|
- osVersion = "Mac"
|
|
|
- } else if strings.Contains(useros, "Unix") {
|
|
|
- osVersion = "UNIX"
|
|
|
- } else if strings.Contains(useros, "Linux") {
|
|
|
- osVersion = "Linux"
|
|
|
- } else if strings.Contains(useros, "SunOS") {
|
|
|
- osVersion = "SunOS"
|
|
|
- } else if strings.Contains(useros, "NT 6.3") {
|
|
|
- osVersion = "Window8"
|
|
|
- } else if strings.Contains(useros, "NT 6.1") {
|
|
|
- osVersion = "Window7"
|
|
|
- } else if strings.Contains(useros, "NT 10.0") {
|
|
|
- osVersion = "Window10"
|
|
|
- }
|
|
|
- return osVersion
|
|
|
-}
|
|
|
-
|
|
|
-//获取浏览器类型
|
|
|
-func GetBrowse(userbrowser string) string {
|
|
|
- browserVersion := "其他"
|
|
|
- if strings.Contains(userbrowser, "MSIE") {
|
|
|
- browserVersion = "IE"
|
|
|
- } else if strings.Contains(userbrowser, "Firefox") {
|
|
|
- browserVersion = "Firefox"
|
|
|
- } else if strings.Contains(userbrowser, "Chrome") {
|
|
|
- browserVersion = "Chrome"
|
|
|
- } else if strings.Contains(userbrowser, "Safari") {
|
|
|
- browserVersion = "Safari"
|
|
|
- } else if strings.Contains(userbrowser, "rv:11.0") {
|
|
|
- browserVersion = "IE11"
|
|
|
- }
|
|
|
-
|
|
|
- return browserVersion
|
|
|
-}
|
|
|
-
|
|
|
-//获取请求ip
|
|
|
-func GetIp(req *http.Request) string {
|
|
|
- if req == nil {
|
|
|
- return ""
|
|
|
- }
|
|
|
- ip_for := req.Header.Get("x-forwarded-for")
|
|
|
- ip_client := req.Header.Get("http_client_ip")
|
|
|
- ip_addr := req.Header.Get("Remote_addr")
|
|
|
- un := "unknown"
|
|
|
- if (ip_for != un) && (len(strings.TrimSpace(ip_for)) > 0) {
|
|
|
- return ip_for
|
|
|
- }
|
|
|
- if (ip_client != un) && (len(strings.TrimSpace(ip_client)) > 0) {
|
|
|
- return ip_client
|
|
|
- }
|
|
|
- if (ip_addr != un) && (len(strings.TrimSpace(ip_addr)) > 0) {
|
|
|
- return ip_addr
|
|
|
- }
|
|
|
- ip, _, _ := net.SplitHostPort(req.RemoteAddr)
|
|
|
- return ip
|
|
|
-}
|