@@ -0,0 +1,77 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"91porn-server/common/conf"
|
||||
"91porn-server/common/db"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models"
|
||||
"91porn-server/models/Init"
|
||||
"91porn-server/skd/skdg"
|
||||
)
|
||||
|
||||
/*
|
||||
本函数会将mongo库内的video_info数据, audiobook数据, fiction数据写入es
|
||||
一般在项目部署, 数据导入完成以后运行一次便可
|
||||
*/
|
||||
|
||||
func init() {
|
||||
cfg := skdg.GlobalConfig{}
|
||||
log.Info("load config start...")
|
||||
if err := conf.LoadJSON("config/skd.json", &cfg); err != nil {
|
||||
log.Error("startUp get config error: %v", log.E(err))
|
||||
panic(err)
|
||||
}
|
||||
skdg.Conf = &cfg
|
||||
log.Info("load config end..")
|
||||
log.Init(log.Options{Level: skdg.Conf.Log.Level})
|
||||
log.Info("daichong conf Domain", log.Any("donmain", skdg.Conf.DaiChong.Domain))
|
||||
}
|
||||
|
||||
func main() {
|
||||
ds := db.InitDS(initMongodbParam(models.RegisterPool))
|
||||
if len(ds) > 0 {
|
||||
for k, v := range ds {
|
||||
switch k {
|
||||
case models.VideoDb:
|
||||
skdg.VideoDB = v
|
||||
case models.LogDb:
|
||||
skdg.LogDB = v
|
||||
case models.StatDb:
|
||||
skdg.StatDB = v
|
||||
}
|
||||
}
|
||||
}
|
||||
skdg.InitElastic()
|
||||
Init.InitMongo()
|
||||
log.Info("所有同步开始")
|
||||
wg := new(sync.WaitGroup)
|
||||
wg.Add(3)
|
||||
go syncAudioBook(wg)
|
||||
go syncVideoInfo(wg)
|
||||
go syncFiction(wg)
|
||||
wg.Wait()
|
||||
log.Info("所有同步结束")
|
||||
}
|
||||
|
||||
func initMongodbParam(registerPool []models.Register) ([]db.DBmap, []db.Register) {
|
||||
pri := db.DBmap{
|
||||
Key: models.VideoDb,
|
||||
URL: skdg.Conf.Mongo.VideoDbUrl,
|
||||
}
|
||||
sta := db.DBmap{
|
||||
Key: models.StatDb,
|
||||
URL: skdg.Conf.Mongo.StatDbUrl,
|
||||
}
|
||||
log := db.DBmap{
|
||||
Key: models.LogDb,
|
||||
URL: skdg.Conf.Mongo.LogDbUrl,
|
||||
}
|
||||
dbgister := make([]db.Register, len(registerPool))
|
||||
for i, v := range registerPool {
|
||||
dbgister[i] = db.Register{Key: v.Key, Table: v.Table}
|
||||
}
|
||||
dbmaps := []db.DBmap{pri, sta, log}
|
||||
return dbmaps, dbgister
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"91porn-server/common/elastic"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models"
|
||||
"91porn-server/models/v/audiobookmod"
|
||||
"91porn-server/skd/skdg"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func syncAudioBook(wg *sync.WaitGroup) {
|
||||
log.Info("audiobook sync start...")
|
||||
for i := int64(0); ; i++ {
|
||||
opts := options.Find().SetSkip(i * 1000).SetLimit(1000).SetSort(bson.D{{Key: "_id", Value: 1}})
|
||||
au, err := audiobookmod.GetListByCond(bson.M{}, opts)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
var source = elastic.M{}
|
||||
for i := range au {
|
||||
tmp := au[i]
|
||||
source[au[i].ID.Hex()] = tmp
|
||||
}
|
||||
if err := skdg.VideoES.Bulk(models.ESInfoAudioBookTable, source); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
auLen := len(au)
|
||||
if len(au) < 1000 {
|
||||
break
|
||||
}
|
||||
log.Info("audiobook sync:", log.Any("start", i*1000), log.Any("end", i*1000+int64(auLen)))
|
||||
}
|
||||
log.Info("audiobook sync complete...")
|
||||
wg.Done()
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"91porn-server/common/elastic"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models"
|
||||
"91porn-server/models/v/fictionmod"
|
||||
"91porn-server/skd/skdg"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func syncFiction(wg *sync.WaitGroup) {
|
||||
log.Info("fiction sync start...")
|
||||
for i := int64(0); ; i++ {
|
||||
opts := options.Find().SetSkip(i * 1000).SetLimit(1000).SetSort(bson.D{{Key: "_id", Value: 1}})
|
||||
fc, err := fictionmod.GetListByCond(bson.M{}, opts)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
var source = elastic.M{}
|
||||
for i := range fc {
|
||||
tmp := fc[i]
|
||||
source[fc[i].ID.Hex()] = tmp
|
||||
}
|
||||
if err := skdg.VideoES.Bulk(models.ESInfoFictionTable, source); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fcLen := len(fc)
|
||||
if fcLen < 1000 {
|
||||
break
|
||||
}
|
||||
log.Info("fiction sync:", log.Any("start", i*1000), log.Any("end", i*1000+int64(fcLen)))
|
||||
}
|
||||
log.Info("fiction sync complete...")
|
||||
wg.Done()
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"91porn-server/common/elastic"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/models"
|
||||
"91porn-server/models/v/vidmod"
|
||||
"91porn-server/skd/skdg"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func syncVideoInfo(wg *sync.WaitGroup) {
|
||||
log.Info("video sync start...")
|
||||
for i := int64(0); ; i++ {
|
||||
opts := options.Find().SetSkip(i * 1000).SetLimit(1000).SetSort(bson.D{{Key: "_id", Value: 1}})
|
||||
vd, err := vidmod.GetListByCond(bson.M{}, opts)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
var source = elastic.M{}
|
||||
for i := range vd {
|
||||
tmp := vd[i]
|
||||
source[vd[i].ID.Hex()] = tmp
|
||||
}
|
||||
if err := skdg.VideoES.Bulk(models.ESInfoVideoTable, source); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
vdLen := len(vd)
|
||||
if vdLen < 1000 {
|
||||
break
|
||||
}
|
||||
log.Info("video sync:", log.Any("start", i*1000), log.Any("end", i*1000+int64(vdLen)))
|
||||
}
|
||||
log.Info("video sync complete...")
|
||||
wg.Done()
|
||||
}
|
||||
Reference in New Issue
Block a user