in pkg/server/meta/accident.go [51:114]
func CreateGetAccidentsAroundDateRequestHandler(metaDb *pgxpool.Pool) http.HandlerFunc {
type date struct {
Date string `json:"date"`
}
return func(writer http.ResponseWriter, request *http.Request) {
body := request.Body
all, err := io.ReadAll(body)
if err != nil {
slog.Error("Cannot read body", "error", err)
writer.WriteHeader(http.StatusInternalServerError)
return
}
defer body.Close()
var params date
if err = json.Unmarshal(all, ¶ms); err != nil {
slog.Error("Cannot unmarshal parameters", "error", err)
writer.WriteHeader(http.StatusInternalServerError)
return
}
sql := "SELECT id, date, affected_test, reason, build_number, kind, stacktrace, user_name FROM accidents WHERE (LOWER(kind)='regression' or LOWER(kind)='improvement' or LOWER(kind)='investigation') AND date BETWEEN '" + params.Date + "'::date - INTERVAL '1 days' AND '" + params.Date + "'::date + INTERVAL '1 days'"
rows, err := metaDb.Query(request.Context(), sql)
if err != nil {
slog.Error("unable to execute the query", "query", sql, "error", err)
writer.WriteHeader(http.StatusInternalServerError)
return
}
defer rows.Close()
accidents, err := pgx.CollectRows(rows, func(row pgx.CollectableRow) (accidentResponse, error) {
var id int64
var date pgtype.Date
var affectedTest, reason, buildNumber, kind, stacktrace, userName string
err := row.Scan(&id, &date, &affectedTest, &reason, &buildNumber, &kind, &stacktrace, &userName)
return accidentResponse{
ID: id,
Date: date.Time.String(),
AffectedTest: affectedTest,
Reason: reason,
BuildNumber: buildNumber,
Kind: kind,
Stacktrace: stacktrace,
UserName: userName,
}, err
})
if err != nil {
slog.Error("unable to collect rows", "error", err)
writer.WriteHeader(http.StatusInternalServerError)
return
}
jsonBytes, err := json.Marshal(accidents)
if err != nil {
slog.Error("unable to marshal accidents", "accidents", accidents, "error", err)
writer.WriteHeader(http.StatusInternalServerError)
return
}
_, err = writer.Write(jsonBytes)
if err != nil {
slog.Error("unable to write response", "error", err)
writer.WriteHeader(http.StatusInternalServerError)
}
}
}