mirror of
https://github.com/crazy-max/diun.git
synced 2025-12-21 13:23:09 +01:00
This commit is contained in:
@@ -75,14 +75,14 @@ func main() {
|
||||
}()
|
||||
|
||||
// Load configuration
|
||||
cfg, err := config.Load(cli.Cfgfile)
|
||||
cfg, err := config.Load(cli)
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).Msg("Cannot load configuration")
|
||||
}
|
||||
log.Debug().Msg(cfg.String())
|
||||
|
||||
// Init
|
||||
if diun, err = app.New(meta, cfg, location); err != nil {
|
||||
if diun, err = app.New(meta, cli, cfg, location); err != nil {
|
||||
log.Fatal().Err(err).Msgf("Cannot initialize %s", meta.Name)
|
||||
}
|
||||
|
||||
|
||||
@@ -11,8 +11,7 @@ $ diun --config ./diun.yml --test-notif
|
||||
Or within a container:
|
||||
|
||||
```shell
|
||||
$ docker run --rm -it -v "$(pwd)/diun.yml:/diun.yml" \
|
||||
crazymax/diun:latest --config /diun.yml --test-notif
|
||||
$ docker-compose exec diun --test-notif
|
||||
```
|
||||
|
||||
## field docker|swarm uses unsupported type: invalid
|
||||
|
||||
2
go.sum
2
go.sum
@@ -65,8 +65,6 @@ github.com/containers/ocicrypt v1.0.2/go.mod h1:nsOhbP19flrX6rE7ieGFvBlr7modwmNj
|
||||
github.com/containers/storage v1.20.2 h1:tw/uKRPDnmVrluIzer3dawTFG/bTJLP8IEUyHFhltYk=
|
||||
github.com/containers/storage v1.20.2/go.mod h1:oOB9Ie8OVPojvoaKWEGSEtHbXUAs+tSyr7RO7ZGteMc=
|
||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/crazy-max/gonfig v0.2.0 h1:xmhIS7rgd/JGAxGsVCp1dLVSEr15DOBQXvN5AvCkyhA=
|
||||
github.com/crazy-max/gonfig v0.2.0/go.mod h1:UNwOsugQKi1lY7sXRAYJNP5rftyUC5LeKyaly9Efh+c=
|
||||
github.com/crazy-max/gonfig v0.3.0 h1:/HFdLQjXSNhImgeQgD2eXhc5svX4PhUkGSbl4fJRp4s=
|
||||
github.com/crazy-max/gonfig v0.3.0/go.mod h1:7vmzltkoa1RHpGB5fTom0ebnqelHdd7fzhtXTi8sVoQ=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
||||
@@ -35,28 +35,30 @@ type Diun struct {
|
||||
}
|
||||
|
||||
// New creates new diun instance
|
||||
func New(meta model.Meta, cfg *config.Config, location *time.Location) (*Diun, error) {
|
||||
// DB client
|
||||
dbcli, err := db.New(*cfg.Db)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
func New(meta model.Meta, cli model.Cli, cfg *config.Config, location *time.Location) (*Diun, error) {
|
||||
var err error
|
||||
|
||||
// Notification client
|
||||
notifcli, err := notif.New(cfg.Notif, meta)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Diun{
|
||||
diun := &Diun{
|
||||
meta: meta,
|
||||
cfg: cfg,
|
||||
cron: cron.New(cron.WithLocation(location), cron.WithParser(cron.NewParser(
|
||||
cron.SecondOptional|cron.Minute|cron.Hour|cron.Dom|cron.Month|cron.Dow|cron.Descriptor),
|
||||
)),
|
||||
db: dbcli,
|
||||
notif: notifcli,
|
||||
}, nil
|
||||
}
|
||||
|
||||
diun.notif, err = notif.New(cfg.Notif, meta)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !cli.TestNotif {
|
||||
diun.db, err = db.New(*cfg.Db)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return diun, nil
|
||||
}
|
||||
|
||||
// Start starts diun
|
||||
@@ -147,8 +149,9 @@ func (di *Diun) Close() {
|
||||
func (di *Diun) TestNotif() {
|
||||
createdAt, _ := time.Parse("2006-01-02T15:04:05Z", "2020-03-26T12:23:56Z")
|
||||
image, _ := registry.ParseImage(registry.ParseImageOptions{
|
||||
Name: "crazymax/diun:latest",
|
||||
Name: "diun/testnotif:latest",
|
||||
})
|
||||
image.HubLink = ""
|
||||
|
||||
log.Info().Msg("Testing notification settings...")
|
||||
di.notif.Send(model.NotifEntry{
|
||||
@@ -156,7 +159,7 @@ func (di *Diun) TestNotif() {
|
||||
Provider: "file",
|
||||
Image: image,
|
||||
Manifest: registry.Manifest{
|
||||
Name: "docker.io/crazymax/diun",
|
||||
Name: "diun/testnotif",
|
||||
Tag: "latest",
|
||||
MIMEType: "application/vnd.docker.distribution.manifest.list.v2+json",
|
||||
Digest: "sha256:216e3ae7de4ca8b553eb11ef7abda00651e79e537e85c46108284e5e91673e01",
|
||||
@@ -172,7 +175,7 @@ func (di *Diun) TestNotif() {
|
||||
"org.label-schema.vcs-ref": "e13f097c",
|
||||
"org.label-schema.vcs-url": "https://github.com/crazy-max/diun",
|
||||
"org.label-schema.vendor": "CrazyMax",
|
||||
"org.label-schema.version": "2.6.1",
|
||||
"org.label-schema.version": "x.x.x",
|
||||
},
|
||||
Layers: []string{
|
||||
"sha256:aad63a9339440e7c3e1fff2b988991b9bfb81280042fa7f39a5e327023056819",
|
||||
|
||||
@@ -18,18 +18,18 @@ type Config struct {
|
||||
Watch *model.Watch `yaml:"watch,omitempty" json:"watch,omitempty"`
|
||||
Notif *model.Notif `yaml:"notif,omitempty" json:"notif,omitempty"`
|
||||
RegOpts model.RegOpts `yaml:"regopts,omitempty" json:"regopts,omitempty" validate:"unique=Name,dive"`
|
||||
Providers *model.Providers `yaml:"providers,omitempty" json:"providers,omitempty" validate:"required"`
|
||||
Providers *model.Providers `yaml:"providers,omitempty" json:"providers,omitempty"`
|
||||
}
|
||||
|
||||
// Load returns Config struct
|
||||
func Load(cfgfile string) (*Config, error) {
|
||||
func Load(cli model.Cli) (*Config, error) {
|
||||
cfg := Config{
|
||||
Db: (&model.Db{}).GetDefaults(),
|
||||
Watch: (&model.Watch{}).GetDefaults(),
|
||||
}
|
||||
|
||||
fileLoader := gonfig.NewFileLoader(gonfig.FileLoaderConfig{
|
||||
Filename: cfgfile,
|
||||
Filename: cli.Cfgfile,
|
||||
Finder: gonfig.Finder{
|
||||
BasePaths: []string{"/etc/diun/diun", "$XDG_CONFIG_HOME/diun", "$HOME/.config/diun", "./diun"},
|
||||
Extensions: []string{"yaml", "yml"},
|
||||
@@ -54,20 +54,28 @@ func Load(cfgfile string) (*Config, error) {
|
||||
log.Info().Msgf("Configuration loaded from %d environment variable(s)", len(envLoader.GetVars()))
|
||||
}
|
||||
|
||||
if err := cfg.validate(); err != nil {
|
||||
if err := cfg.validate(cli); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &cfg, nil
|
||||
}
|
||||
|
||||
func (cfg *Config) validate() error {
|
||||
func (cfg *Config) validate(cli model.Cli) error {
|
||||
if len(cfg.Db.Path) > 0 {
|
||||
if err := os.MkdirAll(path.Dir(cfg.Db.Path), os.ModePerm); err != nil {
|
||||
return errors.Wrap(err, "Cannot create database destination folder")
|
||||
}
|
||||
}
|
||||
|
||||
if cfg.Notif == nil && cli.TestNotif {
|
||||
return errors.New("At least one notifier is required")
|
||||
}
|
||||
|
||||
if cfg.Providers == nil && !cli.TestNotif {
|
||||
return errors.New("At least one provider is required")
|
||||
}
|
||||
|
||||
return validator.New().Struct(cfg)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
"github.com/crazy-max/diun/v4/internal/model"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/rs/zerolog/log"
|
||||
bolt "go.etcd.io/bbolt"
|
||||
)
|
||||
@@ -52,7 +52,7 @@ func New(cfg model.Db) (*Client, error) {
|
||||
log.Debug().Msgf("%d entries found in manifest bucket", stats.KeyN)
|
||||
return nil
|
||||
}); err != nil {
|
||||
return nil, fmt.Errorf("cannot count entries in manifest bucket, %v", err)
|
||||
return nil, errors.Wrap(err, "Cannot count entries in manifest bucket")
|
||||
}
|
||||
|
||||
c := &Client{
|
||||
|
||||
Reference in New Issue
Block a user