Skip to content

Streams given file data into any buffered writer. Uses fsnotify system for new data detection in files.

License

Notifications You must be signed in to change notification settings

badoo/file-streamer

Repository files navigation

FileStreamer

Streams given file data into any buffered writer. Uses fsNotify for new data detection in files.

The most fresh documentation can be found on GoDoc

Concepts

The library consists of 2 main instances:

Listener:

listener, err := file_streamer.NewListener(<file to watch>, <buffer to write data to>)

Streamer:

streamer := file_streamer.New(<logger>)
err := streamer.Start()

Streamer is a heart of package. In most cases you don't need to create more than one Streamer in your application.

Listener represents a Streamer 'subscription' for data streaming, it binds file to be streamed and buffered writer to be used as a file data receiver.

Examples

The minimal working example (and most trivial I can imagine) is:

package main

import (
	"bufio"
	"github.com/badoo/file-streamer"
	"io/ioutil"
	"log"
	"os"
)

func main() {
	nullLogger := log.New(ioutil.Discard, "", 0)

	streamer := file_streamer.New(nullLogger)
	err := streamer.Start()
	if err != nil {
		log.Fatalln(err)
	}

	targetFile := os.Args[1]
	readFrom, err := os.Open(targetFile)
	if err != nil {
		log.Fatalln(err)
	}

	logTo := bufio.NewWriter(os.Stdout)

	listener := file_streamer.NewListener(readFrom, logTo)
	streamer.StreamTo(listener, 0)
}

It provides similar functionality to GNU tail -f command, but with streaming start from the beginning of the file.

You can find more examples in 'examples/' directory of the package.

About

Streams given file data into any buffered writer. Uses fsnotify system for new data detection in files.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages