mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-07 18:50:26 +08:00
修复访问日志可能显示重复的问题
This commit is contained in:
@@ -251,7 +251,7 @@ func (this *DBNodeInitializer) loop() error {
|
|||||||
// 检查表是否存在
|
// 检查表是否存在
|
||||||
// httpAccessLog
|
// httpAccessLog
|
||||||
{
|
{
|
||||||
tableDef, err := SharedHTTPAccessLogManager.FindTable(db, timeutil.Format("Ymd"), true)
|
tableDef, err := SharedHTTPAccessLogManager.FindLastTable(db, timeutil.Format("Ymd"), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
remotelogs.Error("DB_NODE", "create first table in database node failed: "+err.Error())
|
remotelogs.Error("DB_NODE", "create first table in database node failed: "+err.Error())
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ Loop:
|
|||||||
// CreateHTTPAccessLog 写入单条访问日志
|
// CreateHTTPAccessLog 写入单条访问日志
|
||||||
func (this *HTTPAccessLogDAO) CreateHTTPAccessLog(tx *dbs.Tx, dao *HTTPAccessLogDAO, accessLog *pb.HTTPAccessLog) error {
|
func (this *HTTPAccessLogDAO) CreateHTTPAccessLog(tx *dbs.Tx, dao *HTTPAccessLogDAO, accessLog *pb.HTTPAccessLog) error {
|
||||||
var day = timeutil.FormatTime("Ymd", accessLog.Timestamp)
|
var day = timeutil.FormatTime("Ymd", accessLog.Timestamp)
|
||||||
tableDef, err := SharedHTTPAccessLogManager.FindTable(dao.Instance, day, true)
|
tableDef, err := SharedHTTPAccessLogManager.FindLastTable(dao.Instance, day, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,13 +102,19 @@ func (this *HTTPAccessLogManager) FindTables(db *dbs.DB, day string) ([]*httpAcc
|
|||||||
if accessLogTableMainReg.MatchString(tableName) {
|
if accessLogTableMainReg.MatchString(tableName) {
|
||||||
tableNames = append(tableNames, tableName)
|
tableNames = append(tableNames, tableName)
|
||||||
|
|
||||||
|
// 查找已有的表格信息,避免SHOW FIELDS
|
||||||
var tableDay = tableName[strings.LastIndex(tableName, "_")+1:]
|
var tableDay = tableName[strings.LastIndex(tableName, "_")+1:]
|
||||||
var cacheKey = this.composeTableCacheKey(cachePrefix, tableDay)
|
var cacheKey = this.composeTableCacheKey(cachePrefix, tableDay)
|
||||||
this.locker.Lock()
|
this.locker.Lock()
|
||||||
currentTableDef, ok := this.currentTableMapping[cacheKey]
|
currentTableDef, ok := this.currentTableMapping[cacheKey]
|
||||||
this.locker.Unlock()
|
this.locker.Unlock()
|
||||||
if ok {
|
if ok {
|
||||||
results = append(results, currentTableDef)
|
results = append(results, &httpAccessLogDefinition{
|
||||||
|
Name: tableName,
|
||||||
|
HasRemoteAddr: currentTableDef.HasRemoteAddr,
|
||||||
|
HasDomain: currentTableDef.HasDomain,
|
||||||
|
Exists: true,
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
hasRemoteAddrField, hasDomainField, err := this.checkTableFields(db, tableName)
|
hasRemoteAddrField, hasDomainField, err := this.checkTableFields(db, tableName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -143,11 +149,11 @@ func (this *HTTPAccessLogManager) FindTables(db *dbs.DB, day string) ([]*httpAcc
|
|||||||
return results, nil
|
return results, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindTable 根据日期获取表名
|
// FindLastTable 根据日期获取上一个可以使用的表名
|
||||||
// 表名组成
|
// 表名组成
|
||||||
// - PREFIX_DAY
|
// - PREFIX_DAY
|
||||||
// - PREFIX_DAY_0001
|
// - PREFIX_DAY_0001
|
||||||
func (this *HTTPAccessLogManager) FindTable(db *dbs.DB, day string, force bool) (*httpAccessLogDefinition, error) {
|
func (this *HTTPAccessLogManager) FindLastTable(db *dbs.DB, day string, force bool) (*httpAccessLogDefinition, error) {
|
||||||
this.locker.Lock()
|
this.locker.Lock()
|
||||||
defer this.locker.Unlock()
|
defer this.locker.Unlock()
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ func TestHTTPAccessLogManager_FindTables(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHTTPAccessLogManager_FindTable(t *testing.T) {
|
func TestHTTPAccessLogManager_FindLastTable(t *testing.T) {
|
||||||
var config = &dbs.DBConfig{
|
var config = &dbs.DBConfig{
|
||||||
Driver: "mysql",
|
Driver: "mysql",
|
||||||
Dsn: "root:123456@tcp(127.0.0.1:3306)/db_edge_log?charset=utf8mb4&timeout=30s",
|
Dsn: "root:123456@tcp(127.0.0.1:3306)/db_edge_log?charset=utf8mb4&timeout=30s",
|
||||||
@@ -145,7 +145,7 @@ func TestHTTPAccessLogManager_FindTable(t *testing.T) {
|
|||||||
|
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
var before = time.Now()
|
var before = time.Now()
|
||||||
tableDef, err := models.SharedHTTPAccessLogManager.FindTable(db, "20220306", false)
|
tableDef, err := models.SharedHTTPAccessLogManager.FindLastTable(db, "20220306", false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user