go-pkg/cmd/mercury/app.mercury.go

97 lines
1.8 KiB
Go
Raw Normal View History

2024-01-22 16:00:58 -07:00
package main
import (
"context"
"fmt"
"os"
"strings"
_ "github.com/lib/pq"
"go.sour.is/pkg/lg"
"go.sour.is/pkg/mercury/app"
"go.sour.is/pkg/mercury/http"
"go.sour.is/pkg/mercury/mqtt"
"go.sour.is/pkg/mercury/pg"
"go.sour.is/pkg/service"
"go.sour.is/pkg/xdg"
"go.sour.is/pkg/mercury"
)
var baseConfig = `
# mercury.source [handler] [name]
#@mercury.source.http-notify.default
#match :0 *
#endpoint :http://example.com/webhook
@mercury.source.http-notify.default
#@mercury.source.mqtt-notify.default
#match :0 *
#endpoint :mqtt://example.com/topic
@mercury.source.http-notify.default
@mercury.source.mercury-default.default
match :1 mercury
@mercury.source.mercury-environ.default
match :1 mercury.host,mercury.environ,mercury.priority,mercury.source.*
`
var _ = apps.Register(50, func(ctx context.Context, svc *service.Harness) error {
ctx, span := lg.Span(ctx)
defer span.End()
conf, err := readConfig(ctx)
if err != nil {
return err
}
app.Register(conf)
http.Register()
mqtt.Register()
pg.Register()
err = mercury.Registry.Configure(conf)
if err != nil {
return err
}
span.AddEvent("Enable Mercury")
svc.Add(mercury.NewHTTP())
return nil
})
func readConfig(ctx context.Context) (mercury.SpaceMap, error) {
_, span := lg.Span(ctx)
defer span.End()
conf, err := mercury.ParseText(strings.NewReader(baseConfig))
if err != nil {
return nil, err
}
wd, err := os.Getwd()
if err != err {
return nil, err
}
for _, fn := range xdg.Find(wd+":"+xdg.EnvConfigDirs, "config.mercury") {
span.AddEvent(fmt.Sprint("config:", fn))
fd, err := os.Open(fn)
if err != nil {
return nil, err
}
defer fd.Close()
c, err := mercury.ParseText(fd)
if err != nil {
return nil, err
}
conf.MergeMap(c)
}
return conf, nil
}