1
0
mirror of https://github.com/woodpecker-ci/woodpecker.git synced 2024-12-18 08:26:45 +02:00
woodpecker/vendor/github.com/djherbis/fscache
2016-04-12 17:27:24 -07:00
..
distrib.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
fs.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
fscache.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
handler.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
layers.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
LICENSE backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
memfs.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
README.md backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
reaper.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
server.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00
stream.go backport 0.5 queue packages 2016-04-12 17:27:24 -07:00

fscache

GoDoc Release Software License Build Status Coverage Status Go Report Card

Usage

Streaming File Cache for #golang

fscache allows multiple readers to read from a cache while its being written to. blog post

Using the Cache directly:

package main

import (
	"io"
	"log"
	"os"
	"time"

	"gopkg.in/djherbis/fscache.v0"
)

func main() {

	// create the cache, keys expire after 1 hour.
	c, err := fscache.New("./cache", 0755, time.Hour)
	if err != nil {
		log.Fatal(err.Error())
	}
	
	// wipe the cache when done
	defer c.Clean()

	// Get() and it's streams can be called concurrently but just for example:
	for i := 0; i < 3; i++ {
		r, w, err := c.Get("stream")
		if err != nil {
			log.Fatal(err.Error())
		}

		if w != nil { // a new stream, write to it.
			go func(){
				w.Write([]byte("hello world\n"))
				w.Close()
			}()
		}

		// the stream has started, read from it
		io.Copy(os.Stdout, r)
		r.Close()
	}
}

A Caching Middle-ware:

package main

import(
	"net/http"
	"time"

	"gopkg.in/djherbis/fscache.v0"
)

func main(){
	c, err := fscache.New("./cache", 0700, 0)
	if err != nil {
		log.Fatal(err.Error())
	}

	handler := func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "%v: %s", time.Now(), "hello world")
	}

	http.ListenAndServe(":8080", fscache.Handler(c, http.HandlerFunc(handler)))
}

Installation

go get gopkg.in/djherbis/fscache.v0