This commit is contained in:
poiuty 2022-08-12 20:40:24 +03:00
parent 53e34904b0
commit e5c5435069

View file

@ -59,34 +59,23 @@ func getSumTokens() int64 {
func saveDB() { func saveDB() {
hours, _, _ := time.Now().Clock() hours, _, _ := time.Now().Clock()
bulk := make(map[int]saveData) bulk := []saveData{}
update := make(map[int64]int64) update := []struct {
Rid int64
Now int64
}{}
data := make(map[string]*DonatorCache) data := make(map[string]*DonatorCache)
index := make(map[string]int64) index := make(map[string]int64)
ticker := time.NewTicker(10 * time.Second)
index = map[string]int64{"hours": int64(hours), "tokens": getSumTokens(), "last": time.Now().Unix()} index = map[string]int64{"hours": int64(hours), "tokens": getSumTokens(), "last": time.Now().Unix()}
for { for {
select { select {
case m := <-save: case <-ticker.C:
//fmt.Println("Save channel:", len(save), cap(save)) if len(bulk) > 0 {
now := time.Now().Unix()
if _, ok := data[m.From]; ok {
data[m.From].Last = now
} else {
data[m.From] = &DonatorCache{Id: getDonId(m.From), Last: now}
}
num := len(bulk)
bulk[num] = m
update[m.Rid] = m.Now
if num > 512 {
tx, err := Mysql.Begin() tx, err := Mysql.Begin()
if err == nil { if err == nil {
st, _ := tx.Prepare("INSERT INTO `stat` (`did`, `rid`, `token`, `time`) VALUES (?, ?, ?, ?)") st, _ := tx.Prepare("INSERT INTO `stat` (`did`, `rid`, `token`, `time`) VALUES (?, ?, ?, ?)")
@ -100,8 +89,8 @@ func saveDB() {
tx, err = Mysql.Begin() tx, err = Mysql.Begin()
if err == nil { if err == nil {
st, _ := tx.Prepare("UPDATE `room` SET `last` = ? WHERE `id` = ?") st, _ := tx.Prepare("UPDATE `room` SET `last` = ? WHERE `id` = ?")
for k, v := range update { for _, v := range update {
st.Exec(v, k) st.Exec(v.Now, v.Rid)
} }
tx.Commit() tx.Commit()
st.Close() st.Close()
@ -117,11 +106,30 @@ func saveDB() {
st.Close() st.Close()
} }
bulk = make(map[int]saveData) bulk = nil
update = make(map[int64]int64) update = nil
}
case m := <-save:
//fmt.Println("Save channel:", len(save), cap(save))
now := time.Now().Unix()
if _, ok := data[m.From]; ok {
data[m.From].Last = now
} else {
data[m.From] = &DonatorCache{Id: getDonId(m.From), Last: now}
} }
if m.Amount > 99 { bulk = append(bulk, m)
update = append(update, struct {
Rid int64
Now int64
}{
Rid: m.Rid,
Now: m.Now,
})
if m.Amount > 49 {
msg, err := json.Marshal(struct { msg, err := json.Marshal(struct {
Room string `json:"room"` Room string `json:"room"`
Donator string `json:"donator"` Donator string `json:"donator"`
@ -146,8 +154,8 @@ func saveDB() {
if minutes >= 5 && now > index["last"]+30 { if minutes >= 5 && now > index["last"]+30 {
seconds += minutes * 60 seconds += minutes * 60
msg, err := json.Marshal(struct { msg, err := json.Marshal(struct {
Index int64 `json:"index"` Index float64 `json:"index"`
}{Index: index["tokens"] / int64(seconds) * 3600 / 1000 * 5 / 100}) }{Index: float64(index["tokens"]) / float64(seconds) * 3600 * 0.025 / 1000})
if err == nil { if err == nil {
ws.Send <- msg ws.Send <- msg
} }
@ -168,25 +176,26 @@ func saveDB() {
} }
func saveLogs() { func saveLogs() {
bulk := make(map[int]saveLog) bulk := []saveLog{}
ticker := time.NewTicker(10 * time.Second)
for { for {
select { select {
case <-ticker.C:
if len(bulk) > 0 {
tx, err := Mysql.Begin()
if err == nil {
st, _ := tx.Prepare("INSERT INTO `logs` (`rid`, `time`, `mes`) VALUES (?, ?, ?)")
for _, v := range bulk {
st.Exec(v.Rid, v.Now, v.Mes)
}
tx.Commit()
st.Close()
}
bulk = nil
}
case m := <-slog: case m := <-slog:
if len(m.Mes) > 0 { if len(m.Mes) > 0 {
num := len(bulk) bulk = append(bulk, m)
bulk[num] = m
if num > 2048 {
tx, err := Mysql.Begin()
if err == nil {
st, _ := tx.Prepare("INSERT INTO `logs` (`rid`, `time`, `mes`) VALUES (?, ?, ?)")
for _, v := range bulk {
st.Exec(v.Rid, v.Now, v.Mes)
}
tx.Commit()
st.Close()
}
bulk = make(map[int]saveLog)
}
} }
} }
} }