Ver código fonte

update 添加测试数据

Alvin 8 meses atrás
pai
commit
8089dcfb37
3 arquivos alterados com 162 adições e 1 exclusões
  1. 158 0
      game/game_cluster/nodes/logstash/fakedata/main.go
  2. 2 1
      game/go.mod
  3. 2 0
      game/go.sum

+ 158 - 0
game/game_cluster/nodes/logstash/fakedata/main.go

@@ -0,0 +1,158 @@
+package main
+
+import (
+	"fmt"
+	"log"
+	"math/rand"
+	"os"
+	"time"
+
+	"github.com/bxcodec/faker/v3"
+	"github.com/mhaya/game/game_cluster/internal/mdb/eventmodels"
+	"gorm.io/driver/clickhouse"
+	"gorm.io/gorm"
+	"gorm.io/gorm/logger"
+)
+
+// `insert into assets_event_contents (user_id, user_name, tg_id, x_id, parent_user_id, is_robot, points_rank_seq,
+//                                    throw_dice_rank_seq, invite_user_rank_seq, is_success, create_at, operation_type,
+//                                    currency, reason, before_balance, amount, after_balance, server_id)
+// values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
+
+func main() {
+	dsn := "clickhouse://default:123456@192.168.0.193:9000/default?dial_timeout=10s&read_timeout=20s"
+
+	newLogger := logger.New(
+		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer(日志输出的地方,这里是标准输出)
+		logger.Config{
+			SlowThreshold: time.Second, // 慢 SQL 阈值
+			LogLevel:      logger.Info, // 日志级别
+			Colorful:      true,        // 彩色打印
+		},
+	)
+
+	db, err := gorm.Open(clickhouse.Open(dsn), &gorm.Config{
+		Logger: newLogger,
+	})
+	if err != nil {
+		panic("failed to connect database")
+	}
+
+	datas := make([]*eventmodels.AssetsEventContent, 0, 8)
+	count := 100
+
+	names := make([]string, 0, 8)
+	for i := 0; i < 10; i++ {
+		name := faker.Name()
+		names = append(names, name)
+	}
+
+	server_id := "m-web-admin-1"
+	for i := 0; i < count; i++ {
+		index := rand.Intn(len(names))
+		user_id := names[index]
+		user_name := names[index]
+		tg_id := faker.Name()
+		x_id := faker.Name()
+		parent_user_id := names[index]
+		is_robot := false
+		points_rank_seq := faker.RandomUnixTime()
+		throw_dice_rank_seq := faker.RandomUnixTime()
+		invite_user_rank_seq := faker.RandomUnixTime()
+		is_success := func() bool {
+			return rand.Intn(2) == 1
+		}
+		create_at := faker.RandomUnixTime()
+		operation_type := func() string {
+			if rand.Intn(2) == 1 {
+				return "increase"
+			}
+			return "decrease"
+		}
+		currency := func() string {
+			index := rand.Intn(3)
+			if index == 1 {
+				return "POINTS"
+			}
+			if index == 2 {
+				return "TON"
+			}
+			return "USDT"
+		}
+		reason := func() string {
+			if rand.Intn(2) == 1 {
+				return "reason"
+			}
+			return ""
+		}
+		var before_balance int64
+		var amount int64
+		var after_balance int64
+		before_balance = rand.Int63n(100000)
+		amount = rand.Int63n(1000)
+		after_balance = before_balance + amount
+
+		// email := faker.Email()
+		// address := faker.Address()
+		// phone := faker.Phone()
+
+		datas = append(datas, &eventmodels.AssetsEventContent{
+			UserBasic: eventmodels.UserBasic{
+				UserId:            user_id,
+				UserName:          user_name,
+				TgId:              tg_id,
+				XId:               x_id,
+				ParentUserId:      parent_user_id,
+				IsRobot:           is_robot,
+				PointsRankSeq:     points_rank_seq,
+				ThrowDiceRankSeq:  throw_dice_rank_seq,
+				InviteUserRankSeq: invite_user_rank_seq,
+			},
+			EventBasic: eventmodels.EventBasic{
+				ServerId:  server_id,
+				IsSuccess: is_success(),
+				CreateAt:  create_at,
+			},
+			OperationType: operation_type(),
+			Currency:      currency(),
+			Reason:        reason(),
+			BeforeBalance: before_balance,
+			Amount:        amount,
+			AfterBalance:  after_balance,
+		})
+	}
+
+	err = db.CreateInBatches(datas, len(datas)).Error
+	if err != nil {
+		fmt.Printf("CreateInBatches error:%v", err)
+		return
+	}
+
+	// sqlStr := `select SUM(amount) as total_amount from assets_event_contents where user_id = ? and currency = ?`
+	var total_amount int64
+	for _, name := range names {
+		// err := db.Raw(sqlStr, name, "USDT").Pluck("SUM(amount) as total_amount", &total_amount).Error
+		// if err != nil {
+		// 	fmt.Printf("Pluck error:%v", err)
+		// 	return
+		// }
+
+		where := &eventmodels.AssetsEventContent{
+			UserBasic: eventmodels.UserBasic{
+				UserId: name,
+				// UserId: "1", // 不存在的用户
+			},
+			EventBasic: eventmodels.EventBasic{
+				ServerId: server_id,
+			},
+			Currency: "USDT",
+		}
+		err := db.Model(&eventmodels.AssetsEventContent{}).Where(where).Pluck("SUM(amount) as total_amount", &total_amount).Error
+		if err != nil {
+			fmt.Printf("Pluck error:%v", err)
+			return
+		}
+
+		fmt.Printf("name:%s total_amount:%v", name, total_amount)
+	}
+}

+ 2 - 1
game/go.mod

@@ -6,6 +6,7 @@ toolchain go1.22.4
 
 require (
 	github.com/aws/aws-sdk-go v1.55.5
+	github.com/bxcodec/faker/v3 v3.8.1
 	github.com/gin-gonic/gin v1.10.0
 	github.com/go-redis/redis/v8 v8.11.5
 	github.com/go-sql-driver/mysql v1.8.1
@@ -23,6 +24,7 @@ require (
 	go.mongodb.org/mongo-driver v1.16.1
 	golang.org/x/crypto v0.26.0
 	google.golang.org/protobuf v1.34.1
+	gorm.io/driver/clickhouse v0.6.1
 	gorm.io/driver/mysql v1.5.7
 	gorm.io/gorm v1.25.11
 )
@@ -106,7 +108,6 @@ require (
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
 	google.golang.org/grpc v1.59.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/driver/clickhouse v0.6.1 // indirect
 )
 
 replace (

+ 2 - 0
game/go.sum

@@ -8,6 +8,8 @@ github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1
 github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
 github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
 github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
+github.com/bxcodec/faker/v3 v3.8.1 h1:qO/Xq19V6uHt2xujwpaetgKhraGCapqY2CRWGD/SqcM=
+github.com/bxcodec/faker/v3 v3.8.1/go.mod h1:DdSDccxF5msjFo5aO4vrobRQ8nIApg8kq3QWPEQD6+o=
 github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
 github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
 github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=