Add: support config single thread
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"api": {
|
||||
"database_name": "music.sqlite3",
|
||||
"single_thread": true,
|
||||
"addr": ":8080",
|
||||
"token": "!! config your very strong token here !!",
|
||||
"ffmpeg_threads": 1,
|
||||
|
||||
@@ -9,13 +9,13 @@ import (
|
||||
)
|
||||
|
||||
type API struct {
|
||||
Db *database.Database
|
||||
Server http.Server
|
||||
token string
|
||||
APIConfig APIConfig
|
||||
Tmpfs *tmpfs.Tmpfs
|
||||
store *sessions.CookieStore
|
||||
defaultSessionName string
|
||||
Db *database.Database
|
||||
Server http.Server
|
||||
token string
|
||||
APIConfig APIConfig
|
||||
Tmpfs *tmpfs.Tmpfs
|
||||
store *sessions.CookieStore
|
||||
defaultSessionName string
|
||||
}
|
||||
|
||||
func NewAPIConfig() APIConfig {
|
||||
@@ -25,6 +25,7 @@ func NewAPIConfig() APIConfig {
|
||||
|
||||
type APIConfig struct {
|
||||
DatabaseName string `json:"database_name"`
|
||||
SingleThread bool `json:"single_thread,default=true"`
|
||||
Addr string `json:"addr"`
|
||||
Token string `json:"token"`
|
||||
FfmpegThreads int64 `json:"ffmpeg_threads"`
|
||||
@@ -42,12 +43,12 @@ func NewAPI(config Config) (*API, error) {
|
||||
apiConfig := config.APIConfig
|
||||
tmpfsConfig := config.TmpfsConfig
|
||||
|
||||
db, err := database.NewDatabase(apiConfig.DatabaseName)
|
||||
db, err := database.NewDatabase(apiConfig.DatabaseName, apiConfig.SingleThread)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
store := sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY")))
|
||||
store := sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY")))
|
||||
|
||||
mux := http.NewServeMux()
|
||||
apiMux := http.NewServeMux()
|
||||
@@ -58,9 +59,9 @@ func NewAPI(config Config) (*API, error) {
|
||||
Addr: apiConfig.Addr,
|
||||
Handler: mux,
|
||||
},
|
||||
APIConfig: apiConfig,
|
||||
store: store,
|
||||
defaultSessionName: "msw-open-music",
|
||||
APIConfig: apiConfig,
|
||||
store: store,
|
||||
defaultSessionName: "msw-open-music",
|
||||
}
|
||||
api.Tmpfs = tmpfs.NewTmpfs(tmpfsConfig)
|
||||
|
||||
|
||||
@@ -10,10 +10,34 @@ import (
|
||||
type Database struct {
|
||||
sqlConn *sql.DB
|
||||
stmt *Stmt
|
||||
singleThreadLock *sync.Mutex
|
||||
singleThreadLock SingleThreadLock
|
||||
}
|
||||
|
||||
func NewDatabase(dbName string) (*Database, error) {
|
||||
func NewSingleThreadLock(enabled bool) SingleThreadLock {
|
||||
return SingleThreadLock{
|
||||
lock: sync.Mutex{},
|
||||
enabled: enabled,
|
||||
}
|
||||
}
|
||||
|
||||
type SingleThreadLock struct {
|
||||
lock sync.Mutex
|
||||
enabled bool
|
||||
}
|
||||
|
||||
func (stl *SingleThreadLock) Lock() {
|
||||
if stl.enabled {
|
||||
stl.lock.Lock()
|
||||
}
|
||||
}
|
||||
|
||||
func (stl *SingleThreadLock) Unlock() {
|
||||
if stl.enabled {
|
||||
stl.lock.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
func NewDatabase(dbName string, singleThread bool) (*Database, error) {
|
||||
var err error
|
||||
|
||||
// open database
|
||||
@@ -32,7 +56,7 @@ func NewDatabase(dbName string) (*Database, error) {
|
||||
database := &Database{
|
||||
sqlConn: sqlConn,
|
||||
stmt: stmt,
|
||||
singleThreadLock: &sync.Mutex{},
|
||||
singleThreadLock: NewSingleThreadLock(singleThread),
|
||||
}
|
||||
|
||||
return database, nil
|
||||
|
||||
Reference in New Issue
Block a user