fec-go
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
context
db
doc/develop
example
handler
helper
initdata
initialization
middleware
router
security
shell
util
.gitignore
LICENSE
README.md
fec-go-shell.go
fec-go.go
fec_trace.js
marketurl.xlsx

README.md

fec-go

fec-go

安装

1.库包安装

1.1安装xorm

go get github.com/go-sql-driver/mysql
go get github.com/go-xorm/xorm

2.安装gin

go get github.com/gin-gonic/gin

参考资料: centos6 安装go框架gin的步骤,以及中间遇到的坑

上面如果都安装成功了

go get github.com/fecshopsoft/fec-go

下载完成后,即可下载玩所有的文件

配置

1.将 config/config.ini 的内容,复制到 /etc/fec-go/config.ini ,上面的配置文件中配置相应的参数

新建文件:/etc/fec-go/config.ini

内容填写如下:

redis_user =
redis_password =
redis_port = 127.0.0.1:2183

# mysql
mysql_user      = root
mysql_password  = trew4ffr
mysql_host      = 127.0.0.1
mysql_port      = 3306
mysql_db        = fec-go
charset         = utf8
autocommit      = true
maxOpenConns    = 2
maxIdleConns    = 2

#mongodb
mgo_ip              = 127.0.0.1
mgo_port            = 27017
mgo_databaseName    = fec_go_trace_info
mgo_maxPoolSize     = 4
mgo_poolLimit       = 4

#elastic
elastic_host = http://elasticsearch1:9200

//release,debug,test
#log_mode = release
output_log = false
router_info_log = /www/web_logs/fec-go/router_info.log
router_error_log = /www/web_logs/fec-go/router_error.log
global_log = /www/web_logs/fec-go/global.log


#shell 日志

shell_output_log = false
shell_router_info_log = /www/web_logs/fec-go-shell/router_info.log
shell_router_error_log = /www/web_logs/fec-go-shell/router_error.log
shell_global_log = /www/web_logs/fec-go-shell/global.log


#
saveUploadFileDir = /www/test/xlsx


#用户信息

#userName = terry
#userEmail = 2358269014@qq.com
#userTelephone = 18620432962
#userToken = xxxxxxxxxxxxxxxxxx
#userUrl = http://120.24.37.249:3001/verify

#http服务监听的端口
httpHost = 0.0.0.0:3000

上面出现的log文件,自行新建

在src/main 下面创建 fec-go.go 和 fec-go-verify.go 文件

fec-go.go 的内容如下:

package main
/**
 * 服务端入口部分
 * 1.初始化log输出文件
 * 2.监听ip
 *
 */
import(
    "github.com/fecshopsoft/fec-go/router"
    "github.com/fecshopsoft/fec-go/initialization"
    "github.com/fecshopsoft/fec-go/config"
    "log"
    "time"
    "os"
    "os/signal"
    "syscall"
    "github.com/fecshopsoft/fec-go/db/mysqldb"
)

func main() {
    // 初始化log输出,log.Println("---") 输出的内容将输出到globalLog文件里面
    log.Println("------start:" + time.Now().String())
        initialization.InitGlobalLog()
        log.Println("------start:" + time.Now().String())
    log.SetFlags(log.LstdFlags | log.Llongfile)
    SetupCloseHandler()
    listenIp := config.Get("httpHost")
    router.Listen(listenIp);

}

func VerifyRemote(){

}

func SetupCloseHandler() {
    c := make(chan os.Signal, 2)
    signal.Notify(c, os.Interrupt, syscall.SIGTERM)
    go func() {
        <-c
        err := mysqldb.CloseEngine()
        if err != nil {
            log.Println(err.Error())
        }
        log.Println("\r- Ctrl+C pressed in Terminal")
        log.Println("------close:" + time.Now().String())
        os.Exit(0)
    }()
}

fec-go-verify.go的内容如下:

package main

import(
    "log"
    "time"
    "errors"
    "encoding/json"
    "github.com/gin-gonic/gin"
    "github.com/fecshopsoft/fec-go/security"
    "github.com/fecshopsoft/fec-go/db/mysqldb"
    "github.com/fecshopsoft/fec-go/helper"

)

func main() {
    // 初始化log输出,log.Println("---") 输出的内容将输出到globalLog文件里面
    log.Println("------start:" + time.Now().String())

        log.Println("------start:" + time.Now().String())
    log.SetFlags(log.LstdFlags | log.Llongfile)
    listenIp := "0.0.0.0:3001"
    Listen(listenIp);

}

