65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
|
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
|
||
|
}
|