Skip to content

Commit eb24c66

Browse files
committed
Added config
1 parent 32c91fa commit eb24c66

File tree

5 files changed

+208
-177
lines changed

5 files changed

+208
-177
lines changed

cmd/server/service.go

Lines changed: 166 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ import (
44
"context"
55
"errors"
66
"net/http"
7+
"os"
78

89
// Packages
910
server "github.com/mutablelogic/go-server"
10-
"github.com/mutablelogic/go-server/npm/helloworld"
11+
helloworld "github.com/mutablelogic/go-server/npm/helloworld"
1112
httpresponse "github.com/mutablelogic/go-server/pkg/httpresponse"
1213
provider "github.com/mutablelogic/go-server/pkg/provider"
13-
"github.com/mutablelogic/go-server/pkg/ref"
14+
ref "github.com/mutablelogic/go-server/pkg/ref"
1415
types "github.com/mutablelogic/go-server/pkg/types"
1516

1617
// Plugins
@@ -28,13 +29,174 @@ import (
2829

2930
type ServiceCommands struct {
3031
// Run ServiceRunCommand `cmd:"" group:"SERVICE" help:"Run the service"`
31-
Run ServiceRun2Command `cmd:"" group:"SERVICE" help:"Run the service with plugins"`
32+
Run ServiceRunCommand `cmd:"" group:"SERVICE" help:"Run the service with plugins"`
33+
Config ServiceConfigCommand `cmd:"" group:"SERVICE" help:"Output the plugin configuration"`
3234
}
3335

34-
type ServiceRun2Command struct {
36+
type ServiceRunCommand struct {
3537
Plugins []string `help:"Plugin paths"`
3638
}
3739

40+
type ServiceConfigCommand struct {
41+
ServiceRunCommand
42+
}
43+
44+
///////////////////////////////////////////////////////////////////////////////
45+
// PUBLIC METHODS
46+
47+
func (cmd *ServiceConfigCommand) Run(app server.Cmd) error {
48+
// Create a provider by loading the plugins
49+
provider, err := provider.NewWithPlugins(cmd.Plugins...)
50+
if err != nil {
51+
return err
52+
}
53+
return provider.WriteConfig(os.Stdout)
54+
}
55+
56+
func (cmd *ServiceRunCommand) Run(app server.Cmd) error {
57+
// Create a provider by loading the plugins
58+
provider, err := provider.NewWithPlugins(cmd.Plugins...)
59+
if err != nil {
60+
return err
61+
}
62+
63+
// Set the configuration
64+
err = errors.Join(err, provider.Load("log", "main", func(ctx context.Context, label string, config server.Plugin) error {
65+
logger := config.(*logger.Config)
66+
logger.Debug = app.GetDebug() >= server.Debug
67+
return nil
68+
}))
69+
err = errors.Join(err, provider.Load("httprouter", "main", func(ctx context.Context, label string, config server.Plugin) error {
70+
httprouter := config.(*httprouter.Config)
71+
httprouter.Prefix = types.NormalisePath(app.GetEndpoint().Path)
72+
httprouter.Origin = "*"
73+
httprouter.Middleware = []string{"log.main"}
74+
return nil
75+
}))
76+
err = errors.Join(err, provider.Load("httpserver", "main", func(ctx context.Context, label string, config server.Plugin) error {
77+
httpserver := config.(*httpserver.Config)
78+
httpserver.Listen = app.GetEndpoint()
79+
80+
// Set router
81+
if router, ok := provider.Task(ctx, "httprouter.main").(http.Handler); !ok || router == nil {
82+
return httpresponse.ErrInternalError.With("Invalid router")
83+
} else {
84+
httpserver.Router = router
85+
}
86+
87+
// Return success
88+
return nil
89+
}))
90+
err = errors.Join(err, provider.Load("helloworld", "main", func(ctx context.Context, label string, config server.Plugin) error {
91+
helloworld := config.(*helloworld.Config)
92+
93+
// Set router
94+
if router, ok := provider.Task(ctx, "httprouter.main").(server.HTTPRouter); !ok || router == nil {
95+
return httpresponse.ErrInternalError.With("Invalid router")
96+
} else {
97+
helloworld.Router = router
98+
}
99+
100+
// Return success
101+
return nil
102+
}))
103+
err = errors.Join(err, provider.Load("pgpool", "main", func(ctx context.Context, label string, config server.Plugin) error {
104+
pgpool := config.(*pg.Config)
105+
106+
// Set router
107+
if router, ok := provider.Task(ctx, "httprouter.main").(server.HTTPRouter); !ok || router == nil {
108+
return httpresponse.ErrInternalError.With("Invalid router")
109+
} else {
110+
pgpool.Router = router
111+
}
112+
113+
// Set trace
114+
if app.GetDebug() == server.Trace {
115+
pgpool.Trace = func(ctx context.Context, query string, args any, err error) {
116+
if err != nil {
117+
ref.Log(ctx).With("args", args).Print(ctx, err, " ON ", query)
118+
} else {
119+
ref.Log(ctx).With("args", args).Debug(ctx, query)
120+
}
121+
}
122+
}
123+
124+
// Return success
125+
return nil
126+
}))
127+
err = errors.Join(err, provider.Load("auth", "main", func(ctx context.Context, label string, config server.Plugin) error {
128+
auth := config.(*auth.Config)
129+
130+
// Set the router
131+
if router, ok := ref.Provider(ctx).Task(ctx, "httprouter").(server.HTTPRouter); !ok || router == nil {
132+
return httpresponse.ErrInternalError.With("Invalid router")
133+
} else {
134+
auth.Router = router
135+
}
136+
137+
// Set the connection pool
138+
if pool, ok := ref.Provider(ctx).Task(ctx, "pgpool").(server.PG); !ok || pool == nil {
139+
return httpresponse.ErrInternalError.With("Invalid connection pool")
140+
} else {
141+
auth.Pool = pool
142+
}
143+
144+
// Return success
145+
return nil
146+
}))
147+
err = errors.Join(err, provider.Load("pgqueue", "main", func(ctx context.Context, label string, config server.Plugin) error {
148+
pgqueue := config.(*pgqueue.Config)
149+
150+
// Set the router
151+
if router, ok := ref.Provider(ctx).Task(ctx, "httprouter").(server.HTTPRouter); !ok || router == nil {
152+
return httpresponse.ErrInternalError.With("Invalid router")
153+
} else {
154+
pgqueue.Router = router
155+
}
156+
157+
// Set the connection pool
158+
if pool, ok := ref.Provider(ctx).Task(ctx, "pgpool").(server.PG); !ok || pool == nil {
159+
return httpresponse.ErrInternalError.With("Invalid connection pool")
160+
} else {
161+
pgqueue.Pool = pool
162+
}
163+
164+
return nil
165+
}))
166+
err = errors.Join(err, provider.Load("certmanager", "main", func(ctx context.Context, label string, config server.Plugin) error {
167+
certmanager := config.(*cert.Config)
168+
169+
// Set the router
170+
if router, ok := ref.Provider(ctx).Task(ctx, "httprouter").(server.HTTPRouter); !ok || router == nil {
171+
return httpresponse.ErrInternalError.With("Invalid router")
172+
} else {
173+
certmanager.Router = router
174+
}
175+
176+
// Set the connection pool
177+
if pool, ok := ref.Provider(ctx).Task(ctx, "pgpool").(server.PG); !ok || pool == nil {
178+
return httpresponse.ErrInternalError.With("Invalid connection pool")
179+
} else {
180+
certmanager.Pool = pool
181+
}
182+
183+
// Set the queue
184+
if queue, ok := ref.Provider(ctx).Task(ctx, "pgqueue").(server.PGQueue); !ok || queue == nil {
185+
return httpresponse.ErrInternalError.With("Invalid task queue")
186+
} else {
187+
certmanager.Queue = queue
188+
}
189+
190+
return nil
191+
}))
192+
if err != nil {
193+
return err
194+
}
195+
196+
// Run the provider
197+
return provider.Run(app.Context())
198+
}
199+
38200
/*
39201
type ServiceRunCommand struct {
40202
Router struct {
@@ -61,8 +223,6 @@ type ServiceRunCommand struct {
61223
}
62224
*/
63225

64-
///////////////////////////////////////////////////////////////////////////////
65-
// PUBLIC METHODS
66226
/*
67227
func (cmd *ServiceRunCommand) Run(app server.Cmd) error {
68228
// Set the server listener and router prefix
@@ -202,147 +362,3 @@ func (cmd *ServiceRunCommand) Run(app server.Cmd) error {
202362
return provider.Run(app.Context())
203363
}
204364
*/
205-
206-
func (cmd *ServiceRun2Command) Run(app server.Cmd) error {
207-
// Create a provider by loading the plugins
208-
provider, err := provider.NewWithPlugins(cmd.Plugins...)
209-
if err != nil {
210-
return err
211-
}
212-
213-
// Set the configuration
214-
err = errors.Join(err, provider.Load("log", "main", func(ctx context.Context, label string, config server.Plugin) error {
215-
logger := config.(*logger.Config)
216-
logger.Debug = app.GetDebug() >= server.Debug
217-
return nil
218-
}))
219-
err = errors.Join(err, provider.Load("httprouter", "main", func(ctx context.Context, label string, config server.Plugin) error {
220-
httprouter := config.(*httprouter.Config)
221-
httprouter.Prefix = types.NormalisePath(app.GetEndpoint().Path)
222-
httprouter.Origin = "*"
223-
httprouter.Middleware = []string{"log.main"}
224-
return nil
225-
}))
226-
err = errors.Join(err, provider.Load("httpserver", "main", func(ctx context.Context, label string, config server.Plugin) error {
227-
httpserver := config.(*httpserver.Config)
228-
httpserver.Listen = app.GetEndpoint()
229-
230-
// Set router
231-
if router, ok := provider.Task(ctx, "httprouter.main").(http.Handler); !ok || router == nil {
232-
return httpresponse.ErrInternalError.With("Invalid router")
233-
} else {
234-
httpserver.Router = router
235-
}
236-
237-
// Return success
238-
return nil
239-
}))
240-
err = errors.Join(err, provider.Load("helloworld", "main", func(ctx context.Context, label string, config server.Plugin) error {
241-
helloworld := config.(*helloworld.Config)
242-
243-
// Set router
244-
if router, ok := provider.Task(ctx, "httprouter.main").(server.HTTPRouter); !ok || router == nil {
245-
return httpresponse.ErrInternalError.With("Invalid router")
246-
} else {
247-
helloworld.Router = router
248-
}
249-
250-
// Return success
251-
return nil
252-
}))
253-
err = errors.Join(err, provider.Load("pgpool", "main", func(ctx context.Context, label string, config server.Plugin) error {
254-
pgpool := config.(*pg.Config)
255-
256-
// Set router
257-
if router, ok := provider.Task(ctx, "httprouter.main").(server.HTTPRouter); !ok || router == nil {
258-
return httpresponse.ErrInternalError.With("Invalid router")
259-
} else {
260-
pgpool.Router = router
261-
}
262-
263-
// Set trace
264-
if app.GetDebug() == server.Trace {
265-
pgpool.Trace = func(ctx context.Context, query string, args any, err error) {
266-
if err != nil {
267-
ref.Log(ctx).With("args", args).Print(ctx, err, " ON ", query)
268-
} else {
269-
ref.Log(ctx).With("args", args).Debug(ctx, query)
270-
}
271-
}
272-
}
273-
274-
// Return success
275-
return nil
276-
}))
277-
err = errors.Join(err, provider.Load("auth", "main", func(ctx context.Context, label string, config server.Plugin) error {
278-
auth := config.(*auth.Config)
279-
280-
// Set the router
281-
if router, ok := ref.Provider(ctx).Task(ctx, "httprouter").(server.HTTPRouter); !ok || router == nil {
282-
return httpresponse.ErrInternalError.With("Invalid router")
283-
} else {
284-
auth.Router = router
285-
}
286-
287-
// Set the connection pool
288-
if pool, ok := ref.Provider(ctx).Task(ctx, "pgpool").(server.PG); !ok || pool == nil {
289-
return httpresponse.ErrInternalError.With("Invalid connection pool")
290-
} else {
291-
auth.Pool = pool
292-
}
293-
294-
// Return success
295-
return nil
296-
}))
297-
err = errors.Join(err, provider.Load("pgqueue", "main", func(ctx context.Context, label string, config server.Plugin) error {
298-
pgqueue := config.(*pgqueue.Config)
299-
300-
// Set the router
301-
if router, ok := ref.Provider(ctx).Task(ctx, "httprouter").(server.HTTPRouter); !ok || router == nil {
302-
return httpresponse.ErrInternalError.With("Invalid router")
303-
} else {
304-
pgqueue.Router = router
305-
}
306-
307-
// Set the connection pool
308-
if pool, ok := ref.Provider(ctx).Task(ctx, "pgpool").(server.PG); !ok || pool == nil {
309-
return httpresponse.ErrInternalError.With("Invalid connection pool")
310-
} else {
311-
pgqueue.Pool = pool
312-
}
313-
314-
return nil
315-
}))
316-
err = errors.Join(err, provider.Load("certmanager", "main", func(ctx context.Context, label string, config server.Plugin) error {
317-
certmanager := config.(*cert.Config)
318-
319-
// Set the router
320-
if router, ok := ref.Provider(ctx).Task(ctx, "httprouter").(server.HTTPRouter); !ok || router == nil {
321-
return httpresponse.ErrInternalError.With("Invalid router")
322-
} else {
323-
certmanager.Router = router
324-
}
325-
326-
// Set the connection pool
327-
if pool, ok := ref.Provider(ctx).Task(ctx, "pgpool").(server.PG); !ok || pool == nil {
328-
return httpresponse.ErrInternalError.With("Invalid connection pool")
329-
} else {
330-
certmanager.Pool = pool
331-
}
332-
333-
// Set the queue
334-
if queue, ok := ref.Provider(ctx).Task(ctx, "pgqueue").(server.PGQueue); !ok || queue == nil {
335-
return httpresponse.ErrInternalError.With("Invalid task queue")
336-
} else {
337-
certmanager.Queue = queue
338-
}
339-
340-
return nil
341-
}))
342-
if err != nil {
343-
return err
344-
}
345-
346-
// Run the provider
347-
return provider.Run(app.Context())
348-
}

0 commit comments

Comments
 (0)