80 lines
2.6 KiB
Go
80 lines
2.6 KiB
Go
package dis
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/control"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/exporter"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/exporter/logger"
|
|
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/home"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/info"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/instances"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/meta"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/resolver"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/sql"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/ssh"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/static"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/triplestore"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/component/web"
|
|
"github.com/tkw1536/goprogram/lib/collection"
|
|
)
|
|
|
|
// register returns all components of the distillery
|
|
func (dis *Distillery) register(context component.PoolContext) []component.Component {
|
|
return collection.MapSlice([]initFunc{
|
|
auto[*web.Web],
|
|
|
|
auto[*ssh.SSH],
|
|
|
|
manual(func(ts *triplestore.Triplestore) {
|
|
ts.BaseURL = "http://" + dis.Upstream.Triplestore
|
|
ts.PollContext = dis.Context()
|
|
ts.PollInterval = time.Second
|
|
}),
|
|
manual(func(sql *sql.SQL) {
|
|
sql.ServerURL = dis.Upstream.SQL
|
|
sql.PollContext = dis.Context()
|
|
sql.PollInterval = time.Second
|
|
}),
|
|
|
|
auto[*instances.Instances],
|
|
auto[*meta.Meta],
|
|
|
|
// Snapshots
|
|
auto[*exporter.Exporter],
|
|
auto[*logger.Logger],
|
|
auto[*exporter.Config],
|
|
auto[*exporter.Bookkeeping],
|
|
auto[*exporter.Filesystem],
|
|
auto[*exporter.Pathbuilders],
|
|
|
|
// Control server
|
|
auto[*control.Control],
|
|
auto[*static.Static],
|
|
manual(func(home *home.Home) {
|
|
home.RefreshInterval = time.Minute
|
|
}),
|
|
manual(func(resolver *resolver.Resolver) {
|
|
resolver.RefreshInterval = time.Minute
|
|
}),
|
|
auto[*info.Info],
|
|
}, func(f initFunc) component.Component {
|
|
return f(dis, context)
|
|
})
|
|
}
|
|
|
|
type initFunc = func(dis *Distillery, context component.PoolContext) component.Component
|
|
|
|
// manual initializes a component from the provided distillery.
|
|
func manual[C component.Component](init func(component C)) initFunc {
|
|
return func(dis *Distillery, context component.PoolContext) component.Component {
|
|
return component.Make(context, dis.Still, init)
|
|
}
|
|
}
|
|
|
|
// use is like r, but does not provided additional initialization
|
|
func auto[C component.Component](dis *Distillery, context component.PoolContext) component.Component {
|
|
return component.Make[C](context, dis.Still, nil)
|
|
}
|