Last active
October 26, 2017 08:50
-
-
Save hto/8205fecfa1d7a68030e6d6d4af2f164f to your computer and use it in GitHub Desktop.
user_data | go run main.go -redisPort=6379 -redisQPort=6379 -mysqlHost=localhost -mysqlUsername=root -mysqlPassword=root -mysqlDB=headball -mysqlPort=8889
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"io" | |
"os" | |
"time" | |
"flag" | |
"strings" | |
"log" | |
"encoding/json" | |
"github.com/go-redis/redis" | |
_ "github.com/go-sql-driver/mysql" | |
"database/sql" | |
) | |
var redisClient *redis.Client | |
var ( | |
redisPort = flag.String("redisPort", "6379", "Redis Port") | |
redisQPort = flag.String("redisQPort", "6379", "Redis Port") | |
mysqlHost = flag.String("mysqlHost", "localhost", "Mysql Host") | |
mysqlPort = flag.String("mysqlPort", "3306", "Mysql Port") | |
mysqlDB = flag.String("mysqlDB", "headball", "Mysql Database") | |
mysqlUsername = flag.String("mysqlUsername", "root", "Mysql UserName") | |
mysqlPassword = flag.String("mysqlPassword", "root", "Mysql User Password") | |
) | |
// "{\"gold\":250,\"diamond\":0,\"supporters\":171845,\"win\":0,\"lose\":0,\"draw\":0,\"matches\":0,\"update\":1490024625,\"lastmatchtime\":1490024625,\"level\":1,\"stadium\":1,\"energy\":20,\"energyDrink\":10,\"energyTtl\":0,\"experience\":120,\"metrics\":{\"1\":1,\"2\":1,\"3\":1,\"4\":1}}" | |
type UserData struct { | |
Gold int `json:"gold"` | |
Diamond int `json:"diamond"` | |
Supporters int `json:"supporters"` | |
Win int `json:"win"` | |
Lose int `json:"lose"` | |
Draw int `json:"draw"` | |
Matches int `json:"matches"` | |
Level int `json:"level"` | |
Stadium int `json:"stadium"` | |
Energy int `json:"energy"` | |
EnergyDrink int `json:"energyDrink"` | |
Experience int `json:"experience"` | |
LastMatchTime int `json:"lastmatchtime"` | |
} | |
var ( | |
Error *log.Logger | |
) | |
func Init(errorHandle io.Writer) { | |
f, _ := os.OpenFile("/var/log/syncUserData.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666) | |
Error = log.New(f, | |
"ERROR: ", | |
log.Ldate|log.Ltime|log.Lshortfile) | |
} | |
func main(){ | |
Init(os.Stderr) | |
flag.Parse() | |
redisClient := redis.NewClient(&redis.Options{ | |
Addr: "localhost:" + *redisPort, | |
Password: "", // no password set | |
DB: 0, // use default DB | |
}) | |
redisQClient := redis.NewClient(&redis.Options{ | |
Addr: "localhost:" + *redisQPort, | |
Password: "", // no password set | |
DB: 0, // use default DB | |
}) | |
_, err := redisClient.Ping().Result() | |
if err != nil { | |
Error.Println("Redis Not Connected - 1") | |
} | |
_, err = redisQClient.Ping().Result() | |
if err != nil { | |
Error.Println("RedisQ Not Connected - 1") | |
} | |
db, errDb := sql.Open("mysql", *mysqlUsername + ":" + *mysqlPassword + "@tcp(" + *mysqlHost + ":" + *mysqlPort + ")/" + *mysqlDB) | |
if errDb != nil { | |
Error.Println("Mysql Not Connected - 1") | |
} | |
defer db.Close() | |
// Sonsuz Döngü | |
for { | |
err = db.Ping() | |
if err != nil { | |
// Db Erişimi yok ise | |
time.Sleep(15 * time.Second) | |
Error.Println("Mysql Not Connected - 2") | |
db, errDb = sql.Open("mysql", *mysqlUsername + ":" + *mysqlPassword + "@tcp(" + *mysqlHost + ":" + *mysqlPort + ")/" + *mysqlDB) | |
if errDb != nil { | |
Error.Println("Mysql Not Connected - 3") | |
} | |
continue | |
} | |
_, err = redisClient.Ping().Result() | |
if err != nil { | |
Error.Println("Redis Not Connected - 2") | |
time.Sleep(15 * time.Second) | |
redisClient = redis.NewClient(&redis.Options{ | |
Addr: "localhost:" + *redisPort, | |
Password: "", // no password set | |
DB: 0, // use default DB | |
}) | |
continue | |
} | |
_, err = redisQClient.Ping().Result() | |
if err != nil { | |
Error.Println("RedisQ Not Connected - 2") | |
time.Sleep(15 * time.Second) | |
redisQClient = redis.NewClient(&redis.Options{ | |
Addr: "localhost:" + *redisQPort, | |
Password: "", // no password set | |
DB: 0, // use default DB | |
}) | |
continue | |
} | |
txn, errBegin := db.Begin() | |
if errBegin != nil { | |
Error.Println(errBegin) | |
Error.Println("begin txn err") | |
} | |
update, errDb := txn.Prepare("update user_data set "+ | |
"supporters=? ,"+ | |
"gold=? ,"+ | |
"diamond=? ,"+ | |
"matches=? ,"+ | |
"win=? ,"+ | |
"lose=? ,"+ | |
"draw=? ,"+ | |
"level=? ,"+ | |
"stadium=? ,"+ | |
"energy=? ,"+ | |
"energyDrink=? ,"+ | |
"experience=? ,"+ | |
"lastmatchtime=? "+ | |
"where userid=?") | |
if errDb != nil { | |
Error.Println(errDb) | |
Error.Println("Mysql Update Error !!") | |
} | |
for i := 0; i < 999; i++ { | |
queue := redisQClient.SPop("queue:userdata") | |
if queue != nil && len(queue.Val()) > 0 { | |
// "{\"gold\":250,\"diamond\":0,\"supporters\":171845,\"win\":0,\"lose\":0,\"draw\":0,\"matches\":0,\"update\":1490024625,\"lastmatchtime\":1490024625,\"level\":1,\"stadium\":1,\"energy\":20,\"energyDrink\":10,\"energyTtl\":0,\"experience\":120,\"metrics\":{\"1\":1,\"2\":1,\"3\":1,\"4\":1}}" | |
userData := redisClient.HGet("user_data", queue.Val()) | |
if userData.Val() == "" { | |
continue | |
} | |
dec := json.NewDecoder(strings.NewReader(userData.Val())) | |
var ud UserData | |
err := dec.Decode(&ud); | |
if err != nil { | |
Error.Println(err) | |
continue | |
} | |
_, updateErr := update.Exec( | |
ud.Supporters, | |
ud.Gold, | |
ud.Diamond, | |
ud.Matches, | |
ud.Win, | |
ud.Lose, | |
ud.Draw, | |
ud.Level, | |
ud.Stadium, | |
ud.Energy, | |
ud.EnergyDrink, | |
ud.Experience, | |
ud.LastMatchTime, | |
queue.Val()) | |
if updateErr != nil { | |
Error.Println(updateErr) | |
Error.Println("Mysql Update Error - 2 - !!") | |
continue | |
} | |
} | |
} | |
errCommit := txn.Commit() | |
if errCommit != nil { | |
Error.Println(errCommit) | |
} | |
//rowCount, _ := result.RowsAffected() | |
//log.Printf("%d row copied\n", rowCount) | |
//fmt.Println("%d row copied\n", rowCount) | |
// 15sn dinlenme | |
time.Sleep(15 * time.Second) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
`level` int(11) DEFAULT '1', | |
`stadium` int(11) DEFAULT '1', | |
`energy` int(11) DEFAULT '0', | |
`energyDrink` int(11) DEFAULT '0', | |
`experience` int(11) DEFAULT '0', |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment