Create & Init Project...
This commit is contained in:
21
app/job/main/account-recovery/BUILD
Normal file
21
app/job/main/account-recovery/BUILD
Normal file
@ -0,0 +1,21 @@
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [
|
||||
":package-srcs",
|
||||
"//app/job/main/account-recovery/cmd:all-srcs",
|
||||
"//app/job/main/account-recovery/conf:all-srcs",
|
||||
"//app/job/main/account-recovery/dao:all-srcs",
|
||||
"//app/job/main/account-recovery/model:all-srcs",
|
||||
"//app/job/main/account-recovery/server/http:all-srcs",
|
||||
"//app/job/main/account-recovery/service:all-srcs",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
7
app/job/main/account-recovery/CHANGELOG.md
Normal file
7
app/job/main/account-recovery/CHANGELOG.md
Normal file
@ -0,0 +1,7 @@
|
||||
## account-recovery-job
|
||||
|
||||
#### v1.1.0
|
||||
> 1.去除错误的日志
|
||||
|
||||
#### v1.0.0
|
||||
1. 账号申诉找回
|
8
app/job/main/account-recovery/CONTRIBUTORS.md
Normal file
8
app/job/main/account-recovery/CONTRIBUTORS.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Owner
|
||||
wanghuan01
|
||||
zhoujiahui
|
||||
|
||||
# Author
|
||||
|
||||
# Reviewer
|
||||
wanghuan01
|
13
app/job/main/account-recovery/OWNERS
Normal file
13
app/job/main/account-recovery/OWNERS
Normal file
@ -0,0 +1,13 @@
|
||||
# See the OWNERS docs at https://go.k8s.io/owners
|
||||
|
||||
approvers:
|
||||
- wanghuan01
|
||||
- zhoujiahui
|
||||
labels:
|
||||
- job
|
||||
- job/main/account-recovery
|
||||
- main
|
||||
options:
|
||||
no_parent_owners: true
|
||||
reviewers:
|
||||
- wanghuan01
|
12
app/job/main/account-recovery/README.md
Normal file
12
app/job/main/account-recovery/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# account-recovery-job
|
||||
|
||||
# 项目简介
|
||||
1.
|
||||
|
||||
# 编译环境
|
||||
|
||||
|
||||
# 依赖包
|
||||
|
||||
|
||||
# 编译执行
|
1
app/job/main/account-recovery/api/http/api.md
Normal file
1
app/job/main/account-recovery/api/http/api.md
Normal file
@ -0,0 +1 @@
|
||||
# HTTP API文档
|
42
app/job/main/account-recovery/cmd/BUILD
Normal file
42
app/job/main/account-recovery/cmd/BUILD
Normal file
@ -0,0 +1,42 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_binary",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "cmd",
|
||||
embed = [":go_default_library"],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["main.go"],
|
||||
data = ["account-recovery-job.toml"],
|
||||
importpath = "go-common/app/job/main/account-recovery/cmd",
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//app/job/main/account-recovery/conf:go_default_library",
|
||||
"//app/job/main/account-recovery/server/http:go_default_library",
|
||||
"//library/log:go_default_library",
|
||||
"//library/net/trace:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
61
app/job/main/account-recovery/cmd/account-recovery-job.toml
Normal file
61
app/job/main/account-recovery/cmd/account-recovery-job.toml
Normal file
@ -0,0 +1,61 @@
|
||||
[databus]
|
||||
[databus.compareDatabus]
|
||||
key = "4ba46ba31f9a44ef"
|
||||
secret = "e4c5a7fce28695209e6b4f0af8cf91c5"
|
||||
group = "AccountRecovery-MainAccount-S"
|
||||
topic = "AccountRecovery-T"
|
||||
action = "sub"
|
||||
offset = "new"
|
||||
buffer = 2048
|
||||
name = "account-recovery-job/databus"
|
||||
proto = "tcp"
|
||||
addr = "172.16.33.50:6205"
|
||||
idle = 1
|
||||
active = 1
|
||||
dialTimeout = "1s"
|
||||
readTimeout = "60s"
|
||||
writeTimeout = "1s"
|
||||
idleTimeout = "10s"
|
||||
[databus.compareDatabus.discovery]
|
||||
domain = "api.bilibili.co"
|
||||
key = "7634436ea852e3f4"
|
||||
secret = "test"
|
||||
[databus.sendMailDatabus]
|
||||
key = "4ba46ba31f9a44ef"
|
||||
secret = "e4c5a7fce28695209e6b4f0af8cf91c5"
|
||||
group = "AccountRecovery-MainAccount-SendMail-S"
|
||||
topic = "AccountRecovery-T"
|
||||
action = "sub"
|
||||
offset = "new"
|
||||
buffer = 2048
|
||||
name = "account-recovery-job/databus"
|
||||
proto = "tcp"
|
||||
addr = "172.16.33.50:6205"
|
||||
idle = 1
|
||||
active = 1
|
||||
dialTimeout = "1s"
|
||||
readTimeout = "60s"
|
||||
writeTimeout = "1s"
|
||||
idleTimeout = "10s"
|
||||
[databus.sendMailDatabus.discovery]
|
||||
domain = "api.bilibili.co"
|
||||
key = "7634436ea852e3f4"
|
||||
secret = "test"
|
||||
|
||||
[HttpClientConfig]
|
||||
key = "7d9f6f6fe2a898e8"
|
||||
secret = "4de2ccdbd9db69be0c2c6437bfe6eb69"
|
||||
dial = "100ms"
|
||||
timeout = "350ms"
|
||||
keepAlive = "60s"
|
||||
timer = 1024
|
||||
[HttpClientConfig.breaker]
|
||||
window = "3s"
|
||||
sleep = "100ms"
|
||||
bucket = 10
|
||||
ratio = 1.0
|
||||
request = 100
|
||||
|
||||
[AccRecover]
|
||||
CompareURL = "http://api.bilibili.co/x/internal/account-recovery/compare"
|
||||
SendMailURL = "http://api.bilibili.co/x/internal/account-recovery/sendMail"
|
40
app/job/main/account-recovery/cmd/main.go
Normal file
40
app/job/main/account-recovery/cmd/main.go
Normal file
@ -0,0 +1,40 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"go-common/app/job/main/account-recovery/conf"
|
||||
"go-common/app/job/main/account-recovery/server/http"
|
||||
"go-common/library/log"
|
||||
"go-common/library/net/trace"
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
if err := conf.Init(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Init(conf.Conf.Log)
|
||||
defer log.Close()
|
||||
log.Info("start")
|
||||
trace.Init(conf.Conf.Tracer)
|
||||
defer trace.Close()
|
||||
http.Init(conf.Conf)
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
|
||||
for {
|
||||
s := <-c
|
||||
log.Info("get a signal %s", s.String())
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
log.Info("exit")
|
||||
return
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
37
app/job/main/account-recovery/conf/BUILD
Normal file
37
app/job/main/account-recovery/conf/BUILD
Normal file
@ -0,0 +1,37 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["conf.go"],
|
||||
importpath = "go-common/app/job/main/account-recovery/conf",
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//library/conf:go_default_library",
|
||||
"//library/database/sql:go_default_library",
|
||||
"//library/log:go_default_library",
|
||||
"//library/net/http/blademaster:go_default_library",
|
||||
"//library/net/trace:go_default_library",
|
||||
"//library/queue/databus:go_default_library",
|
||||
"//vendor/github.com/BurntSushi/toml:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
100
app/job/main/account-recovery/conf/conf.go
Normal file
100
app/job/main/account-recovery/conf/conf.go
Normal file
@ -0,0 +1,100 @@
|
||||
package conf
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
|
||||
"go-common/library/conf"
|
||||
"go-common/library/database/sql"
|
||||
"go-common/library/log"
|
||||
bm "go-common/library/net/http/blademaster"
|
||||
"go-common/library/net/trace"
|
||||
"go-common/library/queue/databus"
|
||||
|
||||
"github.com/BurntSushi/toml"
|
||||
)
|
||||
|
||||
var (
|
||||
confPath string
|
||||
client *conf.Client
|
||||
// Conf config
|
||||
Conf = &Config{}
|
||||
)
|
||||
|
||||
// Config .
|
||||
type Config struct {
|
||||
Log *log.Config
|
||||
BM *bm.ServerConfig
|
||||
Tracer *trace.Config
|
||||
MySQL *sql.Config
|
||||
|
||||
// databus
|
||||
DataBus *DataBus
|
||||
// HTTPClientConfig
|
||||
HTTPClientConfig *bm.ClientConfig
|
||||
// AccRecover request URL info
|
||||
AccRecover *AccRecover
|
||||
}
|
||||
|
||||
// AccRecover http request
|
||||
type AccRecover struct {
|
||||
CompareURL string
|
||||
SendMailURL string
|
||||
}
|
||||
|
||||
// DataBus config
|
||||
type DataBus struct {
|
||||
CompareDatabus *databus.Config
|
||||
SendMailDatabus *databus.Config
|
||||
}
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&confPath, "conf", "", "default config path")
|
||||
}
|
||||
|
||||
// Init init conf
|
||||
func Init() error {
|
||||
if confPath != "" {
|
||||
return local()
|
||||
}
|
||||
return remote()
|
||||
}
|
||||
|
||||
func local() (err error) {
|
||||
_, err = toml.DecodeFile(confPath, &Conf)
|
||||
return
|
||||
}
|
||||
|
||||
func remote() (err error) {
|
||||
if client, err = conf.New(); err != nil {
|
||||
return
|
||||
}
|
||||
if err = load(); err != nil {
|
||||
return
|
||||
}
|
||||
go func() {
|
||||
for range client.Event() {
|
||||
log.Info("config reload")
|
||||
if load() != nil {
|
||||
log.Error("config reload error (%v)", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
return
|
||||
}
|
||||
|
||||
func load() (err error) {
|
||||
var (
|
||||
s string
|
||||
ok bool
|
||||
tmpConf *Config
|
||||
)
|
||||
if s, ok = client.Toml2(); !ok {
|
||||
return errors.New("load config center error")
|
||||
}
|
||||
if _, err = toml.Decode(s, &tmpConf); err != nil {
|
||||
return errors.New("could not decode config")
|
||||
}
|
||||
*Conf = *tmpConf
|
||||
return
|
||||
}
|
55
app/job/main/account-recovery/dao/BUILD
Normal file
55
app/job/main/account-recovery/dao/BUILD
Normal file
@ -0,0 +1,55 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
"go_test",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"dao.go",
|
||||
"req_http.go",
|
||||
],
|
||||
importpath = "go-common/app/job/main/account-recovery/dao",
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//app/job/main/account-recovery/conf:go_default_library",
|
||||
"//app/job/main/account-recovery/model:go_default_library",
|
||||
"//library/ecode:go_default_library",
|
||||
"//library/log:go_default_library",
|
||||
"//library/net/http/blademaster:go_default_library",
|
||||
"//library/net/metadata:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = [
|
||||
"dao_test.go",
|
||||
"req_http_test.go",
|
||||
],
|
||||
embed = [":go_default_library"],
|
||||
rundir = ".",
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//app/job/main/account-recovery/conf:go_default_library",
|
||||
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
|
||||
],
|
||||
)
|
23
app/job/main/account-recovery/dao/dao.go
Normal file
23
app/job/main/account-recovery/dao/dao.go
Normal file
@ -0,0 +1,23 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"go-common/app/job/main/account-recovery/conf"
|
||||
bm "go-common/library/net/http/blademaster"
|
||||
)
|
||||
|
||||
// Dao dao
|
||||
type Dao struct {
|
||||
c *conf.Config
|
||||
// httpClient
|
||||
httpClient *bm.Client
|
||||
}
|
||||
|
||||
// New init mysql db
|
||||
func New(c *conf.Config) (dao *Dao) {
|
||||
dao = &Dao{
|
||||
c: c,
|
||||
// httpClient
|
||||
httpClient: bm.NewClient(c.HTTPClientConfig),
|
||||
}
|
||||
return
|
||||
}
|
36
app/job/main/account-recovery/dao/dao_test.go
Normal file
36
app/job/main/account-recovery/dao/dao_test.go
Normal file
@ -0,0 +1,36 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"go-common/app/job/main/account-recovery/conf"
|
||||
)
|
||||
|
||||
var (
|
||||
d *Dao
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
if os.Getenv("DEPLOY_ENV") != "dev" {
|
||||
flag.Set("app_id", "main.account.account-recovery-job")
|
||||
flag.Set("conf_token", "cf691261b587f3735c1ceec1f27f8177")
|
||||
flag.Set("tree_id", "55366")
|
||||
flag.Set("conf_version", "docker-1")
|
||||
flag.Set("deploy_env", "uat")
|
||||
flag.Set("conf_host", "config.bilibili.co")
|
||||
flag.Set("conf_path", "/tmp")
|
||||
flag.Set("region", "sh")
|
||||
flag.Set("zone", "sh001")
|
||||
} else {
|
||||
flag.Set("conf", "../cmd/account-recovery-job.toml")
|
||||
}
|
||||
flag.Parse()
|
||||
if err := conf.Init(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
d = New(conf.Conf)
|
||||
m.Run()
|
||||
os.Exit(0)
|
||||
}
|
47
app/job/main/account-recovery/dao/req_http.go
Normal file
47
app/job/main/account-recovery/dao/req_http.go
Normal file
@ -0,0 +1,47 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
"go-common/app/job/main/account-recovery/model"
|
||||
"go-common/library/ecode"
|
||||
"go-common/library/log"
|
||||
"go-common/library/net/metadata"
|
||||
)
|
||||
|
||||
// CompareInfo compare info
|
||||
func (d *Dao) CompareInfo(c context.Context, rid int64) (err error) {
|
||||
params := url.Values{}
|
||||
params.Set("rid", strconv.FormatInt(rid, 10))
|
||||
res := new(model.CommonResq)
|
||||
if err = d.httpClient.Post(c, d.c.AccRecover.CompareURL, metadata.String(c, metadata.RemoteIP), params, &res); err != nil {
|
||||
log.Error("CompareInfo HTTP request err %v", err)
|
||||
return
|
||||
}
|
||||
if res.Code != 0 {
|
||||
log.Error("CompareInfo server err_code %d", res.Code)
|
||||
err = ecode.Int(int(res.Code))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// SendMail send mail
|
||||
func (d *Dao) SendMail(c context.Context, rid, status int64) (err error) {
|
||||
params := url.Values{}
|
||||
params.Set("rid", strconv.FormatInt(rid, 10))
|
||||
params.Set("status", strconv.FormatInt(status, 10))
|
||||
res := new(model.CommonResq)
|
||||
if err = d.httpClient.Post(c, d.c.AccRecover.SendMailURL, metadata.String(c, metadata.RemoteIP), params, &res); err != nil {
|
||||
log.Error("SendMail HTTP request err %v", err)
|
||||
return
|
||||
}
|
||||
if res.Code != 0 {
|
||||
log.Error("SendMail server err_code %d", res.Code)
|
||||
err = ecode.Int(int(res.Code))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
35
app/job/main/account-recovery/dao/req_http_test.go
Normal file
35
app/job/main/account-recovery/dao/req_http_test.go
Normal file
@ -0,0 +1,35 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/smartystreets/goconvey/convey"
|
||||
)
|
||||
|
||||
func TestDaoCompareInfo(t *testing.T) {
|
||||
var (
|
||||
c = context.Background()
|
||||
rid = int64(1)
|
||||
)
|
||||
convey.Convey("CompareInfo", t, func(ctx convey.C) {
|
||||
err := d.CompareInfo(c, rid)
|
||||
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
|
||||
ctx.So(err, convey.ShouldBeNil)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestDaoSendMail(t *testing.T) {
|
||||
var (
|
||||
c = context.Background()
|
||||
rid = int64(1)
|
||||
status = int64(1)
|
||||
)
|
||||
convey.Convey("SendMail", t, func(ctx convey.C) {
|
||||
err := d.SendMail(c, rid, status)
|
||||
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
|
||||
ctx.So(err, convey.ShouldBeNil)
|
||||
})
|
||||
})
|
||||
}
|
28
app/job/main/account-recovery/model/BUILD
Normal file
28
app/job/main/account-recovery/model/BUILD
Normal file
@ -0,0 +1,28 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["model.go"],
|
||||
importpath = "go-common/app/job/main/account-recovery/model",
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
26
app/job/main/account-recovery/model/model.go
Normal file
26
app/job/main/account-recovery/model/model.go
Normal file
@ -0,0 +1,26 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
// RecoveryInfo recoveryInfo.
|
||||
type RecoveryInfo struct {
|
||||
Rid int64 `json:"rid" params:"rid;Required"` // 用户rid列表
|
||||
Status int64 `json:"status"`
|
||||
}
|
||||
|
||||
// Message is databus message.
|
||||
type Message struct {
|
||||
Action string `json:"action"`
|
||||
Table string `json:"table"`
|
||||
New json.RawMessage `json:"new"`
|
||||
Old json.RawMessage `json:"old"`
|
||||
}
|
||||
|
||||
// CommonResq CommonResq
|
||||
type CommonResq struct {
|
||||
Code int64 `json:"code"`
|
||||
TS int64 `json:"ts"`
|
||||
Message string `json:"message"`
|
||||
}
|
34
app/job/main/account-recovery/server/http/BUILD
Normal file
34
app/job/main/account-recovery/server/http/BUILD
Normal file
@ -0,0 +1,34 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["http.go"],
|
||||
importpath = "go-common/app/job/main/account-recovery/server/http",
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//app/job/main/account-recovery/conf:go_default_library",
|
||||
"//app/job/main/account-recovery/service:go_default_library",
|
||||
"//library/log:go_default_library",
|
||||
"//library/net/http/blademaster:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
39
app/job/main/account-recovery/server/http/http.go
Normal file
39
app/job/main/account-recovery/server/http/http.go
Normal file
@ -0,0 +1,39 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"go-common/app/job/main/account-recovery/conf"
|
||||
"go-common/app/job/main/account-recovery/service"
|
||||
"go-common/library/log"
|
||||
bm "go-common/library/net/http/blademaster"
|
||||
)
|
||||
|
||||
var (
|
||||
srv *service.Service
|
||||
)
|
||||
|
||||
// Init init
|
||||
func Init(c *conf.Config) {
|
||||
srv = service.New(c)
|
||||
engine := bm.DefaultServer(c.BM)
|
||||
router(engine)
|
||||
if err := engine.Start(); err != nil {
|
||||
log.Error("engine.Start error(%v)", err)
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func router(e *bm.Engine) {
|
||||
e.Ping(ping)
|
||||
e.Register(register)
|
||||
g := e.Group("/x/account-recovery")
|
||||
{
|
||||
g.GET("/test", ping)
|
||||
}
|
||||
}
|
||||
|
||||
func ping(c *bm.Context) {
|
||||
}
|
||||
|
||||
func register(c *bm.Context) {
|
||||
c.JSON(map[string]interface{}{}, nil)
|
||||
}
|
35
app/job/main/account-recovery/service/BUILD
Normal file
35
app/job/main/account-recovery/service/BUILD
Normal file
@ -0,0 +1,35 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["service.go"],
|
||||
importpath = "go-common/app/job/main/account-recovery/service",
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//app/job/main/account-recovery/conf:go_default_library",
|
||||
"//app/job/main/account-recovery/dao:go_default_library",
|
||||
"//app/job/main/account-recovery/model:go_default_library",
|
||||
"//library/log:go_default_library",
|
||||
"//library/queue/databus:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "package-srcs",
|
||||
srcs = glob(["**"]),
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
159
app/job/main/account-recovery/service/service.go
Normal file
159
app/job/main/account-recovery/service/service.go
Normal file
@ -0,0 +1,159 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"go-common/app/job/main/account-recovery/conf"
|
||||
"go-common/app/job/main/account-recovery/dao"
|
||||
"go-common/app/job/main/account-recovery/model"
|
||||
"go-common/library/log"
|
||||
"go-common/library/queue/databus"
|
||||
)
|
||||
|
||||
const (
|
||||
_recoveryLog = "account_recovery_info"
|
||||
//_retry = 10
|
||||
_retrySleep = time.Second * 1
|
||||
)
|
||||
|
||||
// Service struct
|
||||
type Service struct {
|
||||
c *conf.Config
|
||||
dao *dao.Dao
|
||||
compareDatabus *databus.Databus
|
||||
sendMailDatabus *databus.Databus
|
||||
}
|
||||
|
||||
// New init
|
||||
func New(c *conf.Config) (s *Service) {
|
||||
s = &Service{
|
||||
c: c,
|
||||
dao: dao.New(c),
|
||||
compareDatabus: databus.New(c.DataBus.CompareDatabus),
|
||||
sendMailDatabus: databus.New(c.DataBus.SendMailDatabus),
|
||||
}
|
||||
go s.compareConsumeproc()
|
||||
go s.sendMailConsumeproc()
|
||||
return
|
||||
}
|
||||
|
||||
func (s *Service) compareConsumeproc() {
|
||||
var (
|
||||
msg *databus.Message
|
||||
err error
|
||||
ok bool
|
||||
)
|
||||
for {
|
||||
if msg, ok = <-s.compareDatabus.Messages(); !ok {
|
||||
log.Error("s.compareDatabus.Message err(%v)", err)
|
||||
return
|
||||
}
|
||||
log.Info("receive msg (%v)", msg.Key)
|
||||
mu := &model.Message{}
|
||||
if err = json.Unmarshal(msg.Value, &mu); err != nil {
|
||||
log.Error("s.compareDatabus.Message err(%v)", err)
|
||||
continue
|
||||
}
|
||||
for {
|
||||
switch {
|
||||
case strings.HasPrefix(mu.Table, _recoveryLog):
|
||||
if mu.Action == "insert" {
|
||||
log.Info("begin compare (%v)", msg.Key)
|
||||
err = s.compare(context.TODO(), mu.New)
|
||||
log.Info("end compare (%v)", msg.Key)
|
||||
}
|
||||
}
|
||||
log.Info("compare switch case (%v), (%v), (%v), (%v), (%v)", strings.HasPrefix(mu.Table, _recoveryLog), mu.Action == "insert", mu.Table, msg.Key, mu.Action)
|
||||
if err != nil {
|
||||
log.Error("s.flush error(%v)", err)
|
||||
time.Sleep(_retrySleep)
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
log.Info("subproc key:%v,topic: %v, part:%v offset:%v,message %s,", msg.Key, msg.Topic, msg.Partition, msg.Offset, msg.Value)
|
||||
err = msg.Commit()
|
||||
if err != nil {
|
||||
log.Error("commit err: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) sendMailConsumeproc() {
|
||||
var (
|
||||
msg *databus.Message
|
||||
err error
|
||||
ok bool
|
||||
)
|
||||
for {
|
||||
if msg, ok = <-s.sendMailDatabus.Messages(); !ok {
|
||||
log.Error("s.sendMailDatabus.Message err(%v)", err)
|
||||
return
|
||||
}
|
||||
log.Info("receive msg (%v)", msg.Key)
|
||||
mu := &model.Message{}
|
||||
if err = json.Unmarshal(msg.Value, &mu); err != nil {
|
||||
log.Error("s.sendMailDatabus.Message err(%v)", err)
|
||||
continue
|
||||
}
|
||||
for {
|
||||
switch {
|
||||
case strings.HasPrefix(mu.Table, _recoveryLog):
|
||||
if mu.Action == "update" {
|
||||
log.Info("begin sendMail (%v)", msg.Key)
|
||||
err = s.sendMail(context.TODO(), mu.New, mu.Old)
|
||||
}
|
||||
}
|
||||
log.Info("sendMail switch case (%v), (%v), (%v), (%v), (%v)", strings.HasPrefix(mu.Table, _recoveryLog), mu.Action == "update", mu.Table, msg.Key, mu.Action)
|
||||
if err != nil {
|
||||
log.Error("s.flush error(%v)", err)
|
||||
time.Sleep(_retrySleep)
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
log.Info("subproc key:%v,topic: %v, part:%v offset:%v,message %s,", msg.Key, msg.Topic, msg.Partition, msg.Offset, msg.Value)
|
||||
err = msg.Commit()
|
||||
if err != nil {
|
||||
log.Error("commit err: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// compare compare
|
||||
func (s *Service) compare(c context.Context, msg []byte) (err error) {
|
||||
r := &model.RecoveryInfo{}
|
||||
if err = json.Unmarshal(msg, r); err != nil {
|
||||
log.Error("s.compare err(%v)", err)
|
||||
return
|
||||
}
|
||||
err = s.dao.CompareInfo(c, r.Rid)
|
||||
return
|
||||
}
|
||||
|
||||
// sendMail send mail
|
||||
func (s *Service) sendMail(c context.Context, new []byte, old []byte) (err error) {
|
||||
oldInfo := &model.RecoveryInfo{}
|
||||
newInfo := &model.RecoveryInfo{}
|
||||
if err = json.Unmarshal(old, oldInfo); err != nil {
|
||||
log.Error("failed to oldInfo unmarshal err(%v)", err)
|
||||
return
|
||||
}
|
||||
if err = json.Unmarshal(new, newInfo); err != nil {
|
||||
log.Error("failed to newInfo unmarshal err(%v)", err)
|
||||
return
|
||||
}
|
||||
if oldInfo.Status == 0 && (newInfo.Status == 1 || newInfo.Status == 2) {
|
||||
err = s.dao.SendMail(c, newInfo.Rid, newInfo.Status)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Close Service
|
||||
func (s *Service) Close() {
|
||||
s.compareDatabus.Close()
|
||||
s.sendMailDatabus.Close()
|
||||
}
|
Reference in New Issue
Block a user