MCPcopy
hub / github.com/owasp-amass/amass / NewEngine

Function NewEngine

engine/engine.go:32–84  ·  view source on GitHub ↗
(l *slog.Logger)

Source from the content-addressed store, hash-verified

30}
31
32func NewEngine(l *slog.Logger) (*Engine, error) {
33 go func() {
34 _ = http.ListenAndServe("127.0.0.1:6060", nil)
35 }()
36
37 if l == nil {
38 l = slog.New(slog.NewTextHandler(os.Stdout, nil))
39 }
40
41 reg := registry.NewRegistry(l)
42 mgr := sessions.NewManager(l, reg)
43 if mgr == nil {
44 return nil, errors.New("failed to create the session manager")
45 }
46
47 dis := dispatcher.NewDispatcher(l, reg, mgr)
48 if err := plugins.LoadAndStartPlugins(reg); err != nil {
49 return nil, err
50 }
51
52 srv, err := server.NewServer(l, dis, mgr)
53 if err != nil || srv == nil {
54 dis.Shutdown()
55 mgr.Shutdown()
56 return nil, errors.New("failed to create the API server")
57 }
58
59 ch := make(chan error, 1)
60 go func(errch chan error) { errch <- srv.Start() }(ch)
61
62 t := time.NewTimer(3 * time.Second)
63 defer t.Stop()
64
65 select {
66 case err := <-ch:
67 if err != nil {
68 _ = srv.Shutdown()
69 dis.Shutdown()
70 mgr.Shutdown()
71 return nil, err
72 }
73 case <-t.C:
74 // If the server does not return an error within 3 seconds, we assume it started successfully
75 }
76
77 return &Engine{
78 Log: l,
79 Dispatcher: dis,
80 Registry: reg,
81 Manager: mgr,
82 Server: srv,
83 }, nil
84}
85
86func (e *Engine) Shutdown() {
87 _ = e.Server.Shutdown()

Callers 1

CLIWorkflowFunction · 0.92

Calls 9

ShutdownMethod · 0.95
StartMethod · 0.95
ShutdownMethod · 0.95
NewRegistryFunction · 0.92
NewManagerFunction · 0.92
NewDispatcherFunction · 0.92
LoadAndStartPluginsFunction · 0.92
NewServerFunction · 0.92
StopMethod · 0.65

Tested by

no test coverage detected