Working on distribution routes to get data

This commit is contained in:
kirby 2024-03-15 16:36:30 +01:00
parent 316a1996c2
commit 60d90dc4af
5 changed files with 142 additions and 37 deletions

77
Database/os.go Normal file
View File

@ -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
}

View File

@ -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)

View File

@ -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)

View File

@ -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
}

View File

@ -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))
}