func Listen(listenIp string) {
    // log.Println("------444:" + time.Now().String())
    r := gin.Default()
    r.GET("/verify", f)

    r.Run(listenIp) // 这里改成您的ip和端口
}


func f(c *gin.Context){
    //access_token, _ := security.JwtSignAccessToken("xxxxxxxxxxxxxx")
    // 通过参数,获取jwt的值,解密,获取 telephone, email, token.
    // 1.按照tel查询 2.验证电话,email,token,不对就报错 3.验证时间戳
    // 返回jwt 加密的格式
    tk := c.DefaultQuery("tk", "")
    log.Println(tk)
    data, _, _, err := security.JwtParse(tk)
    log.Println(data)
    // 类型断言, 解析出来
    decodeData, ok := data.(map[string]interface{})
    if !ok {
        log.Println(errors.New("decode data error"))
    }
    log.Println(decodeData["email"])
    log.Println(decodeData["name"])
    log.Println(decodeData["telephone"])
    log.Println(decodeData["time"])
    log.Println(decodeData["token"])


    // 得到里面的各个值
    email, _ := decodeData["email"].(string)
    name, _ := decodeData["name"].(string)
    telephone, _ := decodeData["telephone"].(string)
    timess, _ := decodeData["time"].(string)
    token, _ := decodeData["token"].(string)
    timestamps := helper.DateTimestamps()

    // 判断时间间隔不要超过5分钟否则,将报错
    timeInt64, _ := helper.Int64(timess)
    if timestamps - timeInt64 > 300 {
        s := gin.H{
            "status": "fail",
            "error_info": "time error",
        }
        log.Println(s)
        enS := getJwtSign(s)
        c.String(200, enS)
        return
        
    }
    // 查询,得到user数据,判断是否过期,然后得到数据。
    user, err := GetOneByEmail(email, name, telephone, token)
    if err != nil {
        s := gin.H{
            "status": "fail",
            "error_info": err.Error(),
        }
        log.Println(s)
        enS := getJwtSign(s)
        c.String(200, enS)
        return
    }

    s := gin.H{
        "status": "success",
        "pv_count": user.PvCount,
        "site_count": user.SiteCount,
        "timestamps":timestamps,
        "error_info": "",
    }
    log.Println(s)
    enS := getJwtSign(s)
    c.String(200, enS)

}

func getJwtSign(s gin.H) string{
    b, _ := json.Marshal(s)
    sr, _ :=  security.JwtSignAccessToken(string(b[:]))
    return sr
}

  type UserInfo struct {
    Id int64 `form:"id" json:"id"`
    Name string `form:"name" json:"name" binding:"required"`
    Telephone string `form:"telephone" json:"telephone"`
    Email string `form:"email" json:"email"`
    SiteCount int64 `form:"site_count" json:"site_count"`
    PvCount int64 `form:"pv_count" json:"pv_count"`
    EndDate string `form:"end_date" json:"end_date"`
    CreatedAt int64 `xorm:"created" form:"created_at" json:"created_at"`
    UpdatedAt int64 `xorm:"updated" form:"updated_at" json:"updated_at"`
    Token string `form:"token" json:"token"`
}

/**
 * 通过id查询一条记录
 */
func GetOneByEmail(email string, name string, telephone string, token string) (UserInfo, error){
    engine := mysqldb.GetEngine()
    var user UserInfo
    var user1 UserInfo
    has, err := engine.Where("email = ? and name = ? and telephone = ? and token = ? ", email, name, telephone, token).Get(&user)
    if err != nil {
        return user, err
    }
    if has == false {
        return user, errors.New("get userInfo by email error, empty data.")
    }
    // 查看时间是否过期

    t := helper.GetTimestampsByDate(user.EndDate)
    timestamps := helper.DateTimestamps()
    if t < timestamps {
        return user1, errors.New("website Time has expired")
    }

    return user, nil
}


      
        



2.数据处理脚本

go run fec-go-shell.go 1 removeEsAllIndex

第一个参数:1,代表处理N天内的数据统计

第二个参数: removeEsAllIndex,如果删除elasticSearch里面的数据,加上这个参数值。

3.cron

1 1 * * * /usr/bin/wget http://120.24.37.249:3000/fec/trace/cronssss > /dev/null
01 * * * *  /root/go/src/main/fec-go-shell   >> /www/web_logs/fec-go-shell.log  2>&1

第一个是更新数据,将ip和端口换成你自己的即可

第二个是周期跑数据的脚本,一天跑一次。,