package cache import ( "net/url" "strconv" "time" "forge.cadoles.com/arcad/edge/pkg/storage" "forge.cadoles.com/arcad/edge/pkg/storage/driver" "github.com/pkg/errors" ) func init() { driver.RegisterBlobStoreFactory("cache", blobStoreFactory) } func blobStoreFactory(dsn *url.URL) (storage.BlobStore, error) { query := dsn.Query() rawCacheSize := query.Get("cacheSize") if rawCacheSize == "" { rawCacheSize = "128" } cacheSize, err := strconv.ParseInt(rawCacheSize, 10, 32) if err != nil { return nil, errors.Wrap(err, "could not parse cacheSize url parameter") } query.Del("cacheSize") rawCacheTTL := query.Get("cacheTTL") if rawCacheTTL == "" { rawCacheTTL = "10m" } cacheTTL, err := time.ParseDuration(rawCacheTTL) if err != nil { return nil, errors.Wrap(err, "could not parse cacheTTL url parameter") } query.Del("cacheTTL") rawDriver := query.Get("driver") if rawDriver == "" { return nil, errors.New("missing required url parameter 'driver'") } query.Del("driver") url := &url.URL{ Scheme: rawDriver, Host: dsn.Host, Path: dsn.Path, RawQuery: query.Encode(), } store, err := driver.NewBlobStore(url.String()) if err != nil { return nil, errors.WithStack(err) } return NewBlobStore(store, int(cacheSize), cacheTTL), nil }