in options.go [206:264]
func (opts *options) handleFifos() (io.Writer, error) {
// these booleans are used to check whether or not the fifo queue or metrics
// fifo queue needs to be generated. If any which need to be generated, then
// we know we need to create a temporary directory. Otherwise, a temporary
// directory does not need to be created.
generateFifoFilename := false
generateMetricFifoFilename := false
var err error
var fifo io.WriteCloser
if len(opts.FcFifoLogFile) > 0 {
if len(opts.FcLogFifo) > 0 {
return nil, errConflictingLogOpts
}
generateFifoFilename = true
// if a fifo log file was specified via the CLI then we need to check if
// metric fifo was also specified. If not, we will then generate that fifo
if len(opts.FcMetricsFifo) == 0 {
generateMetricFifoFilename = true
}
if fifo, err = opts.createFifoFileLogs(opts.FcFifoLogFile); err != nil {
return nil, errors.Wrap(err, errUnableToCreateFifoLogFile.Error())
}
opts.addCloser(func() error {
return fifo.Close()
})
} else if len(opts.FcLogFifo) > 0 || len(opts.FcMetricsFifo) > 0 {
// this checks to see if either one of the fifos was set. If at least one
// has been set we check to see if any of the others were not set. If one
// isn't set, we will generate the proper file path.
if len(opts.FcLogFifo) == 0 {
generateFifoFilename = true
}
if len(opts.FcMetricsFifo) == 0 {
generateMetricFifoFilename = true
}
}
if generateFifoFilename || generateMetricFifoFilename {
dir, err := ioutil.TempDir(os.TempDir(), "fcfifo")
if err != nil {
return fifo, fmt.Errorf("Fail to create temporary directory: %v", err)
}
opts.addCloser(func() error {
return os.RemoveAll(dir)
})
if generateFifoFilename {
opts.FcLogFifo = filepath.Join(dir, "fc_fifo")
}
if generateMetricFifoFilename {
opts.FcMetricsFifo = filepath.Join(dir, "fc_metrics_fifo")
}
}
return fifo, nil
}