remove cache, it's not useful in practice
This commit is contained in:
@ -83,7 +83,9 @@ func buildBootImgQemuConvert(out io.Writer, ctx *renderContext, format string) (
|
|||||||
return
|
return
|
||||||
}()
|
}()
|
||||||
|
|
||||||
defer os.Remove(imgPath)
|
if imgPath != "" {
|
||||||
|
defer os.Remove(imgPath)
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -1,77 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"log"
|
|
||||||
"sort"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
cacheCleanDelay = flag.Duration("cache-clean-delay", 10*time.Minute, "Time between cache cleanups")
|
|
||||||
)
|
|
||||||
|
|
||||||
func casCleaner() {
|
|
||||||
for range time.Tick(*cacheCleanDelay) {
|
|
||||||
if !wPublicState.Get().Store.Open {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
err := cleanCAS()
|
|
||||||
if err != nil {
|
|
||||||
log.Print("warn: couldn't clean cache: ", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanCAS() error {
|
|
||||||
cfg, err := readConfig()
|
|
||||||
if err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
activeTags := make([]string, len(cfg.Hosts))
|
|
||||||
|
|
||||||
for i, host := range cfg.Hosts {
|
|
||||||
// FIXME ugly hack, same as in dir2config
|
|
||||||
cfg, err := readConfig()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx, err := newRenderContext(host, cfg)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
tag, err := ctx.Tag()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
activeTags[i] = tag
|
|
||||||
}
|
|
||||||
|
|
||||||
tags, err := casStore.Tags()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Strings(activeTags)
|
|
||||||
|
|
||||||
for _, tag := range tags {
|
|
||||||
idx := sort.SearchStrings(activeTags, tag)
|
|
||||||
|
|
||||||
if idx < len(activeTags) && activeTags[idx] == tag {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// tag is not present in active tags
|
|
||||||
log.Print("cache cleaner: removing tag ", tag)
|
|
||||||
if err := casStore.Remove(tag); err != nil {
|
|
||||||
log.Printf("cache cleaner: failed to remove tag %s: %v", tag, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
@ -5,14 +5,11 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
restful "github.com/emicklei/go-restful"
|
restful "github.com/emicklei/go-restful"
|
||||||
swaggerui "github.com/mcluseau/go-swagger-ui"
|
swaggerui "github.com/mcluseau/go-swagger-ui"
|
||||||
"m.cluseau.fr/go/watchable/streamsse"
|
"m.cluseau.fr/go/watchable/streamsse"
|
||||||
|
|
||||||
"novit.tech/direktil/pkg/cas"
|
|
||||||
|
|
||||||
dlshtml "novit.tech/direktil/local-server/html"
|
dlshtml "novit.tech/direktil/local-server/html"
|
||||||
"novit.tech/direktil/local-server/pkg/apiutils"
|
"novit.tech/direktil/local-server/pkg/apiutils"
|
||||||
)
|
)
|
||||||
@ -30,8 +27,6 @@ var (
|
|||||||
keyFile = flag.String("tls-key", etcDir+"/server.key", "Server TLS key")
|
keyFile = flag.String("tls-key", etcDir+"/server.key", "Server TLS key")
|
||||||
|
|
||||||
autoUnlock = flag.String("auto-unlock", "", "Auto-unlock store (testing only!) env: DLS_AUTO_UNLOCK")
|
autoUnlock = flag.String("auto-unlock", "", "Auto-unlock store (testing only!) env: DLS_AUTO_UNLOCK")
|
||||||
|
|
||||||
casStore cas.Store
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -68,9 +63,6 @@ func main() {
|
|||||||
os.Setenv("DLS_AUTO_UNLOCK", "")
|
os.Setenv("DLS_AUTO_UNLOCK", "")
|
||||||
}
|
}
|
||||||
|
|
||||||
casStore = cas.NewDir(filepath.Join(*dataDir, "cache"))
|
|
||||||
go casCleaner()
|
|
||||||
|
|
||||||
apiutils.Setup(func() {
|
apiutils.Setup(func() {
|
||||||
registerWS(restful.DefaultContainer)
|
registerWS(restful.DefaultContainer)
|
||||||
})
|
})
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"text/template"
|
"text/template"
|
||||||
@ -35,12 +36,7 @@ type renderContext struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func renderCtx(w http.ResponseWriter, r *http.Request, ctx *renderContext, what string,
|
func renderCtx(w http.ResponseWriter, r *http.Request, ctx *renderContext, what string,
|
||||||
create func(out io.Writer, ctx *renderContext) error) error {
|
create func(out io.Writer, ctx *renderContext) error) (err error) {
|
||||||
|
|
||||||
tag, err := ctx.Tag()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx.CmdLine = r.URL.Query().Get(cmdlineParam.Data().Name)
|
ctx.CmdLine = r.URL.Query().Get(cmdlineParam.Data().Name)
|
||||||
|
|
||||||
@ -49,19 +45,26 @@ func renderCtx(w http.ResponseWriter, r *http.Request, ctx *renderContext, what
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get it or create it
|
// get it or create it
|
||||||
content, meta, err := casStore.GetOrCreate(tag, what, func(out io.Writer) error {
|
outfile, err := os.CreateTemp("/tmp", "dls."+what+".")
|
||||||
log.Printf("building %s for %q", what, ctx.Host.Name)
|
|
||||||
return create(out, ctx)
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer os.Remove(outfile.Name())
|
||||||
|
|
||||||
|
log.Printf("building %s for %q", what, ctx.Host.Name)
|
||||||
|
err = create(outfile, ctx)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// serve it
|
// serve it
|
||||||
log.Printf("sending %s for %q", what, ctx.Host.Name)
|
log.Printf("sending %s for %q", what, ctx.Host.Name)
|
||||||
http.ServeContent(w, r, what, meta.ModTime(), content)
|
|
||||||
return nil
|
outfile.Seek(0, io.SeekStart)
|
||||||
|
io.Copy(w, outfile)
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func sslConfigFromLocalConfig(cfg *localconfig.Config) (sslCfg *cfsslconfig.Config, err error) {
|
func sslConfigFromLocalConfig(cfg *localconfig.Config) (sslCfg *cfsslconfig.Config, err error) {
|
||||||
|
@ -172,7 +172,6 @@ func renderHost(w http.ResponseWriter, r *http.Request, what string, host *local
|
|||||||
switch what {
|
switch what {
|
||||||
case "config":
|
case "config":
|
||||||
err = renderConfig(w, r, ctx, false)
|
err = renderConfig(w, r, ctx, false)
|
||||||
|
|
||||||
case "config.json":
|
case "config.json":
|
||||||
err = renderConfig(w, r, ctx, true)
|
err = renderConfig(w, r, ctx, true)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user