package shortify import ( "sync" "git.tijl.dev/tijl/shortify/pkg/generation" "github.com/hashicorp/golang-lru" bolt "go.etcd.io/bbolt" ) type Server struct { storage *Storage prefixManager *PrefixManager serverGen *generation.Generator cache *lru.Cache cacheLock sync.RWMutex dataFolder string logChan chan VisitLog } type Config struct { DataFolder string } func New(cfg Config) (*Server, error) { db, err := bolt.Open(cfg.DataFolder+"/database.db", 0600, nil) if err != nil { return nil, err } prefixManager, err := NewPrefixManager(db) if err != nil { return nil, err } storage, err := NewStorage(db) if err != nil { return nil, err } cache, _ := lru.New(10000) s := &Server{ dataFolder: cfg.DataFolder, storage: storage, cache: cache, serverGen: generation.NewGenerator(0), prefixManager: prefixManager, logChan: make(chan VisitLog, 1000), } go s.startLogging() return s, nil }