Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View 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"],
)

View File

@ -0,0 +1,7 @@
## account-recovery-job
#### v1.1.0
> 1.去除错误的日志
#### v1.0.0
1. 账号申诉找回

View File

@ -0,0 +1,8 @@
# Owner
wanghuan01
zhoujiahui
# Author
# Reviewer
wanghuan01

View 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

View File

@ -0,0 +1,12 @@
# account-recovery-job
# 项目简介
1.
# 编译环境
# 依赖包
# 编译执行

View File

@ -0,0 +1 @@
# HTTP API文档

View 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"],
)

View 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"

View 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
}
}
}

View 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"],
)

View 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
}

View 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",
],
)

View 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
}

View 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)
}

View 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
}

View 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)
})
})
}

View 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"],
)

View 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"`
}

View 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"],
)

View 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)
}

View 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"],
)

View 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()
}