package http import ( "encoding/json" db "infra-dashboard/Database" "io" "log" "net/http" "strconv" "time" "gopkg.in/guregu/null.v4" "github.com/gorilla/mux" ) func GetServersList(w http.ResponseWriter, r *http.Request) { var list []db.Server var err error t := time.Now() status := 200 dbConn := db.GetDatabaseConnection() defer dbConn.Close() list, err = db.GetServersList(dbConn) if err != nil { log.Println("Error getting OS list") status = 500 } logRequest(t, r, status) w.Header().Set("Content-Type", "application/json") err = json.NewEncoder(w).Encode(list) if err != nil { log.Println("Error getting OS list") return } } func GetServersbyID(w http.ResponseWriter, r *http.Request) { var server db.Server var err error t := time.Now() status := 200 params := mux.Vars(r) id, err := strconv.ParseInt(params["id"], 10, 32) if err != nil { log.Println("Error converting ID", err) status = 500 } dbConn := db.GetDatabaseConnection() defer dbConn.Close() server = db.GetServersbyID(dbConn, int64(id)) logRequest(t, r, status) w.Header().Set("Content-Type", "application/json") err = json.NewEncoder(w).Encode(server) if err != nil { log.Println("Error getting OS list") return } } func GetServersbyOS(w http.ResponseWriter, r *http.Request) { var servers []db.Server var err error t := time.Now() status := 200 params := mux.Vars(r) osId, err := strconv.ParseInt(params["os_id"], 10, 32) if err != nil { log.Println("Error converting ID", err) status = 500 logRequest(t, r, status) w.WriteHeader(status) return } dbConn := db.GetDatabaseConnection() defer dbConn.Close() servers, err = db.GetServersbyOS(dbConn, int64(osId)) if err != nil { log.Println("Error getting servers by OS", err) status = 500 logRequest(t, r, status) w.WriteHeader(status) return } logRequest(t, r, status) w.Header().Set("Content-Type", "application/json") err = json.NewEncoder(w).Encode(servers) if err != nil { log.Println("Error getting OS list") status = 500 logRequest(t, r, status) w.WriteHeader(status) return } } func CreateServer(w http.ResponseWriter, r *http.Request) { var server db.Server var err error t := time.Now() status := 204 body, err := io.ReadAll(r.Body) if err != nil { log.Println(err.Error(), "Error reading request body") } params := make(map[string]null.String) err = json.Unmarshal(body, ¶ms) if err != nil { log.Println(err.Error(), "Error parsing request body") return } server.Hostname = params["hostname"] server.OsId = params["os_id"] dbConn := db.GetDatabaseConnection() defer dbConn.Close() err = db.CreateServer(server, dbConn) if err != nil { log.Println(err.Error(), "Error creating server") status = 500 } logRequest(t, r, status) w.WriteHeader(status) } func DeleteServer(w http.ResponseWriter, r *http.Request) { var server db.Server var err error var status int t := time.Now() body, err := io.ReadAll(r.Body) if err != nil { log.Println(err.Error(), "Error reading request body") } params := make(map[string]null.String) err = json.Unmarshal(body, ¶ms) if err != nil { log.Println(err.Error(), "Error parsing request body") return } server.Hostname = params["hostname"] server.OsId = params["os_id"] dbConn := db.GetDatabaseConnection() defer dbConn.Close() status, err = db.DeleteServer(server, dbConn) if err != nil { log.Println(err.Error(), "Error deleting server") } logRequest(t, r, status) w.WriteHeader(status) }