move all import and backup to migrator

This commit is contained in:
Umputun
2017-12-26 02:11:46 -06:00
parent 76d2d89c8d
commit 53bcb26e89
2 changed files with 76 additions and 54 deletions
+8 -53
View File
@@ -1,16 +1,13 @@
package main
import (
"compress/gzip"
"fmt"
"log"
"os"
"time"
"github.com/gorilla/sessions"
"github.com/hashicorp/logutils"
"github.com/jessevdk/go-flags"
"github.com/pkg/errors"
"github.com/umputun/remark/app/migrator"
"github.com/umputun/remark/app/rest"
@@ -61,7 +58,13 @@ func main() {
}
if p.Active != nil && p.Command.Find("import") == p.Active {
if err := importComments(dataStore); err != nil {
params := migrator.ImportParams{
DataStore: dataStore,
InputFile: opts.ImportCommand.InputFile,
Provider: opts.ImportCommand.Provider,
SiteID: opts.ImportCommand.SiteID,
}
if err := migrator.ImportComments(params); err != nil {
log.Fatalf("[ERROR] failed to import, %+v", err)
}
return
@@ -95,58 +98,10 @@ func main() {
log.Printf("[WARN] running in dev mode, no auth!")
}
go autoBackup(&exporter)
go migrator.AutoBackup(&exporter, opts.BackupLocation)
srv.Run()
}
func importComments(dataStore store.Interface) error {
log.Printf("[INFO] import from %s (%s) to %s",
opts.ImportCommand.InputFile, opts.ImportCommand.Provider, opts.ImportCommand.SiteID)
var importer migrator.Importer
switch opts.ImportCommand.Provider {
case "disqus":
importer = &migrator.Disqus{DataStore: dataStore}
case "native":
importer = &migrator.Remark{DataStore: dataStore}
default:
return errors.Errorf("unsupported import provider %s", opts.ImportCommand.Provider)
}
fh, err := os.Open(opts.ImportCommand.InputFile)
if err != nil {
return errors.Wrapf(err, "can't open import file %s", opts.ImportCommand.InputFile)
}
defer func() {
if err = fh.Close(); err != nil {
log.Printf("[WARN] can't close %s, %s", opts.ImportCommand.InputFile, err)
}
}()
return importer.Import(fh, opts.ImportCommand.SiteID)
}
func autoBackup(exporter migrator.Exporter) {
log.Print("[INFO] activate auto-backup")
tick := time.NewTicker(24 * time.Hour)
for _ = range tick.C {
log.Print("[DEBUG] make backup")
fh, err := os.Create(fmt.Sprintf("%s/backup-%s.gz", opts.BackupLocation, time.Now().Format("20060102")))
if err != nil {
log.Printf("[WARN] can't create backup file, %s", err)
continue
}
gz := gzip.NewWriter(fh)
if err = exporter.Export(gz, ""); err != nil {
log.Printf("[WARN] export failed, %+v", err)
}
_ = gz.Close()
_ = fh.Close()
}
}
func setupLog(dbg bool) {
filter := &logutils.LevelFilter{
Levels: []logutils.LogLevel{"DEBUG", "INFO", "WARN", "ERROR"},
+68 -1
View File
@@ -1,6 +1,16 @@
package migrator
import "io"
import (
"compress/gzip"
"fmt"
"io"
"log"
"os"
"time"
"github.com/pkg/errors"
"github.com/umputun/remark/app/store"
)
// Importer defines interface to convert posts from external sources
type Importer interface {
@@ -11,3 +21,60 @@ type Importer interface {
type Exporter interface {
Export(w io.Writer, siteID string) error
}
// ImportParams defines everyting needed to run import
type ImportParams struct {
DataStore store.Interface
InputFile string
Provider string
SiteID string
}
// ImportComments imports from given provider format and saves to store
func ImportComments(p ImportParams) error {
log.Printf("[INFO] import from %s (%s) to %s", p.InputFile, p.Provider, p.SiteID)
var importer Importer
switch p.Provider {
case "disqus":
importer = &Disqus{DataStore: p.DataStore}
case "native":
importer = &Remark{DataStore: p.DataStore}
default:
return errors.Errorf("unsupported import provider %s", p.Provider)
}
fh, err := os.Open(p.InputFile)
if err != nil {
return errors.Wrapf(err, "can't open import file %s", p.InputFile)
}
defer func() {
if err = fh.Close(); err != nil {
log.Printf("[WARN] can't close %s, %s", p.InputFile, err)
}
}()
return importer.Import(fh, p.SiteID)
}
// AutoBackup runs daily export to local files
func AutoBackup(exporter Exporter, backupLocation string) {
log.Print("[INFO] activate auto-backup")
tick := time.NewTicker(24 * time.Hour)
for _ = range tick.C {
log.Print("[DEBUG] make backup")
fh, err := os.Create(fmt.Sprintf("%s/backup-%s.gz", backupLocation, time.Now().Format("20060102")))
if err != nil {
log.Printf("[WARN] can't create backup file, %s", err)
continue
}
gz := gzip.NewWriter(fh)
if err = exporter.Export(gz, ""); err != nil {
log.Printf("[WARN] export failed, %+v", err)
}
_ = gz.Close()
_ = fh.Close()
}
}