diff --git a/src/backend/apiGateway.go b/src/backend/cmd/main.go similarity index 63% rename from src/backend/apiGateway.go rename to src/backend/cmd/main.go index 66d3c9d..6aa56c7 100644 --- a/src/backend/apiGateway.go +++ b/src/backend/cmd/main.go @@ -1,13 +1,20 @@ package main import ( + "database/sql" + "encoding/json" "fmt" + "io/ioutil" "log" "net/http" - "io/ioutil" + "github.com/gorilla/mux" + "gitlab.computing.dcu.ie/murphg62/2023-ca400-murphg62-byrnm257/src/backend/pkg/db" + _ "golang.org/x/mod/module" ) + + type Schema struct { Name string `json:"Name"` Type int `json:"Type"` @@ -19,7 +26,13 @@ type Container struct { port string `json:"Port"` } +type Module struct { + Name string `json:"Name"` + Container string `json:"Container"` +} + var Containers []Container +var Modules []Module func homePage(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Welcome to the home page!") @@ -75,21 +88,47 @@ func getStats(w http.ResponseWriter, r *http.Request){ } -func handleRequests() { + +func getModules(db *sql.DB) http.HandlerFunc{ + return func(w http.ResponseWriter, r *http.Request){ + if r.Method == "GET" { + rows, err := db.Query("Select name, container_name FROM Module") + if err != nil { + panic(err) + } + defer rows.Close() + + for rows.Next() { + var module Module + if err := rows.Scan(&module.Name, &module.Container); err != nil { + panic(err) + } + Modules = append(Modules, module) + } + + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(Modules); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + } + } +} + +func handleRequests(DB *sql.DB) { myRouter := mux.NewRouter().StrictSlash(true) myRouter.HandleFunc("/", homePage) myRouter.HandleFunc("/{container}/schema", getSchema) myRouter.HandleFunc("/{container}/stats", getStats) + myRouter.HandleFunc("/modules", getModules(DB)) log.Fatal(http.ListenAndServe(":10000", myRouter)) } + func main() { - - Containers = []Container{ - Container{Id: "1", Name: "localhost", port: "3000"}, - } - - handleRequests() + DB := db.ConnectDB() + handleRequests(DB) + db.CloseDB(DB) } \ No newline at end of file diff --git a/src/backend/go.mod b/src/backend/go.mod index 35c0297..c642cc5 100644 --- a/src/backend/go.mod +++ b/src/backend/go.mod @@ -3,12 +3,7 @@ module gitlab.computing.dcu.ie/murphg62/2023-ca400-murphg62-byrnm257/src/backend go 1.19 require ( - github.com/golang/protobuf v1.5.3 // indirect - github.com/gorilla/mux v1.8.0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect - google.golang.org/grpc v1.53.0 // indirect - google.golang.org/protobuf v1.30.0 // indirect + github.com/gorilla/mux v1.8.0 + github.com/lib/pq v1.10.8 + golang.org/x/mod v0.8.0 ) diff --git a/src/backend/go.sum b/src/backend/go.sum index 2843dd0..6b42cde 100644 --- a/src/backend/go.sum +++ b/src/backend/go.sum @@ -1,35 +1,6 @@ -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto v0.0.0-20230109162033-3c3c17ce83e6 h1:uUn6GsgKK2eCI0bWeRMgRCcqDaQXYDuB+5tXA5Xeg/8= -google.golang.org/genproto v0.0.0-20230109162033-3c3c17ce83e6/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +github.com/lib/pq v1.10.8 h1:3fdt97i/cwSU83+E0hZTC/Xpc9mTZxc6UWSCRcSbxiE= +github.com/lib/pq v1.10.8/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= diff --git a/src/backend/pkg/db/db.go b/src/backend/pkg/db/db.go new file mode 100644 index 0000000..0108a65 --- /dev/null +++ b/src/backend/pkg/db/db.go @@ -0,0 +1,35 @@ +package db +import ( + "database/sql" + "fmt" + _ "github.com/lib/pq" + +) + +const ( + host = "localhost" + port = 5432 + user = "postgres" + password = "Gcvy4266" + dbname = "Panoptes" +) + +func ConnectDB() *sql.DB { + + psql := fmt.Sprintf("host=%s port=%d user=%s "+ "password=%s dbname=%s sslmode=disable", host, port, user, password, dbname) + + db, err := sql.Open("postgres", psql) + if err != nil { + panic(err) + } + err = db.Ping() + if err != nil { + panic(err) + } + fmt.Printf("Successfully connected to db!") + return db +} + +func CloseDB(db *sql.DB){ + defer db.Close() +} \ No newline at end of file