Create & Init Project...
This commit is contained in:
146
app/job/main/passport-game-data/service/init_cloud.go
Normal file
146
app/job/main/passport-game-data/service/init_cloud.go
Normal file
@ -0,0 +1,146 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"go-common/app/job/main/passport-game-data/conf"
|
||||
"go-common/app/job/main/passport-game-data/dao"
|
||||
"go-common/app/job/main/passport-game-data/model"
|
||||
"go-common/library/log"
|
||||
)
|
||||
|
||||
const (
|
||||
_defaultInitCloudOffsetFilePath = "/data/passport-game-data-job.initcloud.offset"
|
||||
|
||||
_defaultInitCloudSleep = time.Second
|
||||
)
|
||||
|
||||
type initCloudConfig struct {
|
||||
OffsetFilePath string
|
||||
UseOldOffset bool
|
||||
|
||||
Start, End int64
|
||||
|
||||
Batch int
|
||||
|
||||
Sleep time.Duration
|
||||
}
|
||||
|
||||
func newInitCloudConfigFrom(c *conf.Config) (ic *initCloudConfig) {
|
||||
ic = &initCloudConfig{
|
||||
OffsetFilePath: c.InitCloud.OffsetFilePath,
|
||||
UseOldOffset: c.InitCloud.UseOldOffset,
|
||||
|
||||
Start: c.InitCloud.Start,
|
||||
End: c.InitCloud.End,
|
||||
|
||||
Batch: c.InitCloud.Batch,
|
||||
|
||||
Sleep: time.Duration(c.InitCloud.Sleep),
|
||||
}
|
||||
|
||||
ic.fix()
|
||||
|
||||
if ic.UseOldOffset {
|
||||
data, err := ioutil.ReadFile(ic.OffsetFilePath)
|
||||
if err != nil {
|
||||
log.Error("failed to read old offset, skip")
|
||||
return
|
||||
}
|
||||
|
||||
oldOffset, err := strconv.ParseInt(string(data), 10, 64)
|
||||
if err != nil {
|
||||
log.Error("failed to parse offset, strconv.ParseInt(%s, 10, 64)", string(data), err)
|
||||
return
|
||||
}
|
||||
|
||||
if oldOffset > 0 {
|
||||
ic.Start = oldOffset
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (ic *initCloudConfig) fix() {
|
||||
if len(ic.OffsetFilePath) == 0 {
|
||||
ic.OffsetFilePath = _defaultInitCloudOffsetFilePath
|
||||
}
|
||||
if ic.Start < 0 {
|
||||
ic.Start = 0
|
||||
}
|
||||
if ic.End < 0 {
|
||||
ic.End = 0
|
||||
}
|
||||
|
||||
if ic.Batch <= 0 {
|
||||
ic.Batch = _defaultBatchSize
|
||||
}
|
||||
|
||||
if int64(ic.Sleep) < 0 {
|
||||
ic.Sleep = _defaultInitCloudSleep
|
||||
}
|
||||
}
|
||||
|
||||
// NewInitCloud new a service for initiating cloud.
|
||||
func NewInitCloud(c *conf.Config) (s *Service) {
|
||||
s = &Service{
|
||||
c: c,
|
||||
d: dao.New(c),
|
||||
|
||||
ic: newInitCloudConfigFrom(c),
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// InitCloud init cloud.
|
||||
func (s *Service) InitCloud(c context.Context) {
|
||||
var err error
|
||||
ic := s.ic
|
||||
|
||||
dstFile, err := os.Create(ic.OffsetFilePath)
|
||||
if err != nil {
|
||||
log.Error("failed to open file %s, error(%v)", ic.OffsetFilePath, err)
|
||||
return
|
||||
}
|
||||
defer dstFile.Close()
|
||||
|
||||
for i := ic.Start; i <= ic.End; {
|
||||
time.Sleep(ic.Sleep)
|
||||
if err = ioutil.WriteFile(ic.OffsetFilePath, []byte(strconv.FormatInt(i, 10)), os.ModeAppend); err != nil {
|
||||
log.Error("failed to record offset, offsetFilePath: %s, offset: %d, error(%v)", ic.OffsetFilePath, i, err)
|
||||
continue
|
||||
}
|
||||
st := i
|
||||
ed := i + int64(ic.Batch)
|
||||
if ed > ic.End {
|
||||
ed = ic.End
|
||||
}
|
||||
|
||||
mids := make([]int64, 0)
|
||||
for j := st; j <= ed; j++ {
|
||||
mids = append(mids, j)
|
||||
}
|
||||
|
||||
var as []*model.OriginAsoAccount
|
||||
if as, err = s.d.AsoAccountsLocal(c, mids); err != nil {
|
||||
log.Error("failed to get local aso accounts by mids, service.dao.AsoAccountsLocal(%v) error(%v)", mids, err)
|
||||
continue
|
||||
}
|
||||
|
||||
cloudAs := make([]*model.AsoAccount, 0)
|
||||
for _, a := range as {
|
||||
cloudAs = append(cloudAs, model.Default(a))
|
||||
}
|
||||
if err = s.d.AddAsoAccountsCloud(c, cloudAs); err != nil {
|
||||
str, _ := json.Marshal(cloudAs)
|
||||
log.Error("failed to add aso accounts to cloud, service.dao.AddAsoAccountsCloud(%v) error(%v)", str, err)
|
||||
continue
|
||||
}
|
||||
i += int64(ic.Batch)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user