diff --git a/Database/utils.go b/Database/utils.go new file mode 100644 index 0000000..5d0c753 --- /dev/null +++ b/Database/utils.go @@ -0,0 +1,28 @@ +package database + +import ( + "database/sql" + "fmt" + "log" + "os" + + _ "github.com/go-sql-driver/mysql" +) + +func dsn() string { + user := os.Getenv("DATABASE_USER") + password := os.Getenv("DATABASE_PASSWORD") + host := os.Getenv("DATABASE_HOST") + port := os.Getenv("DATABASE_PORT") + name := os.Getenv("DATABASE_NAME") + return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", user, password, host, port, name) +} + +func GetDatabaseConnection() *sql.DB { + log.Println("dsn: ", dsn()) + DB_conn, err := sql.Open("mysql", dsn()) + if err != nil { + log.Println("Database connection error : ", err) + } + return DB_conn +} diff --git a/Http/utils.go b/Http/utils.go index 575679b..0040ae0 100644 --- a/Http/utils.go +++ b/Http/utils.go @@ -2,6 +2,8 @@ package http import ( "fmt" + db "infra-dashboard/Database" + opsys "infra-dashboard/OS" "io" "log" "net/http" @@ -18,6 +20,19 @@ func HealthHandler(w http.ResponseWriter, _ *http.Request) { _, _ = io.WriteString(w, "OK") } +func GetOS(w http.ResponseWriter, r *http.Request) { + t := time.Now() + db_conn := db.GetDatabaseConnection() + list, err := opsys.GetOS(db_conn) + if err != nil { + log.Println("Error getting OS list") + } + log.Println("list: ", list) + + logRequest(t, r, 200) + fmt.Fprint(w, "Hello, World!") +} + func logRequest(t time.Time, r *http.Request, s int) { log.Printf("%s - - %s \"%s %s %s\" %d 0 \"-\" \"%s\" %d\n", r.Host, diff --git a/OS/utils.go b/OS/utils.go new file mode 100644 index 0000000..72a6b41 --- /dev/null +++ b/OS/utils.go @@ -0,0 +1,32 @@ +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, nil +} diff --git a/go.mod b/go.mod index 823ca4b..54f65f4 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,12 @@ go 1.20 require ( github.com/alexflint/go-arg v1.4.3 + github.com/go-sql-driver/mysql v1.8.0 github.com/gorilla/mux v1.8.1 github.com/joho/godotenv v1.5.1 ) -require github.com/alexflint/go-scalar v1.1.0 // indirect +require ( + filippo.io/edwards25519 v1.1.0 // indirect + github.com/alexflint/go-scalar v1.1.0 // indirect +) diff --git a/go.sum b/go.sum index 97aa0af..7ecfbe3 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/alexflint/go-arg v1.4.3 h1:9rwwEBpMXfKQKceuZfYcwuc/7YY7tWJbFsgG5cAU/uo= github.com/alexflint/go-arg v1.4.3/go.mod h1:3PZ/wp/8HuqRZMUUgu7I+e1qcpUbvmS258mRXkFH4IA= github.com/alexflint/go-scalar v1.1.0 h1:aaAouLLzI9TChcPXotr6gUhq+Scr8rl0P9P4PnltbhM= @@ -5,6 +7,8 @@ github.com/alexflint/go-scalar v1.1.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oy github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-sql-driver/mysql v1.8.0 h1:UtktXaU2Nb64z/pLiGIxY4431SJ4/dR5cjMmlVHgnT4= +github.com/go-sql-driver/mysql v1.8.0/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= diff --git a/main.go b/main.go index b2333b6..63cf31f 100644 --- a/main.go +++ b/main.go @@ -26,8 +26,9 @@ func main() { router := mux.NewRouter() - router.HandleFunc("/", h.RequestHandler) + router.HandleFunc("/", h.RequestHandler).Methods("GET") router.HandleFunc("/healthcheck", h.HealthHandler) + router.HandleFunc("/OS", h.GetOS).Methods("GET") log.Fatal(http.ListenAndServe(":8080", router)) }