mirror of
https://github.com/statbate/animated-sniffle.git
synced 2026-08-11 02:12:41 +00:00
update
This commit is contained in:
parent
53e34904b0
commit
e5c5435069
1 changed files with 52 additions and 43 deletions
95
app/save.go
95
app/save.go
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue