From 5c14017a78e5e5707171510187ef3af5e98e6cd0 Mon Sep 17 00:00:00 2001 From: kirby Date: Fri, 22 Mar 2024 16:00:06 +0100 Subject: [PATCH] adding server handling --- Database/os.go | 2 +- Database/server.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++ Http/os.go | 8 ++++++- Http/server.go | 52 ++++++++++++++++++++++++++++++++++++++++++ main.go | 3 +++ 5 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 Database/server.go create mode 100644 Http/server.go diff --git a/Database/os.go b/Database/os.go index aceea4d..7817a12 100644 --- a/Database/os.go +++ b/Database/os.go @@ -33,7 +33,7 @@ func GetOS(db *sql.DB) ([]OS, error) { return oses, err } -func GetOSbyID(db *sql.DB, id string) (OS, error) { +func GetOSbyID(db *sql.DB, id int64) (OS, error) { var os OS if err := db.QueryRow("SELECT * FROM dashboard_os where id = ?", id).Scan(&os.ID, &os.Distribution, &os.Version, &os.End_of_support); err != nil { if err == sql.ErrNoRows { diff --git a/Database/server.go b/Database/server.go new file mode 100644 index 0000000..beb0b9d --- /dev/null +++ b/Database/server.go @@ -0,0 +1,57 @@ +package database + +import ( + "database/sql" + "log" +) + +type Server struct { + ID int `json:"id"` + Hostname string `json:"hostname"` + Os_id int `json:"os_id"` +} + +func GetServersList(db *sql.DB) ([]Server, error) { + var servers []Server + rows, err := db.Query("SELECT * FROM dashboard_server") + if err != nil { + log.Println("Error querying servers list", err) + } + defer rows.Close() + + for rows.Next() { + var s Server + err := rows.Scan(&s.ID, &s.Hostname, &s.Os_id) + if err != nil { + log.Println("Error building servers list", err) + } + servers = append(servers, s) + } + return servers, err +} + +func GetServersbyID(db *sql.DB, id int64) Server { + var s Server + rows := db.QueryRow("SELECT * FROM dashboard_server WHERE id = ?", id) + rows.Scan(&s.ID, &s.Hostname, &s.Os_id) + return s +} + +func GetServersbyOS(db *sql.DB, id int) ([]Server, error) { + var servers []Server + rows, err := db.Query("SELECT * FROM dashboard_server WHERE os_id = ?", id) + if err != nil { + log.Println("Error querying servers list by os_id", err) + } + defer rows.Close() + + for rows.Next() { + var s Server + err := rows.Scan(&s.ID, &s.Hostname, &s.Os_id) + if err != nil { + log.Println("Error building servers list", err) + } + servers = append(servers, s) + } + return servers, err +} diff --git a/Http/os.go b/Http/os.go index 09bbf51..a7fb5df 100644 --- a/Http/os.go +++ b/Http/os.go @@ -6,6 +6,7 @@ import ( "io" "log" "net/http" + "strconv" "time" "github.com/gorilla/mux" @@ -41,7 +42,12 @@ func GetOSbyID(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) db_conn := db.GetDatabaseConnection() defer db_conn.Close() - os, err = db.GetOSbyID(db_conn, params["id"]) + id, err := strconv.ParseInt(params["id"], 10, 64) + if err != nil { + log.Println("Error converting ID", err) + status = 500 + } + os, err = db.GetOSbyID(db_conn, int64(id)) if err != nil { log.Println("Error getting OS") status = 500 diff --git a/Http/server.go b/Http/server.go new file mode 100644 index 0000000..8d8f634 --- /dev/null +++ b/Http/server.go @@ -0,0 +1,52 @@ +package http + +import ( + "encoding/json" + db "infra-dashboard/Database" + "log" + "net/http" + "strconv" + "time" + + "github.com/gorilla/mux" +) + +func GetServersList(w http.ResponseWriter, r *http.Request) { + var list []db.Server + var err error + + t := time.Now() + status := 200 + + db_conn := db.GetDatabaseConnection() + defer db_conn.Close() + list, err = db.GetServersList(db_conn) + if err != nil { + log.Println("Error getting OS list") + status = 500 + } + logRequest(t, r, status) + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(list) +} + +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 + } + db_conn := db.GetDatabaseConnection() + defer db_conn.Close() + server = db.GetServersbyID(db_conn, int64(id)) + logRequest(t, r, status) + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(server) +} diff --git a/main.go b/main.go index c9406c7..76758db 100644 --- a/main.go +++ b/main.go @@ -34,5 +34,8 @@ func main() { router.HandleFunc("/os/distribution", h.GetDistributionList).Methods("GET") router.HandleFunc("/os/distribution/{distribution:[a-zA-Z]+}/versions", h.GetVersionsByDistributionList).Methods("GET") + router.HandleFunc("/servers", h.GetServersList).Methods("GET") + router.HandleFunc("/server/{id:[0-9]+}", h.GetServersbyID).Methods("GET") + log.Fatal(http.ListenAndServe(":8080", router)) }