mirror of
https://github.com/pagefaultgames/rogueserver.git
synced 2025-04-02 02:57:15 +08:00
feat: Refactor system save data handling to use JSON and improve error logging
This commit is contained in:
parent
e0633b86a7
commit
72426e5932
@ -24,6 +24,7 @@ import (
|
|||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
@ -95,6 +96,7 @@ func Init() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
S3SaveMigration()
|
||||||
_, err = s3scheduler.AddFunc("@weekly", func() {
|
_, err = s3scheduler.AddFunc("@weekly", func() {
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
S3SaveMigration()
|
S3SaveMigration()
|
||||||
@ -139,19 +141,19 @@ func S3SaveMigration() {
|
|||||||
}
|
}
|
||||||
accounts := db.RetrieveOldAccounts()
|
accounts := db.RetrieveOldAccounts()
|
||||||
for _, user := range accounts {
|
for _, user := range accounts {
|
||||||
// retrieve save data from db
|
data, _ := db.ReadSystemSaveData(user)
|
||||||
data, _ := db.RetrieveRawSystemData(user)
|
|
||||||
username, _ := db.FetchUsernameFromUUID(user)
|
username, _ := db.FetchUsernameFromUUID(user)
|
||||||
|
json, _ := json.Marshal(data)
|
||||||
_, err := svc.PutObject(context.Background(), &s3.PutObjectInput{
|
_, err := svc.PutObject(context.Background(), &s3.PutObjectInput{
|
||||||
Bucket: aws.String("pokerogue-system"),
|
Bucket: aws.String("pokerogue-system"),
|
||||||
Key: aws.String(username),
|
Key: aws.String(username),
|
||||||
Body: bytes.NewReader(data),
|
Body: bytes.NewReader(json),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error while saving data in s3 for user %s: %s", user, err)
|
log.Printf("error while saving data in s3 for user %s: %s", username, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fmt.Printf("Saved data in s3 for user %s\n", user)
|
fmt.Printf("Saved data in s3 for user %s\n", username)
|
||||||
db.UpdateLocation(user, username)
|
db.UpdateLocation(user, username)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -420,6 +420,7 @@ func handleSystem(w http.ResponseWriter, r *http.Request) {
|
|||||||
if errors.Is(err, sql.ErrNoRows) {
|
if errors.Is(err, sql.ErrNoRows) {
|
||||||
http.Error(w, err.Error(), http.StatusNotFound)
|
http.Error(w, err.Error(), http.StatusNotFound)
|
||||||
} else {
|
} else {
|
||||||
|
fmt.Printf("failed to get system save data: %s\n", err)
|
||||||
httpError(w, r, err, http.StatusInternalServerError)
|
httpError(w, r, err, http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/gob"
|
"encoding/gob"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/klauspost/compress/zstd"
|
"github.com/klauspost/compress/zstd"
|
||||||
@ -62,7 +63,6 @@ func ReadSystemSaveData(uuid []byte) (defs.SystemSaveData, error) {
|
|||||||
var system defs.SystemSaveData
|
var system defs.SystemSaveData
|
||||||
|
|
||||||
isLocal, err := isSaveInLocalDb(uuid)
|
isLocal, err := isSaveInLocalDb(uuid)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return system, err
|
return system, err
|
||||||
}
|
}
|
||||||
@ -242,22 +242,29 @@ func RetrieveSystemSaveFromS3(uuid []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var data []byte
|
var session defs.SystemSaveData
|
||||||
_, err = resp.Body.Read(data)
|
json.NewDecoder(resp.Body).Decode(&session)
|
||||||
if err != nil {
|
|
||||||
return err
|
err = StoreSystemSaveData(uuid, session)
|
||||||
}
|
|
||||||
|
|
||||||
_, err = handle.Exec("REPLACE INTO systemSaveData (uuid, data, timestamp) VALUES (?, ?, UTC_TIMESTAMP())", uuid, data)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fmt.Printf("Failed to store system save data from s3 for user %s\n", username)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
fmt.Printf("Retrieved system save data from s3 for user %s\n", username)
|
||||||
|
|
||||||
_, err = handle.Exec("UPDATE accounts SET isInLocalDb = 1 WHERE uuid = ?", uuid)
|
_, err = handle.Exec("UPDATE accounts SET isInLocalDb = 1 WHERE uuid = ?", uuid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err = client.DeleteObject(context.TODO(), &s3.DeleteObjectInput{
|
||||||
|
Bucket: aws.String("pokerogue-system"),
|
||||||
|
Key: aws.String(username),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Failed to delete object %s from s3: %s\n", username, err)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,19 +290,9 @@ func RetrieveOldAccounts() [][]byte {
|
|||||||
return users
|
return users
|
||||||
}
|
}
|
||||||
|
|
||||||
func RetrieveRawSystemData(uuid []byte) ([]byte, error) {
|
|
||||||
var data []byte
|
|
||||||
err := handle.QueryRow("SELECT data FROM systemSaveData WHERE uuid = ?", uuid).Scan(&data)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return data, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func UpdateLocation(uuid []byte, username string) {
|
func UpdateLocation(uuid []byte, username string) {
|
||||||
_, err := handle.Exec("UPDATE accounts SET isInLocalDb = 0 WHERE uuid = ?", uuid)
|
_, err := handle.Exec("UPDATE accounts SET isInLocalDb = 0 WHERE uuid = ?", uuid)
|
||||||
if err == nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to update location for user %s\n", username)
|
fmt.Printf("Failed to update location for user %s\n", username)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user