@@ -22,7 +22,7 @@ var ignoreVersionCheck bool
2222var port int
2323var shutdownWait int
2424var additionalEndpoints []string
25- var initScroll bool
25+ var idleScroll bool
2626
2727var ServeCommand = & cobra.Command {
2828 Use : "serve" ,
@@ -52,6 +52,12 @@ to interact and monitor the Scroll Application`,
5252 logManager := services .NewLogManager ()
5353 consoleService := services .NewConsoleManager (logManager )
5454 processMonitor := services .NewProcessMonitor ()
55+ ctx := cmd .Context ()
56+ go func () {
57+ <- ctx .Done ()
58+ processMonitor .ShutdownPromMetrics ()
59+ }()
60+
5561 processManager := services .NewProcessManager (logManager , consoleService , processMonitor )
5662
5763 pluginManager := services .NewPluginManager ()
@@ -110,35 +116,26 @@ to interact and monitor the Scroll Application`,
110116
111117 signals .SetupSignals (queueManager , processManager , a , shutdownWait )
112118
113- currentScroll , lock , err := scrollService .Bootstrap (ignoreVersionCheck )
114- if err != nil {
115- return err
116- }
119+ if ! idleScroll {
117120
118- //normal or first launch?
119- if len (lock .Statuses ) > 0 {
120- logger .Log ().Info ("Found lock file, bootstrapping done" )
121- err = scrollService .RenderCwdTemplates ()
121+ currentScroll , lock , err := scrollService .Bootstrap (ignoreVersionCheck )
122122 if err != nil {
123123 return err
124124 }
125- //important to launch plugins, after the templates are rendered, sothat templates can provide for plugins
126- err = processLauncher .LaunchPlugins ()
127125
128- if err != nil {
129- return err
130- }
126+ newScroll := len (lock .Statuses ) == 0
131127
132- logger .Log ().Info ("Starting queue manager" )
133- go queueManager .Work ()
134- } else if initScroll || true { //TODO: remove true
135- logger .Log ().Info ("No lock file found, but init command available. Bootstrapping..." )
128+ if newScroll {
129+ logger .Log ().Info ("No lock file found, but init command available. Bootstrapping..." )
136130
137- logger .Log ().Info ("Creating lock and bootstrapping files" )
138- //There is an error here. We need to bootstrap the files before we render out the templates in the bootstrap func above
139- err := scrollService .CreateLockAndBootstrapFiles ()
140- if err != nil {
141- return err
131+ logger .Log ().Info ("Creating lock and bootstrapping files" )
132+ //There is an error here. We need to bootstrap the files before we render out the templates in the bootstrap func above
133+ err := scrollService .CreateLockAndBootstrapFiles ()
134+ if err != nil {
135+ return err
136+ }
137+ } else {
138+ logger .Log ().Info ("Found lock file, bootstrapping done" )
142139 }
143140
144141 logger .Log ().Info ("Rendering cwd templates" )
@@ -158,43 +155,44 @@ to interact and monitor the Scroll Application`,
158155 logger .Log ().Info ("Starting queue manager" )
159156 go queueManager .Work ()
160157
161- logger .Log ().Info ("Starting scroll.init process" )
162- //start scroll.init process
163- //initialize if nothing is there
164- err = queueManager .AddItem (currentScroll .Init , true )
158+ if newScroll {
159+ logger .Log ().Info ("Starting scroll.init process" )
160+ //start scroll.init process
161+ //initialize if nothing is there
162+ err = queueManager .AddAndRememberItem (currentScroll .Init )
163+ if err != nil {
164+ return err
165+ }
166+
167+ logger .Log ().Info ("Writing new scroll lock" )
168+ scrollService .WriteNewScrollLock ()
169+
170+ logger .Log ().Info ("Bootstrapping done" )
171+ }
172+
173+ err = queueManager .QueueLockFile ()
165174 if err != nil {
166175 return err
167176 }
168177
169- logger . Log (). Info ( "Writing new scroll lock" )
170- scrollService . WriteNewScrollLock ( )
178+ //schedule crons
179+ logger . Log (). Info ( "Schedule crons" )
171180
172- logger . Log (). Info ( "Bootstrapping done" )
173- }
181+ cronManager := services . NewCronManager ( currentScroll . Cronjobs , queueManager )
182+ err = cronManager . Init ()
174183
175- err = queueManager .QueueLockFile ()
176- if err != nil {
177- return err
178- }
179-
180- //schedule crons
181- logger .Log ().Info ("Schedule crons" )
182-
183- cronManager := services .NewCronManager (currentScroll .Cronjobs , queueManager )
184- err = cronManager .Init ()
184+ if err != nil {
185+ return err
186+ }
185187
186- if err != nil {
187- return err
188+ logger .Log ().Info ("Active Scroll" ,
189+ zap .String ("Description" , fmt .Sprintf ("%s (%s)" , currentScroll .Desc , currentScroll .Name )),
190+ zap .String ("Scroll Version" , currentScroll .Version .String ()),
191+ zap .String ("cwd" , cwd ))
188192 }
193+ err = s .Serve (a , port )
189194
190- logger .Log ().Info ("Active Scroll" ,
191- zap .String ("Description" , fmt .Sprintf ("%s (%s)" , currentScroll .Desc , currentScroll .Name )),
192- zap .String ("Scroll Version" , currentScroll .Version .String ()),
193- zap .String ("cwd" , cwd ))
194-
195- s .Serve (a , port )
196-
197- return nil
195+ return err
198196 },
199197}
200198
@@ -207,7 +205,7 @@ func init() {
207205
208206 ServeCommand .Flags ().StringVarP (& userId , "user-id" , "u" , "" , "Allowed user id" )
209207
210- ServeCommand .Flags ().BoolVarP (& initScroll , "init " , "" , false , "Initialize the scroll if no lock file is present " )
208+ ServeCommand .Flags ().BoolVarP (& idleScroll , "idle " , "" , false , "Don't start the queue manager " )
211209
212210 ServeCommand .Flags ().BoolVarP (& ignoreVersionCheck , "ignore-version-check" , "" , false , "Ignore version check" )
213211
0 commit comments