package main import ( "database/sql" "encoding/json" "fmt" "time" ) var logData string var logAdmin string var logDetail string func init() { go loadLog() } func loadLog() { logData = "[]" logAdmin = "[]" logDetail = "[]" ticker := time.NewTicker(3 * time.Second) for { // user rows, err := db.Query("select UNIX_TIMESTAMP(`log`.`time`), `user`.`name`, `log`.`type` from `log` LEFT JOIN `user` on `log`.`uid` = `user`.`id` where `log`.`type` != 0 AND `log`.`type` != 3 order by `log`.`time` desc LIMIT 50") if err != nil { logData = "[]" fmt.Printf("loadLog query error: %s\n", err) continue } var data []*LogData for rows.Next() { d := &LogData{} rows.Scan(&d.Time, &d.Name, &d.Type) data = append(data, d) } rows.Close() j, err := json.Marshal(data) if err != nil { logData = "[]" fmt.Printf("loadLog json error: %s\n", err) continue } logData = string(j) // admin rows, err = db.Query("select UNIX_TIMESTAMP(`log`.`time`), `user`.`name`, `log`.`type`, `log`.`admin_msg` from `log` LEFT JOIN `user` on `log`.`uid` = `user`.`id` order by `log`.`time` desc") if err != nil { logAdmin = "[]" fmt.Printf("loadLog query error: %s\n", err) continue } var dataAdmin []*LogDataAdmin for rows.Next() { d := &LogDataAdmin{} rows.Scan(&d.Time, &d.Name, &d.Type, &d.Msg) dataAdmin = append(dataAdmin, d) } rows.Close() j, err = json.Marshal(dataAdmin) if err != nil { logAdmin = "[]" fmt.Printf("loadLog json error: %s\n", err) continue } logAdmin = string(j) // select detail rows, err = db.Query("call get_log_details()") if err != nil { logDetail = "[]" fmt.Printf("loadLog query error: %s\n", err) continue } var dataDetails []*LogDataDetails for rows.Next() { d := &LogDataDetails{} var t sql.NullInt64 err = rows.Scan(&d.Uid, &d.Name, &t, &d.Fail) d.Time = int(t.Int64) dataDetails = append(dataDetails, d) } rows.Close() j, err = json.Marshal(dataDetails) if err != nil { logDetail = "[]" fmt.Printf("loadLog json error: %s\n", err) continue } logDetail = string(j) <-ticker.C } }