58 lines
988 B
Go
58 lines
988 B
Go
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
|
|
}
|