Skip to content

Commit 14dc526

Browse files
denis256agneum
authored andcommitted
feat(engine): manage logs of PostgreSQL containers to simplify diagnostics (#349):
* introduce a `diagnostic` package to get container and Postgres logs * update the configuration to have a configuration option for log retention * start a background cron job for cleaning old logs
1 parent 333a152 commit 14dc526

18 files changed

+629
-22
lines changed

engine/cmd/database-lab/main.go

+20-8
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/pkg/errors"
2222

2323
"gitlab.com/postgres-ai/database-lab/v3/internal/cloning"
24+
"gitlab.com/postgres-ai/database-lab/v3/internal/diagnostic"
2425
"gitlab.com/postgres-ai/database-lab/v3/internal/embeddedui"
2526
"gitlab.com/postgres-ai/database-lab/v3/internal/estimator"
2627
"gitlab.com/postgres-ai/database-lab/v3/internal/observer"
@@ -166,7 +167,9 @@ func main() {
166167
obs, est, pm, tm, tokenHolder, embeddedUI)
167168
shutdownCh := setShutdownListener()
168169

169-
go setReloadListener(ctx, provisioner, tm, retrievalSvc, pm, cloningSvc, platformSvc, est, embeddedUI, server)
170+
logCleaner := diagnostic.NewLogCleaner()
171+
172+
go setReloadListener(ctx, provisioner, tm, retrievalSvc, pm, cloningSvc, platformSvc, est, embeddedUI, server, logCleaner)
170173

171174
server.InitHandlers()
172175

@@ -192,6 +195,10 @@ func main() {
192195

193196
defer retrievalSvc.Stop()
194197

198+
if err := logCleaner.ScheduleLogCleanupJob(cfg.Diagnostic); err != nil {
199+
log.Err("Failed to schedule a cleanup job of the diagnostic logs collector", err)
200+
}
201+
195202
<-shutdownCh
196203
cancel()
197204

@@ -206,6 +213,7 @@ func main() {
206213

207214
shutdownDatabaseLabEngine(ctxBackground, docker, &cfg.Global.Database, engProps.InstanceID, pm.First())
208215
cloningSvc.SaveClonesState()
216+
logCleaner.StopLogCleanupJob()
209217
tm.SendEvent(ctxBackground, telemetry.EngineStoppedEvent, telemetry.EngineStopped{Uptime: server.Uptime()})
210218
}
211219

@@ -234,9 +242,9 @@ func getEngineProperties(ctx context.Context, dockerCLI *client.Client, cfg *con
234242
return engProps, nil
235243
}
236244

237-
func reloadConfig(ctx context.Context, provisionSvc *provision.Provisioner, tm *telemetry.Agent, retrievalSvc *retrieval.Retrieval,
238-
pm *pool.Manager, cloningSvc *cloning.Base, platformSvc *platform.Service, est *estimator.Estimator, embeddedUI *embeddedui.UIManager,
239-
server *srv.Server) error {
245+
func reloadConfig(ctx context.Context, provisionSvc *provision.Provisioner, tm *telemetry.Agent,
246+
retrievalSvc *retrieval.Retrieval, pm *pool.Manager, cloningSvc *cloning.Base, platformSvc *platform.Service,
247+
est *estimator.Estimator, embeddedUI *embeddedui.UIManager, server *srv.Server, cleaner *diagnostic.Cleaner) error {
240248
cfg, err := config.LoadConfiguration()
241249
if err != nil {
242250
return err
@@ -264,6 +272,10 @@ func reloadConfig(ctx context.Context, provisionSvc *provision.Provisioner, tm *
264272
return err
265273
}
266274

275+
if err := cleaner.ScheduleLogCleanupJob(cfg.Diagnostic); err != nil {
276+
return err
277+
}
278+
267279
dbCfg := resources.DB{
268280
Username: cfg.Global.Database.User(),
269281
DBName: cfg.Global.Database.Name(),
@@ -280,16 +292,16 @@ func reloadConfig(ctx context.Context, provisionSvc *provision.Provisioner, tm *
280292
return nil
281293
}
282294

283-
func setReloadListener(ctx context.Context, provisionSvc *provision.Provisioner, tm *telemetry.Agent, retrievalSvc *retrieval.Retrieval,
284-
pm *pool.Manager, cloningSvc *cloning.Base, platformSvc *platform.Service, est *estimator.Estimator, embeddedUI *embeddedui.UIManager,
285-
server *srv.Server) {
295+
func setReloadListener(ctx context.Context, provisionSvc *provision.Provisioner, tm *telemetry.Agent,
296+
retrievalSvc *retrieval.Retrieval, pm *pool.Manager, cloningSvc *cloning.Base, platformSvc *platform.Service,
297+
est *estimator.Estimator, embeddedUI *embeddedui.UIManager, server *srv.Server, cleaner *diagnostic.Cleaner) {
286298
reloadCh := make(chan os.Signal, 1)
287299
signal.Notify(reloadCh, syscall.SIGHUP)
288300

289301
for range reloadCh {
290302
log.Msg("Reloading configuration")
291303

292-
if err := reloadConfig(ctx, provisionSvc, tm, retrievalSvc, pm, cloningSvc, platformSvc, est, embeddedUI, server); err != nil {
304+
if err := reloadConfig(ctx, provisionSvc, tm, retrievalSvc, pm, cloningSvc, platformSvc, est, embeddedUI, server, cleaner); err != nil {
293305
log.Err("Failed to reload configuration", err)
294306
}
295307

engine/configs/config.example.logical_generic.yml

+2
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,8 @@ cloning:
321321
# - no recently logged queries in the query log
322322
maxIdleMinutes: 120
323323

324+
diagnostic:
325+
logsRetentionDays: 7
324326

325327
# ### INTEGRATION ###
326328

engine/configs/config.example.logical_rds_iam.yml

+2
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ cloning:
322322
# - no recently logged queries in the query log
323323
maxIdleMinutes: 120
324324

325+
diagnostic:
326+
logsRetentionDays: 7
325327

326328
# ### INTEGRATION ###
327329

engine/configs/config.example.physical_generic.yml

+2
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,8 @@ cloning:
310310
# - no recently logged queries in the query log
311311
maxIdleMinutes: 120
312312

313+
diagnostic:
314+
logsRetentionDays: 7
313315

314316
# ### INTEGRATION ###
315317

engine/configs/config.example.physical_pgbackrest.yml

+2
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,8 @@ cloning:
325325
# - no recently logged queries in the query log
326326
maxIdleMinutes: 120
327327

328+
diagnostic:
329+
logsRetentionDays: 7
328330

329331
# ### INTEGRATION ###
330332

engine/configs/config.example.physical_walg.yml

+2
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,8 @@ cloning:
298298
# - no recently logged queries in the query log
299299
maxIdleMinutes: 120
300300

301+
diagnostic:
302+
logsRetentionDays: 7
301303

302304
# ### INTEGRATION ###
303305

0 commit comments

Comments
 (0)