package handlers import ( "html/template" "net/http" "strconv" "strings" ) type ResultHandler struct { Tmpl *template.Template } type SuccessData struct { LevelName string Score int TargetRPS int AchievedRPS int TargetLatency int ActualLatency float64 Availability float64 Feedback []string LevelID string } type FailureData struct { LevelName string Reason string TargetRPS int AchievedRPS int TargetLatency int ActualLatency float64 TargetAvail float64 ActualAvail float64 FailedReqs []string LevelID string } func (r *ResultHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { // Default to success page for backward compatibility data := SuccessData{ LevelName: "Demo Level", Score: 85, TargetRPS: 10000, AchievedRPS: 10417, TargetLatency: 200, ActualLatency: 87, Availability: 99.9, Feedback: []string{"All requirements met successfully!"}, LevelID: "demo", } if err := r.Tmpl.ExecuteTemplate(w, "success.html", data); err != nil { http.Error(w, "Template Error", http.StatusInternalServerError) } } type SuccessHandler struct { Tmpl *template.Template } func (h *SuccessHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { data := SuccessData{ LevelName: req.URL.Query().Get("level"), Score: parseInt(req.URL.Query().Get("score"), 85), TargetRPS: parseInt(req.URL.Query().Get("targetRPS"), 10000), AchievedRPS: parseInt(req.URL.Query().Get("achievedRPS"), 10417), TargetLatency: parseInt(req.URL.Query().Get("targetLatency"), 200), ActualLatency: parseFloat(req.URL.Query().Get("actualLatency"), 87), Availability: parseFloat(req.URL.Query().Get("availability"), 99.9), Feedback: parseStringSlice(req.URL.Query().Get("feedback")), LevelID: req.URL.Query().Get("levelId"), } if data.LevelName == "" { data.LevelName = "System Design Challenge" } if len(data.Feedback) == 0 { data.Feedback = []string{"All requirements met successfully!"} } if err := h.Tmpl.ExecuteTemplate(w, "success.html", data); err != nil { http.Error(w, "Template Error", http.StatusInternalServerError) } } type FailureHandler struct { Tmpl *template.Template } func (h *FailureHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { data := FailureData{ LevelName: req.URL.Query().Get("level"), Reason: req.URL.Query().Get("reason"), TargetRPS: parseInt(req.URL.Query().Get("targetRPS"), 10000), AchievedRPS: parseInt(req.URL.Query().Get("achievedRPS"), 2847), TargetLatency: parseInt(req.URL.Query().Get("targetLatency"), 200), ActualLatency: parseFloat(req.URL.Query().Get("actualLatency"), 1247), TargetAvail: parseFloat(req.URL.Query().Get("targetAvail"), 99.9), ActualAvail: parseFloat(req.URL.Query().Get("actualAvail"), 87.3), FailedReqs: parseStringSlice(req.URL.Query().Get("failedReqs")), LevelID: req.URL.Query().Get("levelId"), } if data.LevelName == "" { data.LevelName = "System Design Challenge" } if data.Reason == "" { data.Reason = "performance" } if len(data.FailedReqs) == 0 { data.FailedReqs = []string{"Latency exceeded target", "Availability below requirement"} } if err := h.Tmpl.ExecuteTemplate(w, "failure.html", data); err != nil { http.Error(w, "Template Error", http.StatusInternalServerError) } } // Helper functions func parseInt(s string, defaultValue int) int { if s == "" { return defaultValue } if val, err := strconv.Atoi(s); err == nil { return val } return defaultValue } func parseFloat(s string, defaultValue float64) float64 { if s == "" { return defaultValue } if val, err := strconv.ParseFloat(s, 64); err == nil { return val } return defaultValue } func parseStringSlice(s string) []string { if s == "" { return []string{} } // Split by pipe character for multiple values return strings.Split(s, "|") }