83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
package handler
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/rabbitmq/amqp091-go"
|
|
"math/rand"
|
|
"samba/pkg/log"
|
|
"samba/proto"
|
|
"samba/util/util"
|
|
"strconv"
|
|
)
|
|
|
|
func onAddClickHouseLog(_ *amqp091.Delivery, msg map[string]interface{}) {
|
|
req, err := util.MapToStructT[proto.NtfClickHouseSql](msg["p"])
|
|
if err != nil {
|
|
log.Error(err.Error())
|
|
return
|
|
}
|
|
dbs := gDBServices.Get(req.UId)
|
|
_, err = dbs.Exec(req.Sql)
|
|
if err != nil {
|
|
log.Error(fmt.Sprintf("error:%v inserting clickhouse sql: %v", err, req.Sql))
|
|
}
|
|
|
|
log.Debug(req.Sql)
|
|
return
|
|
}
|
|
|
|
func onInsertClickHouse(_ *amqp091.Delivery, msg map[string]interface{}) {
|
|
req, err := util.MapToStructT[proto.ReqInsertClickHouse](msg["p"])
|
|
if err != nil {
|
|
log.Error(err.Error())
|
|
return
|
|
}
|
|
dbs := gDBServices.Get(int64(rand.Int()))
|
|
var sql string
|
|
if sql, err = util.MapToInsertSQL(req.TableName, req.Values); err == nil {
|
|
log.Debug(sql)
|
|
_, err = dbs.Exec(sql)
|
|
}
|
|
if err != nil {
|
|
d, _ := json.Marshal(req.Values)
|
|
log.Error(fmt.Sprintf("error:%v inserting clickhouse.tablename:%v, values:%v", err, req.TableName, string(d)))
|
|
}
|
|
return
|
|
}
|
|
|
|
func onReqGetOnlineFlow(d *amqp091.Delivery, msg map[string]interface{}) {
|
|
req, err := util.MapToStructT[proto.ReqGetOnlineFlow](msg["p"])
|
|
if err != nil {
|
|
log.Error(err.Error())
|
|
return
|
|
}
|
|
log.Debug(fmt.Sprintf("onReqGetOnlineFlow date=%s, time=%d", req.Date, req.TimeStamp))
|
|
dbs := gDBServices.Get(0)
|
|
rsp := &proto.RspGetOnlineFlow{}
|
|
defer func() {
|
|
rid, _ := msg["rid"].(string)
|
|
SendMsgToRPC(d, dbs, rsp, rid, "onReqGetOnlineFlow")
|
|
}()
|
|
date, err := strconv.Atoi(req.Date)
|
|
if err != nil {
|
|
rsp.Err = err.Error()
|
|
return
|
|
}
|
|
res, err := dbs.Select("SELECT * FROM online_flow WHERE date=? AND time=?", date, req.TimeStamp)
|
|
if err != nil {
|
|
rsp.Err = err.Error()
|
|
return
|
|
}
|
|
|
|
for res.Next() {
|
|
var flow proto.OnlineFlow
|
|
if err = res.Scan(&flow.Time, &flow.Api, &flow.Date, &flow.Online, &flow.Onplay); err != nil {
|
|
rsp.Err = err.Error()
|
|
return
|
|
}
|
|
rsp.Flows = append(rsp.Flows, flow)
|
|
}
|
|
|
|
}
|