// setup configures a new Git service routine. func setup(c *caddy.Controller) error { git, err := parse(c) if err != nil { return err } // repos configured with webhooks var hookRepos []*Repo // functions to execute at startup var startupFuncs []func() error // loop through all repos and and start monitoring for i := range git { repo := git.Repo(i) // If a HookUrl is set, we switch to event based pulling. // Install the url handler if repo.Hook.URL != "" { hookRepos = append(hookRepos, repo) startupFuncs = append(startupFuncs, func() error { return repo.Pull() }) } else { startupFuncs = append(startupFuncs, func() error { // Start service routine in background Start(repo) // Do a pull right away to return error return repo.Pull() }) } } // ensure the functions are executed once per server block // for cases like server1.com, server2.com { ... } c.OncePerServerBlock(func() error { for i := range startupFuncs { c.OnStartup(startupFuncs[i]) } return nil }) // if there are repo(s) with webhook // return handler if len(hookRepos) > 0 { webhook := &WebHook{Repos: hookRepos} httpserver.GetConfig(c).AddMiddleware(func(next httpserver.Handler) httpserver.Handler { webhook.Next = next return webhook }) } return nil }
// setup sets up the logging middleware. func setup(c *caddy.Controller) error { rules, err := logParse(c) if err != nil { return err } // Open the log files for writing when the server starts c.OnStartup(func() error { for i := 0; i < len(rules); i++ { var err error var writer io.Writer if rules[i].OutputFile == "stdout" { writer = os.Stdout } else if rules[i].OutputFile == "stderr" { writer = os.Stderr } else if rules[i].OutputFile == "syslog" { writer, err = gsyslog.NewLogger(gsyslog.LOG_INFO, "LOCAL0", "caddy") if err != nil { return err } } else { var file *os.File file, err = os.OpenFile(rules[i].OutputFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) if err != nil { return err } if rules[i].Roller != nil { file.Close() rules[i].Roller.Filename = rules[i].OutputFile writer = rules[i].Roller.GetLogWriter() } else { rules[i].file = file writer = file } } rules[i].Log = log.New(writer, "", 0) } return nil }) // When server stops, close any open log files c.OnShutdown(func() error { for _, rule := range rules { if rule.file != nil { rule.file.Close() } } return nil }) httpserver.GetConfig(c).AddMiddleware(func(next httpserver.Handler) httpserver.Handler { return Logger{Next: next, Rules: rules, ErrorFunc: httpserver.DefaultErrorFunc} }) return nil }
// setup configures a new errors middleware instance. func setup(c *caddy.Controller) error { handler, err := errorsParse(c) if err != nil { return err } // Open the log file for writing when the server starts c.OnStartup(func() error { var err error var writer io.Writer switch handler.LogFile { case "visible": handler.Debug = true case "stdout": writer = os.Stdout case "stderr": writer = os.Stderr case "syslog": writer, err = gsyslog.NewLogger(gsyslog.LOG_ERR, "LOCAL0", "caddy") if err != nil { return err } default: if handler.LogFile == "" { writer = os.Stderr // default break } var file *os.File file, err = os.OpenFile(handler.LogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) if err != nil { return err } if handler.LogRoller != nil { file.Close() handler.LogRoller.Filename = handler.LogFile writer = handler.LogRoller.GetLogWriter() } else { writer = file } } handler.Log = log.New(writer, "", 0) return nil }) httpserver.GetConfig(c).AddMiddleware(func(next httpserver.Handler) httpserver.Handler { handler.Next = next return handler }) return nil }