Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions cmd/database/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ import (

// Config is main application configuration structure.
type config struct {
Listen string `env:"LISTEN" envDefault:"localhost:9000"`
Timeout time.Duration `env:"TIMEOUT" envDefault:"10ms"`
LogLevel string `env:"LOG_LEVEL" envDefault:"info"`
LogFmt string `env:"LOG_FMT" envDefault:"console"`
DbFile string `env:"DB_FILE" envDefault:"./tmp/nutsdb"`
Listen string `env:"LISTEN" envDefault:"localhost:9000"`
Timeout time.Duration `env:"TIMEOUT" envDefault:"10ms"`
MergeTimeout time.Duration `env:"TIMEOUT" envDefault:"1h"`
LogLevel string `env:"LOG_LEVEL" envDefault:"info"`
LogFmt string `env:"LOG_FMT" envDefault:"console"`
DbFile string `env:"DB_FILE" envDefault:"./tmp/nutsdb"`
}

func load() (*config, error) {
Expand Down
44 changes: 23 additions & 21 deletions cmd/database/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,33 +9,14 @@ import (
"github.com/xujiajun/nutsdb"
"os"
"strings"
"time"

"github.com/google/wire"
"github.com/polyse/database/internal/collection"

"github.com/rs/zerolog/log"
"github.com/xlab/closer"
)

var (
procSetter = wire.NewSet(
initDbConfig,
initConnection,
initTokenizer,
initFilters,
collection.NewSimpleProcessor,
)

dbSetter = wire.NewSet(
procSetter,
wire.Bind(
new(collection.Processor),
new(*collection.SimpleProcessor),
),
collection.NewManagerWithProc,
)
)

func main() {

defer closer.Close()
Expand Down Expand Up @@ -77,6 +58,10 @@ func main() {
log.Debug().Msg("starting db")
var connCLoser func()
a.Manager, connCLoser, err = initProcessorManager(cfg, "default")
if err != nil {
log.Err(err).Msg("error while init wire manager")
return
}
closer.Bind(connCLoser)

log.Debug().Msg("starting web application")
Expand Down Expand Up @@ -105,7 +90,24 @@ func initConnection(cfg collection.Config) (*nutsdb.DB, func(), error) {
return nil, nil, err
}
log.Info().Msg("connection opened")

ctx, cancel := context.WithCancel(context.Background())

go func(ctx context.Context, db *nutsdb.DB) {
for {
select {
case <-time.After(cfg.MergeTimeout):
if err = db.Merge(); err != nil {
log.Warn().Err(err).Msg("can not merge database")
}
case <-ctx.Done():
return
}
}
}(ctx, nutsDb)

return nutsDb, func() {
cancel()
log.Info().Msg("start closing database connection")
if err = nutsDb.Merge(); err != nil {
log.Err(err).Msg("can not merge database")
Expand All @@ -117,7 +119,7 @@ func initConnection(cfg collection.Config) (*nutsdb.DB, func(), error) {
}

func initDbConfig(c *config) collection.Config {
return collection.Config{File: c.DbFile}
return collection.Config{File: c.DbFile, MergeTimeout: c.MergeTimeout}
}

func initWebAppCfg(c *config) (api.AppConfig, error) {
Expand Down
19 changes: 19 additions & 0 deletions cmd/database/wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,25 @@ import (
"github.com/polyse/database/internal/api"
)

var (
procSetter = wire.NewSet(
initDbConfig,
initConnection,
initTokenizer,
initFilters,
collection.NewSimpleProcessor,
)

dbSetter = wire.NewSet(
procSetter,
wire.Bind(
new(collection.Processor),
new(*collection.SimpleProcessor),
),
collection.NewManagerWithProc,
)
)

func initWebApp(ctx context.Context, c *config) (*api.API, func(), error) {
wire.Build(api.NewApp, initWebAppCfg)
return nil, nil, nil
Expand Down
3 changes: 2 additions & 1 deletion internal/collection/proc.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ type SimpleProcessor struct {

// Config describes the basic database configuration.
type Config struct {
File string
File string
MergeTimeout time.Duration
}

// Source structure for domain\article\site\source description
Expand Down