diff --git a/Database/os.go b/Database/os.go new file mode 100644 index 0000000..80ba92b --- /dev/null +++ b/Database/os.go @@ -0,0 +1,77 @@ +package database + +import ( + "database/sql" + "log" +) + +type OS struct { + ID string `json:"id"` + Distribution string `json:"distribution"` + Version string `json:"version"` + End_of_support string `json:"end_of_support"` +} + +func GetOS(db *sql.DB) ([]OS, error) { + var oses []OS + rows, err := db.Query("SELECT * FROM dashboard_os") + if err != nil { + log.Println("Error querying list of OS", err) + } + defer rows.Close() + + for rows.Next() { + var os OS + err := rows.Scan(&os.ID, &os.Distribution, &os.Version, &os.End_of_support) + if err != nil { + log.Println("Error building list", err) + } + oses = append(oses, os) + } + return oses, err +} + +func GetOSbyID(db *sql.DB, id string) (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 { + return os, nil + } + log.Println("Error getting OS by ID", err) + } + return os, nil +} + +func GetDistributionList(db *sql.DB) ([]string, error) { + var list []string + rows, err := db.Query("SELECT DISTINCT distribution FROM dashboard_os") + if err != nil { + log.Println("Error getting distribution list", err) + } + for rows.Next() { + var os OS + err := rows.Scan(&os.Distribution) + if err != nil { + log.Println("Error building distribution list", err) + } + list = append(list, os.Distribution) + } + return list, nil +} + +func GetVersionByDistributionList(db *sql.DB, d string) ([]string, error) { + var list []string + rows, err := db.Query("SELECT DISTINCT version FROM dashboard_os where distribution = ?", d) + if err != nil { + log.Println("Error getting distribution list", err) + } + for rows.Next() { + var os OS + err := rows.Scan(&os.Distribution) + if err != nil { + log.Println("Error building distribution list", err) + } + list = append(list, os.Distribution) + } + return list, nil +} diff --git a/Database/utils.go b/Database/utils.go index 5d0c753..2c36e16 100644 --- a/Database/utils.go +++ b/Database/utils.go @@ -19,7 +19,6 @@ func dsn() string { } func GetDatabaseConnection() *sql.DB { - log.Println("dsn: ", dsn()) DB_conn, err := sql.Open("mysql", dsn()) if err != nil { log.Println("Database connection error : ", err) diff --git a/Http/utils.go b/Http/utils.go index 418a361..8d033ae 100644 --- a/Http/utils.go +++ b/Http/utils.go @@ -4,11 +4,12 @@ import ( "encoding/json" "fmt" db "infra-dashboard/Database" - opsys "infra-dashboard/OS" "io" "log" "net/http" "time" + + "github.com/gorilla/mux" ) func RequestHandler(w http.ResponseWriter, r *http.Request) { @@ -22,7 +23,7 @@ func HealthHandler(w http.ResponseWriter, _ *http.Request) { } func GetOS(w http.ResponseWriter, r *http.Request) { - var list []opsys.OS + var list []db.OS var err error t := time.Now() @@ -30,13 +31,70 @@ func GetOS(w http.ResponseWriter, r *http.Request) { db_conn := db.GetDatabaseConnection() defer db_conn.Close() - list, err = opsys.GetOS(db_conn) + list, err = db.GetOS(db_conn) if err != nil { log.Println("Error getting OS list") status = 500 } - log.Println("list: ", list) + logRequest(t, r, status) + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(list) +} +func GetOSbyID(w http.ResponseWriter, r *http.Request) { + var os db.OS + var err error + + t := time.Now() + status := 200 + + params := mux.Vars(r) + db_conn := db.GetDatabaseConnection() + defer db_conn.Close() + os, err = db.GetOSbyID(db_conn, params["id"]) + if err != nil { + log.Println("Error getting OS") + status = 500 + } + logRequest(t, r, status) + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(os) +} + +func GetDistributionList(w http.ResponseWriter, r *http.Request) { + var list []string + var err error + + t := time.Now() + status := 200 + + db_conn := db.GetDatabaseConnection() + defer db_conn.Close() + list, err = db.GetDistributionList(db_conn) + if err != nil { + log.Println("Error getting distribution list") + status = 500 + } + logRequest(t, r, status) + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(list) +} + +func GetVersionByDistributionList(w http.ResponseWriter, r *http.Request) { + var list []string + var err error + + t := time.Now() + status := 200 + + params := mux.Vars(r) + db_conn := db.GetDatabaseConnection() + defer db_conn.Close() + list, err = db.GetVersionByDistributionList(db_conn, params["distribution"]) + if err != nil { + log.Println("Error getting distribution list") + status = 500 + } logRequest(t, r, status) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(list) diff --git a/OS/utils.go b/OS/utils.go deleted file mode 100644 index 6bfed97..0000000 --- a/OS/utils.go +++ /dev/null @@ -1,32 +0,0 @@ -package operating_system - -import ( - "database/sql" - "log" -) - -type OS struct { - ID string `json:"id"` - Distribution string `json:"distribution"` - Version string `json:"version"` - End_of_support string `json:"end_of_support"` -} - -func GetOS(db *sql.DB) ([]OS, error) { - var oses []OS - rows, err := db.Query("SELECT * FROM dashboard_os") - if err != nil { - log.Println("Error querying list of OS", err) - } - defer rows.Close() - - for rows.Next() { - var os OS - err := rows.Scan(&os.ID, &os.Distribution, &os.Version, &os.End_of_support) - if err != nil { - log.Println("Error building list", err) - } - oses = append(oses, os) - } - return oses, err -} diff --git a/main.go b/main.go index 63cf31f..3efbf5f 100644 --- a/main.go +++ b/main.go @@ -29,6 +29,9 @@ func main() { router.HandleFunc("/", h.RequestHandler).Methods("GET") router.HandleFunc("/healthcheck", h.HealthHandler) router.HandleFunc("/OS", h.GetOS).Methods("GET") + router.HandleFunc("/OS/{id}", h.GetOSbyID).Methods("GET") + router.HandleFunc("/distribution", h.GetDistributionList).Methods("GET") + router.HandleFunc("/distribution/{distribution}/version", h.GetVersionByDistributionList).Methods("GET") log.Fatal(http.ListenAndServe(":8080", router)) }