daemon

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 15, 2019 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// Command launches the deamon subcommand.
	Command = &cobra.Command{
		Use:   "daemon",
		Short: "Start Shigoto service",
		Args:  cobra.NoArgs,
		RunE: func(c *cobra.Command, _ []string) (err error) {
			if cfg == "" {
				cfg, err = config.Lookup(config.Filenames...)
				if err != nil {
					if err == os.ErrNotExist {
						return errors.New("no configuration found from the default pathes")
					}
					return err
				}
			}

			konf := koanf.New(".")
			if err := konf.Load(file.Provider(cfg), toml.Parser()); err != nil {
				return err
			}

			log := logrus.New()
			log.SetFormatter(&prefixed.TextFormatter{
				DisableColors:   !konf.Bool("log.force_color"),
				ForceColors:     konf.Bool("log.force_color"),
				ForceFormatting: konf.Bool("log.force_formating"),
				FullTimestamp:   true,
				TimestampFormat: "2006-01-02 15:04:05",
			})
			pool := cron.New(logger.WrapLogrus(log))

			defer os.Remove(konf.String("socket"))
			go func() {
				err = socket.Listen(konf.String("socket"), func(event []byte) []byte {
					if bytes.Equal(event, socket.SignalReload) {
						log.Info("Reloading daemon")

						err := cron.Load(filepath.Join(konf.String("directory")), pool, logger.WrapLogrus(log))
						if err != nil {
							log.WithError(err).Error("Fail to reloading")
							return []byte(err.Error())
						}

						log.Info("Reloaded")
						return []byte("OK")
					}
					return []byte("Unsupported signal")
				})

				fmt.Println(err)
				os.Exit(1)
			}()

			err = cron.Load(filepath.Join(konf.String("directory")), pool, logger.WrapLogrus(log))
			if err != nil {
				return err
			}
			pool.Start()

			signals := make(chan os.Signal, 1)
			signal.Notify(signals, os.Interrupt, os.Kill)
			<-signals

			pool.Stop()
			return nil
		},
	}
)

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL