Skip to content

Instantly share code, notes, and snippets.

@tedsuo
Created March 5, 2016 01:03
Show Gist options
  • Select an option

  • Save tedsuo/d2a1fa85cbebb5fc2709 to your computer and use it in GitHub Desktop.

Select an option

Save tedsuo/d2a1fa85cbebb5fc2709 to your computer and use it in GitHub Desktop.
ifrit.Exec
package ifrit
import (
"os"
"os/signal"
)
const SIGNAL_BUFFER_SIZE = 1024
func Exec(logger Logger, runner Runner, signalTypes ...os.Signal) {
logger.Info("starting")
defer logger.Info("complete")
signals := make(chan os.Signal, SIGNAL_BUFFER_SIZE)
signal.Notify(signals, signalTypes...)
ready := make(chan struct{})
go func() {
<-ready
logger.Info("started")
}()
err := runner.Run(signals, ready)
if err != nil {
logger.Fatal("failed", err)
}
}
// Logger conforms to lager.Logger from github.com/pivotal-golang/lager/
// It is repeated here to avoid an import dependency.
type Logger interface {
Info(action string, data ...Data)
Fatal(action string, err error, data ...Data)
}
func NewNoopLager() Logger {
return NoopLager(nil)
}
type NoopLager nil
func (NoopLager) Info(action string, data ...Data) {}
func (NoopLager) Fatal(action string, data ...Data) {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment