@@ -32,7 +32,9 @@ import (
3232 "gitlab.com/postgres-ai/database-lab/v2/pkg/services/provision/resources"
3333 "gitlab.com/postgres-ai/database-lab/v2/pkg/services/provision/runners"
3434 "gitlab.com/postgres-ai/database-lab/v2/pkg/srv"
35+ "gitlab.com/postgres-ai/database-lab/v2/pkg/telemetry"
3536 "gitlab.com/postgres-ai/database-lab/v2/pkg/util/networks"
37+ "gitlab.com/postgres-ai/database-lab/v2/version"
3638)
3739
3840const (
@@ -47,6 +49,10 @@ func main() {
4749
4850 log .Msg ("Database Lab Instance ID:" , cfg .Global .InstanceID )
4951
52+ if cfg .Server .VerificationToken == "" {
53+ log .Warn ("Verification Token is empty. Database Lab Engine is insecure" )
54+ }
55+
5056 runner := runners .NewLocalRunner (cfg .Provision .UseSudo )
5157
5258 pm := pool .NewPoolManager (& cfg .PoolManager , runner )
@@ -96,8 +102,14 @@ func main() {
96102 shutdownDatabaseLabEngine (shutdownCtx , dockerCLI , cfg .Global , pm .First ().Pool ())
97103 }
98104
105+ tm , err := telemetry .New (cfg .Global )
106+ if err != nil {
107+ log .Errf (errors .WithMessage (err , "failed to initialize a telemetry service" ).Error ())
108+ return
109+ }
110+
99111 // Create a new retrieval service to prepare a data directory and start snapshotting.
100- retrievalSvc := retrieval .New (cfg , dockerCLI , pm , runner )
112+ retrievalSvc := retrieval .New (cfg , dockerCLI , pm , tm , runner )
101113
102114 if err := retrievalSvc .Run (ctx ); err != nil {
103115 log .Err ("Failed to run the data retrieval service:" , err )
@@ -116,7 +128,7 @@ func main() {
116128
117129 observingChan := make (chan string , 1 )
118130
119- cloningSvc := cloning .NewBase (& cfg .Cloning , provisionSvc , observingChan )
131+ cloningSvc := cloning .NewBase (& cfg .Cloning , provisionSvc , tm , observingChan )
120132 if err = cloningSvc .Run (ctx ); err != nil {
121133 log .Err (err )
122134 emergencyShutdown ()
@@ -129,10 +141,17 @@ func main() {
129141
130142 go removeObservingClones (observingChan , obs )
131143
132- server := srv .NewServer (& cfg .Server , & cfg .Global , cloningSvc , retrievalSvc , platformSvc , dockerCLI , obs , est , pm )
144+ tm .SendEvent (ctx , telemetry .EngineStartedEvent , telemetry.EngineStarted {
145+ EngineVersion : version .GetVersion (),
146+ DBVersion : provisionSvc .DetectDBVersion (),
147+ Pools : pm .CollectPoolStat (),
148+ Restore : retrievalSvc .CollectRestoreTelemetry (),
149+ })
150+
151+ server := srv .NewServer (& cfg .Server , & cfg .Global , cloningSvc , retrievalSvc , platformSvc , dockerCLI , obs , est , pm , tm )
133152 shutdownCh := setShutdownListener ()
134153
135- go setReloadListener (ctx , provisionSvc , retrievalSvc , pm , cloningSvc , platformSvc , est , server )
154+ go setReloadListener (ctx , provisionSvc , tm , retrievalSvc , pm , cloningSvc , platformSvc , est , server )
136155
137156 server .InitHandlers ()
138157
@@ -155,9 +174,10 @@ func main() {
155174
156175 shutdownDatabaseLabEngine (shutdownCtx , dockerCLI , cfg .Global , pm .First ().Pool ())
157176 cloningSvc .SaveClonesState ()
177+ tm .SendEvent (ctx , telemetry .EngineStoppedEvent , telemetry.EngineStopped {Uptime : server .Uptime ()})
158178}
159179
160- func reloadConfig (ctx context.Context , provisionSvc * provision.Provisioner , retrievalSvc * retrieval.Retrieval ,
180+ func reloadConfig (ctx context.Context , provisionSvc * provision.Provisioner , tm * telemetry. Agent , retrievalSvc * retrieval.Retrieval ,
161181 pm * pool.Manager , cloningSvc * cloning.Base , platformSvc * platform.Service , est * estimator.Estimator , server * srv.Server ) error {
162182 cfg , err := config .LoadConfiguration ()
163183 if err != nil {
@@ -187,6 +207,7 @@ func reloadConfig(ctx context.Context, provisionSvc *provision.Provisioner, retr
187207 }
188208
189209 provisionSvc .Reload (cfg .Provision , dbCfg )
210+ tm .Reload (cfg .Global )
190211 retrievalSvc .Reload (ctx , cfg )
191212 cloningSvc .Reload (cfg .Cloning )
192213 platformSvc .Reload (newPlatformSvc )
@@ -196,15 +217,15 @@ func reloadConfig(ctx context.Context, provisionSvc *provision.Provisioner, retr
196217 return nil
197218}
198219
199- func setReloadListener (ctx context.Context , provisionSvc * provision.Provisioner , retrievalSvc * retrieval.Retrieval ,
220+ func setReloadListener (ctx context.Context , provisionSvc * provision.Provisioner , tm * telemetry. Agent , retrievalSvc * retrieval.Retrieval ,
200221 pm * pool.Manager , cloningSvc * cloning.Base , platformSvc * platform.Service , est * estimator.Estimator , server * srv.Server ) {
201222 reloadCh := make (chan os.Signal , 1 )
202223 signal .Notify (reloadCh , syscall .SIGHUP )
203224
204225 for range reloadCh {
205226 log .Msg ("Reloading configuration" )
206227
207- if err := reloadConfig (ctx , provisionSvc , retrievalSvc , pm , cloningSvc , platformSvc , est , server ); err != nil {
228+ if err := reloadConfig (ctx , provisionSvc , tm , retrievalSvc , pm , cloningSvc , platformSvc , est , server ); err != nil {
208229 log .Err ("Failed to reload configuration" , err )
209230 }
210231
0 commit comments