Logs: Allow restart of logging after database provider reset #47 #4831

Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
Michael Mayer 2025-04-09 16:31:06 +02:00
parent eaea3a416d
commit 204ce2b100
3 changed files with 14 additions and 13 deletions

View file

@ -324,6 +324,7 @@ func (c *Config) CloseDb() error {
if c.db != nil {
if err := c.db.Close(); err == nil {
c.db = nil
entity.SetDbProvider(nil)
} else {
return err
}

View file

@ -27,8 +27,3 @@ func Db() *gorm.DB {
func UnscopedDb() *gorm.DB {
return Db().Unscoped()
}
// HasDb checks if a *gorm.DB connection exists.
func HasDb() bool {
return dbConn != nil
}

View file

@ -1,7 +1,7 @@
package entity
import (
"sync"
"sync/atomic"
"time"
"github.com/sirupsen/logrus"
@ -9,14 +9,18 @@ import (
"github.com/photoprism/photoprism/internal/event"
)
var logWarningsAndErrorsOnce sync.Once
// logEvents is true when events are being recorded in the "errors" database table.
var logEvents = atomic.Bool{}
// LogWarningsAndErrors starts writing published error and warning events to the "errors" database table once.
// LogWarningsAndErrors starts logging published error and warning
// events to the errors database table if a database instance is set.
func LogWarningsAndErrors() {
if HasDb() {
logWarningsAndErrorsOnce.Do(func() {
go Error{}.LogEvents(logrus.WarnLevel)
})
if !HasDbProvider() {
return
}
if logEvents.CompareAndSwap(false, true) {
go Error{}.LogEvents(logrus.WarnLevel)
}
}
@ -41,6 +45,7 @@ func (Error) LogEvents(minLevel logrus.Level) {
s := event.Subscribe("log.*")
defer func() {
logEvents.CompareAndSwap(true, false)
event.Unsubscribe(s)
}()
@ -66,7 +71,7 @@ func (Error) LogEvents(minLevel logrus.Level) {
errLog.ErrorTime = val.(time.Time)
}
if HasDb() {
if HasDbProvider() {
Db().Create(&errLog)
} else {
break