Skip to content
Snippets Groups Projects
Commit 15089969 authored by Christian Pointner's avatar Christian Pointner
Browse files

config file parsing works now

parent d60369e0
No related branches found
No related tags found
No related merge requests found
......@@ -81,9 +81,15 @@
revision = "21b0b93e8253d575d9185974835423f98d30158d"
version = "v1.2.0"
[[projects]]
name = "gopkg.in/yaml.v2"
packages = ["."]
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
version = "v2.2.1"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "4fda8578e73904c71db697a7016114c7246a4da313f5d0cff8e0a2ebfaa1ce20"
inputs-digest = "67d5ad23c07df65fdb16dab8314dc8289aefdc6d2b8c9b9d395a545e6e1c68e3"
solver-name = "gps-cdcl"
solver-version = 1
//
// tank
//
// Import and Playlist Daemon for autoradio project
//
//
// Copyright (C) 2017-2018 Christian Pointner <equinox@helsinki.at>
//
// This file is part of tank.
//
// tank is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// tank is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with tank. If not, see <http://www.gnu.org/licenses/>.
//
package main
import (
"errors"
"os"
"gitlab.servus.at/autoradio/tank/importer"
"gitlab.servus.at/autoradio/tank/store"
"gopkg.in/yaml.v2"
)
type Config struct {
Store store.Config `json:"store" yaml:"store" toml:"store"`
Importer importer.Config `json:"importer" yaml:"importer" toml:"importer"`
}
func ReadConfig(configfile string) (conf *Config, err error) {
var f *os.File
if f, err = os.Open(configfile); err != nil {
err = errors.New("error opening config file(" + configfile + "): " + err.Error())
return
}
defer f.Close()
conf = &Config{}
decoder := yaml.NewDecoder(f)
decoder.SetStrict(true)
if err = decoder.Decode(conf); err != nil {
err = errors.New("error opening config file(" + configfile + "): " + err.Error())
return
}
infoLog.Printf("successfully read config file (%s)", configfile)
return
}
......@@ -59,37 +59,33 @@ var (
dbgLog = getDbgLog("[ DBG ] ")
)
func cmdInit(c *cli.Context) error {
// TODO: implement this
return cli.NewExitError(fmt.Sprintf("not yet implemented"), -2)
}
func openStoreAndImporter(c *cli.Context) (st *store.Store, im *importer.Importer, err error) {
// TODO: hardcoded values
sCfg := &store.Config{}
sCfg.BasePath = "/tmp"
sCfg.DB.Type = "mysql"
sCfg.DB.Connection = "tank:aura@tcp(127.0.0.1:3306)/tank?charset=utf8&parseTime=True&loc=Local"
if st, err = store.NewStore(sCfg); err != nil {
func openStoreAndImporter(conf *Config) (st *store.Store, im *importer.Importer, err error) {
if st, err = store.NewStore(conf.Store); err != nil {
return nil, nil, err
}
infoLog.Printf("successfully opend new store (database revision: %s)", st.GetRevision())
// TODO: hardcoded values
iCfg := &importer.Config{}
iCfg.TempPath = "/tmp"
iCfg.Workers = 0
if im, err = importer.NewImporter(iCfg, st, infoLog, errLog, dbgLog); err != nil {
if im, err = importer.NewImporter(conf.Importer, st, infoLog, errLog, dbgLog); err != nil {
return nil, nil, err
}
return
}
func cmdInit(c *cli.Context) error {
// TODO: implement this
return cli.NewExitError(fmt.Sprintf("not yet implemented"), -2)
}
func cmdRun(c *cli.Context) error {
infoLog.Println("starting...")
st, im, err := openStoreAndImporter(c)
conf, err := ReadConfig(c.GlobalString("config"))
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
st, im, err := openStoreAndImporter(conf)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
......@@ -108,7 +104,12 @@ func cmdRun(c *cli.Context) error {
func cmdRunSa(c *cli.Context) error {
infoLog.Println("starting (socket activated) ...")
st, im, err := openStoreAndImporter(c)
conf, err := ReadConfig(c.GlobalString("config"))
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
st, im, err := openStoreAndImporter(conf)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
......
store:
path: "/srv/data"
dbpath: "/var/lib/aura/tank-db.bolt
path: "/run/user/1000/aura-tank"
db:
type: "mysql"
connection: "tank:aura@tcp(127.0.0.1:3306)/tank?charset=utf8&parseTime=True&loc=Local"
importer:
temp-path: "/tmp"
workers: 10
......@@ -159,7 +159,7 @@ func (im *Importer) runWorker(idx int) {
}
}
func NewImporter(conf *Config, st *store.Store, infoLog, errLog, dbgLog *log.Logger) (im *Importer, err error) {
func NewImporter(conf Config, st *store.Store, infoLog, errLog, dbgLog *log.Logger) (im *Importer, err error) {
if infoLog == nil {
infoLog = log.New(ioutil.Discard, "", 0)
}
......@@ -185,7 +185,7 @@ func NewImporter(conf *Config, st *store.Store, infoLog, errLog, dbgLog *log.Log
}(i)
}
if im.sessions, err = newSessionInventory(conf, st, infoLog, errLog, dbgLog, im.workerChan); err != nil {
if im.sessions, err = newSessionInventory(&conf, st, infoLog, errLog, dbgLog, im.workerChan); err != nil {
return
}
......
......@@ -59,7 +59,7 @@ func openDB(cfg DBConfig) (db *gorm.DB, err error) {
return
}
func NewStore(cfg *Config) (*Store, error) {
func NewStore(cfg Config) (*Store, error) {
if _, err := os.Stat(cfg.BasePath); err != nil {
return nil, errors.New("cant't open store base path: " + err.Error())
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment