Restapi to fetch data from DB and insert specific set of log

I have a requirement to fetch some data from mysql database and return it as a json which i am able to achieve successfully. But i need help in collecting Client IP, client hostname, request method, request json, response json, into mysql db as well as write to a file. Mentioned the code below for safety reason removed the DB creds and queries. Please help on it ASAP with a modified code to achieve my requirement.

decl.go

package main
import “database/sql”
//Output Data structure
type Readinfo struct {
Dbsrv string json:"DB Server"
Db string json:"DataBase"
Dbtable string json:"DatabaseTable"
Dbref *string json:"RefreshFrequency"
Dbreftime *string json:"RefreshTimeEST"
Dbrefdur int json:"RefreshDurationMin"
}
//Global Variables
var (
db *sql.DB
err error
dbUser =
dbDriver = “mysql”
dbPass =
Prtcl =
dbServer =
dbPort =
statement =
)

Connect.go:

package main
import (
“database/sql”
“fmt”
_“mysql”
“mux”
“log”
“net/http”
)
//Function to open DB connection
func CreateConnection() {
db, err = sql.Open(dbDriver, dbUser+":"+dbPass+"@"+Prtcl+"("+dbServer+":"+dbPort+")"+"/")
if err != nil {
log.Println(“DB Connection Failed to Open”)
fmt.Println(err.Error())
} else {
log.Println(“DB Connection Established Successfully”)
}
defer db.Close()
err = db.Ping()
if err != nil {
fmt.Print(err.Error())
}
//Launch Router to serve Request-Response
router := mux.NewRouter()
router.HandleFunc("/read", Logging(Getdetails)).Methods(“POST”)
log.Fatal(http.ListenAndServe(":8000", router))
fmt.Println(“Routes are Loded.”)
}

act.go:

package main
import (
_“database/sql”
“encoding/json”
“fmt”
“net/http”
)
//Request-Response Handler
func Getdetails(w http.ResponseWriter, r *http.Request) {
w.Header().Set(“Content-Type”, “application/json”)
var read []Readinfo
result, err := db.Query(statement)
if err != nil {
fmt.Println(err.Error())
}
defer result.Close()
for result.Next() {
var data Readinfo
err := result.Scan(&data.Dbsrv, &data.Db, &data.Dbtable, &data.Dbref, &data.Dbreftime, &data.Dbrefdur)
if err != nil {
fmt.Println(err.Error())
}
read = append(read, data)
}
json.NewEncoder(w).Encode(read)
}

main.go:

package main
func main() {
CreateConnection()
}

2 Likes

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.