diff --git a/controllers/tracker_controller.go b/controllers/tracker_controller.go index a9245b9..2b5d47d 100644 --- a/controllers/tracker_controller.go +++ b/controllers/tracker_controller.go @@ -4,10 +4,12 @@ import ( "InfantrySkillCalculator/models" "InfantrySkillCalculator/utils" "encoding/json" + "errors" "fmt" "github.com/gin-gonic/gin" "io" "math" + "net" "net/http" "sort" ) @@ -23,7 +25,7 @@ func GetScoreByPlayerID(c *gin.Context) { } score, err := models.PlayerCache.GetScore(player.ID) - var statusCode int = http.StatusOK + var statusCode = http.StatusOK if err != nil || score == -1 { score, statusCode = GetPlayerScoreNew(player.Name) if score == score && score != -1 { // not NaN @@ -39,7 +41,7 @@ func GetScoreByPlayerID(c *gin.Context) { c.String(200, fmt.Sprintf("%.2f", score)) case 404: c.String(200, "") - case 503, 504: + case 503, 504, 408: c.String(statusCode, "") default: c.String(statusCode, "") @@ -57,7 +59,7 @@ func GetScoreByPlayerName(c *gin.Context) { c.String(200, fmt.Sprintf("%.2f", score)) case 404: c.String(200, "Spieler nicht gefunden!") - case 503, 504: + case 503, 504, 408: c.String(statusCode, "Tracker nicht erreichbar!") default: c.String(statusCode, "Ungültige Abfrage!") @@ -75,6 +77,9 @@ func GetPlayerScore(playerName string) (float32, int) { func GetPlayerScoreNew(playerName string) (float32, int) { playerData, statusCode := getPlayerData(playerName) + if statusCode == 408 { // retry once + playerData, statusCode = getPlayerData(playerName) + } if statusCode != 200 { return -1, statusCode } @@ -95,6 +100,12 @@ func getPlayerData(playerName string) (*models.TrackerDataJSON, int) { res, err := c.Do(req) if err != nil { + var e net.Error + if errors.As(err, &e) && e.Timeout() { + utils.Logger.Errorf("[SCORE] Request timeout!") + return nil, 408 + } + utils.Logger.Errorf("[SCORE] Failed to send request: %s", err.Error()) return nil, 0 } diff --git a/templates/modals/add_player.html b/templates/modals/add_player.html index 6afc3e5..c65347b 100644 --- a/templates/modals/add_player.html +++ b/templates/modals/add_player.html @@ -35,8 +35,8 @@ let selectedClan = null; const submitButton = addPlayerModal.querySelector('button[name="submit"]'); - const playerName = addPlayerModal.querySelector('#addPlayerClanName'); - const clanName = addPlayerModal.querySelector('#playerClanName'); + const playerName = addPlayerModal.querySelector('#addPlayerName'); + const clanName = addPlayerModal.querySelector('#addPlayerClanName'); const errorDiv = addPlayerModal.querySelector('.error-message'); const homeClanList = document.getElementById('home-clan'); const oppClanList = document.getElementById('opponent-clan');