From fc315064e7d550422543c277175a5c3ef114467a Mon Sep 17 00:00:00 2001 From: hoteas Date: Tue, 25 May 2021 20:27:24 +0800 Subject: [PATCH] optimize log tool --- application.go | 1 + cache/cache.go | 1 + cache/cache_db.go | 69 ++++++++++++++++++++-------------------- cache/cache_memory.go | 1 + cache/cache_redis.go | 1 + cache/type.go | 2 ++ common/context_base.go | 1 - common/error.go | 2 +- common/obj.go | 69 ++++++++++++++++++++-------------------- const.go | 2 +- dri/download/download.go | 15 +++++---- 11 files changed, 86 insertions(+), 78 deletions(-) diff --git a/application.go b/application.go index 6189e9f..fa9f391 100644 --- a/application.go +++ b/application.go @@ -22,6 +22,7 @@ type Application struct { MethodRouter Router ContextBase + Error Log *logrus.Logger WebConnectLog *logrus.Logger Port string //端口号 diff --git a/cache/cache.go b/cache/cache.go index 98e1c8e..c0cecb1 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -9,6 +9,7 @@ type HoTimeCache struct { //set(key string, value interface{}, time int64) //get(key string) interface{} //delete(key string) + Error dbCache CacheIns redisCache CacheIns memoryCache CacheIns diff --git a/cache/cache_db.go b/cache/cache_db.go index a20fefe..94e3d85 100644 --- a/cache/cache_db.go +++ b/cache/cache_db.go @@ -22,43 +22,44 @@ type HoTimeDBInterface interface { type CacheDb struct { Time int64 Db HoTimeDBInterface + Error ContextBase isInit bool } -func (this *CacheDb) initDbTable() { - if this.isInit { +func (that *CacheDb) initDbTable() { + if that.isInit { return } - if this.Db.GetType() == "mysql" { + if that.Db.GetType() == "mysql" { - dbNames := this.Db.Query("SELECT DATABASE()") + dbNames := that.Db.Query("SELECT DATABASE()") if len(dbNames) == 0 { return } dbName := dbNames[0].GetString("DATABASE()") - res := this.Db.Query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='" + dbName + "' AND TABLE_NAME='cached'") + res := that.Db.Query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='" + dbName + "' AND TABLE_NAME='cached'") if len(res) != 0 { - this.isInit = true + that.isInit = true return } - _, e := this.Db.Exec("CREATE TABLE `cached` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `ckey` varchar(60) DEFAULT NULL, `cvalue` varchar(2000) DEFAULT NULL, `time` bigint(20) DEFAULT NULL, `endtime` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=198740 DEFAULT CHARSET=utf8") + _, e := that.Db.Exec("CREATE TABLE `cached` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `ckey` varchar(60) DEFAULT NULL, `cvalue` varchar(2000) DEFAULT NULL, `time` bigint(20) DEFAULT NULL, `endtime` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=198740 DEFAULT CHARSET=utf8") if e.GetError() == nil { - this.isInit = true + that.isInit = true } } - if this.Db.GetType() == "sqlite" { - res := this.Db.Query(`select * from sqlite_master where type = 'table' and name = 'cached'`) + if that.Db.GetType() == "sqlite" { + res := that.Db.Query(`select * from sqlite_master where type = 'table' and name = 'cached'`) if len(res) != 0 { - this.isInit = true + that.isInit = true return } - _, e := this.Db.Exec(`CREATE TABLE "cached" ( + _, e := that.Db.Exec(`CREATE TABLE "cached" ( "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "ckey" TEXT(60), "cvalue" TEXT(2000), @@ -66,7 +67,7 @@ func (this *CacheDb) initDbTable() { "endtime" integer );`) if e.GetError() == nil { - this.isInit = true + that.isInit = true } } @@ -74,9 +75,9 @@ func (this *CacheDb) initDbTable() { } //获取Cache键只能为string类型 -func (this *CacheDb) get(key string) interface{} { +func (that *CacheDb) get(key string) interface{} { - cached := this.Db.Get("cached", "*", Map{"ckey": key}) + cached := that.Db.Get("cached", "*", Map{"ckey": key}) if cached == nil { return nil @@ -84,7 +85,7 @@ func (this *CacheDb) get(key string) interface{} { //data:=cacheMap[key]; if cached.GetInt64("endtime") <= time.Now().Unix() { - this.Db.Delete("cached", Map{"id": cached.GetString("id")}) + that.Db.Delete("cached", Map{"id": cached.GetString("id")}) return nil } @@ -95,65 +96,65 @@ func (this *CacheDb) get(key string) interface{} { } //key value ,时间为时间戳 -func (this *CacheDb) set(key string, value interface{}, tim int64) { +func (that *CacheDb) set(key string, value interface{}, tim int64) { bte, _ := json.Marshal(Map{"data": value}) - num := this.Db.Update("cached", Map{"cvalue": string(bte), "time": time.Now().UnixNano(), "endtime": tim}, Map{"ckey": key}) + num := that.Db.Update("cached", Map{"cvalue": string(bte), "time": time.Now().UnixNano(), "endtime": tim}, Map{"ckey": key}) if num == int64(0) { - this.Db.Insert("cached", Map{"cvalue": string(bte), "time": time.Now().UnixNano(), "endtime": tim, "ckey": key}) + that.Db.Insert("cached", Map{"cvalue": string(bte), "time": time.Now().UnixNano(), "endtime": tim, "ckey": key}) } //随机执行删除命令 if Rand(1000) > 950 { - this.Db.Delete("cached", Map{"endtime[<]": time.Now().Unix()}) + that.Db.Delete("cached", Map{"endtime[<]": time.Now().Unix()}) } } -func (this *CacheDb) delete(key string) { +func (that *CacheDb) delete(key string) { del := strings.Index(key, "*") //如果通配删除 if del != -1 { key = Substr(key, 0, del) - this.Db.Delete("cached", Map{"ckey": key + "%"}) + that.Db.Delete("cached", Map{"ckey": key + "%"}) } else { - this.Db.Delete("cached", Map{"ckey": key}) + that.Db.Delete("cached", Map{"ckey": key}) } } -func (this *CacheDb) Cache(key string, data ...interface{}) *Obj { +func (that *CacheDb) Cache(key string, data ...interface{}) *Obj { - this.initDbTable() + that.initDbTable() if len(data) == 0 { - return &Obj{Data: this.get(key)} + return &Obj{Data: that.get(key)} } tim := time.Now().Unix() if len(data) == 1 && data[0] == nil { - this.delete(key) + that.delete(key) return &Obj{Data: nil} } if len(data) == 1 { - if this.Time == 0 { - //this.Time = Config.GetInt64("cacheLongTime") + if that.Time == 0 { + //that.Time = Config.GetInt64("cacheLongTime") } - tim += this.Time + tim += that.Time } if len(data) == 2 { - this.SetError(nil) - tempt := ObjToInt64(data[1], &this.Error) + that.SetError(nil) + tempt := ObjToInt64(data[1], &that.Error) if tempt > tim { tim = tempt - } else if this.GetError() == nil { + } else if that.GetError() == nil { tim = tim + tempt } } - this.set(key, data[0], tim) + that.set(key, data[0], tim) return &Obj{Data: nil} } diff --git a/cache/cache_memory.go b/cache/cache_memory.go index fffaf36..c586de3 100644 --- a/cache/cache_memory.go +++ b/cache/cache_memory.go @@ -10,6 +10,7 @@ import ( type CacheMemory struct { Time int64 Map + Error ContextBase mutex *sync.RWMutex } diff --git a/cache/cache_redis.go b/cache/cache_redis.go index 6d57645..ac026d0 100644 --- a/cache/cache_redis.go +++ b/cache/cache_redis.go @@ -13,6 +13,7 @@ type CacheRedis struct { Time int64 conn redis.Conn tag int64 + ContextBase Error } diff --git a/cache/type.go b/cache/type.go index b64173b..decd53f 100644 --- a/cache/type.go +++ b/cache/type.go @@ -8,6 +8,8 @@ type CacheIns interface { //set(key string, value interface{}, time int64) //get(key string) interface{} //delete(key string) + GetError() error + SetError(err error) Cache(key string, data ...interface{}) *Obj } diff --git a/common/context_base.go b/common/context_base.go index 1b7957a..c940467 100644 --- a/common/context_base.go +++ b/common/context_base.go @@ -5,7 +5,6 @@ import ( ) type ContextBase struct { - Error tag string } diff --git a/common/error.go b/common/error.go index 04e73c3..45878f8 100644 --- a/common/error.go +++ b/common/error.go @@ -18,7 +18,7 @@ func (that *Error) GetError() error { func (that *Error) SetError(err error) { that.error = err - if that.Logger != nil { + if that.Logger != nil && err != nil { //that.Logger=log.GetLog("",false) that.Logger.Warn(err) } diff --git a/common/obj.go b/common/obj.go index 4a7cbf8..51025b4 100644 --- a/common/obj.go +++ b/common/obj.go @@ -3,91 +3,92 @@ package common //对象封装方便取用 type Obj struct { Data interface{} + Error ContextBase } -func (this *Obj) Put(data interface{}) { - this.Data = data +func (that *Obj) Put(data interface{}) { + that.Data = data } -func (this *Obj) ToInt(err ...Error) int { +func (that *Obj) ToInt(err ...Error) int { if len(err) != 0 { - this.Error = err[0] + that.Error = err[0] } - return ObjToInt(this.Data, &this.Error) + return ObjToInt(that.Data, &that.Error) } -func (this *Obj) ToInt64(err ...Error) int64 { +func (that *Obj) ToInt64(err ...Error) int64 { if len(err) != 0 { - this.Error = err[0] + that.Error = err[0] } - return ObjToInt64(this.Data, &this.Error) + return ObjToInt64(that.Data, &that.Error) } -func (this *Obj) ToFloat64(err ...Error) float64 { +func (that *Obj) ToFloat64(err ...Error) float64 { if len(err) != 0 { - this.Error = err[0] + that.Error = err[0] } - return ObjToFloat64(this.Data, &this.Error) + return ObjToFloat64(that.Data, &that.Error) } -//获取向上取整float64 -func (this *Obj) ToCeilFloat64(err ...*Error) float64 { +// ToCeilFloat64 获取向上取整float64 +func (that *Obj) ToCeilFloat64(err ...*Error) float64 { if len(err) != 0 { - this.Error = *err[0] + that.Error = *err[0] } - v := ObjToCeilFloat64(this.Data, err...) + v := ObjToCeilFloat64(that.Data, err...) return v } -func (this *Obj) ToStr() string { +func (that *Obj) ToStr() string { - return ObjToStr(this.Data) + return ObjToStr(that.Data) } -func (this *Obj) ToMap(err ...Error) Map { +func (that *Obj) ToMap(err ...Error) Map { if len(err) != 0 { - this.Error = err[0] + that.Error = err[0] } - return ObjToMap(this.Data, &this.Error) + return ObjToMap(that.Data, &that.Error) } -func (this *Obj) ToSlice(err ...Error) Slice { +func (that *Obj) ToSlice(err ...Error) Slice { if len(err) != 0 { - this.Error = err[0] + that.Error = err[0] } - return ObjToSlice(this.Data, &this.Error) + return ObjToSlice(that.Data, &that.Error) } -func (this *Obj) ToMapArray(err ...Error) []Map { +func (that *Obj) ToMapArray(err ...Error) []Map { if len(err) != 0 { - this.Error = err[0] + that.Error = err[0] } - return ObjToMapArray(this.Data, &this.Error) + return ObjToMapArray(that.Data, &that.Error) } -func (this *Obj) ToObj() interface{} { +func (that *Obj) ToObj() interface{} { - return this.Data + return that.Data } //获取向上取整Int64 -func (this *Obj) ToCeilInt64(err ...*Error) int64 { +func (that *Obj) ToCeilInt64(err ...*Error) int64 { if len(err) != 0 { - this.Error = *err[0] + that.Error = *err[0] } - v := ObjToCeilInt64(this.Data, err...) + v := ObjToCeilInt64(that.Data, err...) return v } //获取向上取整Int -func (this *Obj) ToCeilInt(err ...*Error) int { +func (that *Obj) ToCeilInt(err ...*Error) int { if len(err) != 0 { - this.Error = *err[0] + that.Error = *err[0] } - v := ObjToCeilInt(this.Data, err...) + v := ObjToCeilInt(that.Data, err...) return v } diff --git a/const.go b/const.go index 7874cd3..c4d12e5 100644 --- a/const.go +++ b/const.go @@ -1,4 +1,4 @@ package hotime -//session储存头 +// HEAD_SESSION_ADD session储存头 const HEAD_SESSION_ADD = "session#" diff --git a/dri/download/download.go b/dri/download/download.go index 79627c1..066e3cc 100644 --- a/dri/download/download.go +++ b/dri/download/download.go @@ -10,29 +10,30 @@ import ( ) //下载文件 -func Down(url, path, name string) bool { +func Down(url, path, name string, e ...*Error) bool { os.MkdirAll(path, os.ModeDir) if Substr(path, len(path)-1, len(path)) != "/" { path = path + "/" } out, err := os.Create(path + name) - e := Error{} - if err != nil { - e.SetError(err) + + if err != nil && e[0] != nil { + e[0].SetError(err) return false } defer out.Close() resp, err := http.Get(url) - if err != nil { + if err != nil && e[0] != nil { + e[0].SetError(err) return false } defer resp.Body.Close() pix, err := ioutil.ReadAll(resp.Body) _, err = io.Copy(out, bytes.NewReader(pix)) - if err != nil { - e.SetError(err) + if err != nil && e[0] != nil { + e[0].SetError(err) return false } return true