|
|
@@ -5,9 +5,11 @@ import (
|
|
|
"gorm.io/driver/postgres"
|
|
|
"gorm.io/driver/sqlite"
|
|
|
"gorm.io/gorm"
|
|
|
+ "log"
|
|
|
"one-api/common"
|
|
|
"os"
|
|
|
"strings"
|
|
|
+ "sync"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
@@ -148,3 +150,33 @@ func CloseDB() error {
|
|
|
err = sqlDB.Close()
|
|
|
return err
|
|
|
}
|
|
|
+
|
|
|
+var (
|
|
|
+ lastPingTime time.Time
|
|
|
+ pingMutex sync.Mutex
|
|
|
+)
|
|
|
+
|
|
|
+func PingDB() error {
|
|
|
+ pingMutex.Lock()
|
|
|
+ defer pingMutex.Unlock()
|
|
|
+
|
|
|
+ if time.Since(lastPingTime) < time.Second*10 {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+ sqlDB, err := DB.DB()
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("Error getting sql.DB from GORM: %v", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ err = sqlDB.Ping()
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("Error pinging DB: %v", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ lastPingTime = time.Now()
|
|
|
+ common.SysLog("Database pinged successfully")
|
|
|
+ return nil
|
|
|
+}
|