You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.6 KiB
141 lines
3.6 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
|
|
v1pb "go-common/app/service/live/resource/api/grpc/v1" |
|
"go-common/library/database/sql" |
|
"go-common/library/log" |
|
) |
|
|
|
const ( |
|
_findConfkvSQL = "SELECT `value` FROM `confkv` WHERE `key` = ?" |
|
_addConfkvSQL = "INSERT INTO `confkv` (`key`,`value`) VALUES (?,?)" |
|
_updateConfkvSQL = "UPDATE `confkv` SET `value`=? WHERE `key`=?" |
|
) |
|
|
|
const ( |
|
_confLiveCheck = "live_check" |
|
|
|
_platformAndroid = "android" |
|
_platformIos = "ios" |
|
) |
|
|
|
// GetLiveCheck live.app-interface call |
|
// cache -> db |
|
func (d *Dao) GetLiveCheck(c context.Context, platform, system, mobile string) (isLive int64) { |
|
isLive = int64(1) |
|
inst := 0 |
|
res, ok := d.sCache[inst].Get(cacheLiveCheckKey(platform, system, mobile)) |
|
if !ok { |
|
value, err := d.ConfKv(c, _confLiveCheck) |
|
if err != nil { |
|
log.Error("[LiveCheck] get live check error by from source") |
|
return |
|
} |
|
if value == "" { |
|
log.Error("[LiveCheck] get live check error by source data empty") |
|
return |
|
} |
|
list := &v1pb.GetLiveCheckListResp{} |
|
err = json.Unmarshal([]byte(value), list) |
|
if err != nil { |
|
log.Error("[LiveCheck] get live check error by source data wrong format") |
|
return |
|
} |
|
log.Info("[LiveCheck] live_check list is %v", list) |
|
switch platform { |
|
case _platformAndroid: |
|
for _, v := range list.Android { |
|
if v.System == system { |
|
for _, m := range v.Mobile { |
|
if m == mobile { |
|
isLive = int64(0) |
|
} |
|
} |
|
} |
|
} |
|
case _platformIos: |
|
for _, v := range list.Ios { |
|
if v.System == system { |
|
for _, m := range v.Mobile { |
|
log.Info("[LiveCheck] range m %v mobile %v", m, mobile) |
|
if m == mobile { |
|
isLive = int64(0) |
|
} |
|
} |
|
} |
|
} |
|
} |
|
d.sCache[inst].Put(cacheLiveCheckKey(platform, system, mobile), isLive) |
|
return |
|
} |
|
isLive = res.(int64) |
|
return |
|
} |
|
|
|
// ConfKv get data from cache if miss will call source method, then add to cache. |
|
func (d *Dao) ConfKv(c context.Context, key string) (value string, err error) { |
|
inst := 0 |
|
res, ok := d.sCache[inst].Get(cacheConfKey(key)) |
|
if !ok { |
|
log.Info("[LiveCheck] conf cache miss") |
|
value, err = d.RawConfKv(c, key) |
|
if err != nil { |
|
return |
|
} |
|
d.sCache[inst].Put(cacheConfKey(key), value) |
|
return |
|
} |
|
log.Info("[LiveCheck] conf cache hit") |
|
value = res.(string) |
|
return |
|
} |
|
|
|
// SetLiveCheck set live_check conf |
|
func (d *Dao) SetLiveCheck(c context.Context, value string) (err error) { |
|
err = d.AddOrUpdateConfKv(c, _confLiveCheck, value) |
|
return |
|
} |
|
|
|
// GetLiveCheckList get live_check conf |
|
func (d *Dao) GetLiveCheckList(c context.Context) (value string, err error) { |
|
value, err = d.RawConfKv(c, _confLiveCheck) |
|
return |
|
} |
|
|
|
// RawConfKv get conf |
|
func (d *Dao) RawConfKv(c context.Context, key string) (value string, err error) { |
|
row := d.db.QueryRow(c, _findConfkvSQL, key) |
|
if err = row.Scan(&value); err != nil { |
|
if err == sql.ErrNoRows { |
|
err = nil |
|
return |
|
} |
|
log.Error("[SelectConfKv] row.Scan() error(%v)", err) |
|
} |
|
return |
|
} |
|
|
|
// AddOrUpdateConfKv add or update conf |
|
func (d *Dao) AddOrUpdateConfKv(c context.Context, key string, value string) (err error) { |
|
oldValue, err := d.RawConfKv(c, key) |
|
if err != nil { |
|
return |
|
} |
|
if oldValue != "" { |
|
//update |
|
log.Info("[LiveCheck] update db value %v", value) |
|
if _, err = d.db.Exec(c, _updateConfkvSQL, value, key); err != nil { |
|
log.Error("[AddOrUpdateConfKv] UpdateConfKv:db.Exec(%v,$v) error(%v)", key, value, err) |
|
} |
|
return |
|
} |
|
//add |
|
log.Info("[LiveCheck] add db value %v", value) |
|
if _, err = d.db.Exec(c, _addConfkvSQL, key, value); err != nil { |
|
log.Error("[AddOrUpdateConfKv] AddConfKv:db.Exec(%v,$v) error(%v)", key, value, err) |
|
} |
|
return |
|
}
|
|
|