Browse Source

server structure, mongodb connection

master
arnaucode 6 years ago
parent
commit
e218286be0
10 changed files with 288 additions and 0 deletions
  1. +10
    -0
      README.md
  2. +57
    -0
      color.go
  3. +9
    -0
      errors.go
  4. +26
    -0
      main.go
  5. +72
    -0
      mongodb.go
  6. +5
    -0
      mongodbConfig.json
  7. +6
    -0
      mongodbModels.go
  8. +67
    -0
      serverConfig.go
  9. +4
    -0
      serverConfig.json
  10. +32
    -0
      serverRoutes.go

+ 10
- 0
README.md

@ -0,0 +1,10 @@
# goRecommender
Recommendation system API, based on Machine Learning, written in Go lang
Data stored in MongoDB
Applies Machine Learning to perform recommendations:
- Random Forests
- K Nearest Neighbours

+ 57
- 0
color.go

@ -0,0 +1,57 @@
package main
import "fmt"
//Color struct, defines the color
type Color struct{}
var c Color
//DarkGray color
func (c Color) DarkGray(t string) {
fmt.Print("\x1b[30;1m") //dark gray
fmt.Println(t)
fmt.Print("\x1b[0m") //defaultColor
}
//Red color
func (c Color) Red(t string) {
fmt.Print("\x1b[31;1m") //red
fmt.Println(t)
fmt.Print("\x1b[0m") //defaultColor
}
//Green color
func (c Color) Green(t string) {
fmt.Print("\x1b[32;1m") //green
fmt.Println(t)
fmt.Print("\x1b[0m") //defaultColor
}
//Yellow color
func (c Color) Yellow(t string) {
fmt.Print("\x1b[33;1m") //yellow
fmt.Println(t)
fmt.Print("\x1b[0m") //defaultColor
}
//Blue color
func (c Color) Blue(t string) {
fmt.Print("\x1b[34;1m") //blue
fmt.Println(t)
fmt.Print("\x1b[0m") //defaultColor
}
//Purple color
func (c Color) Purple(t string) {
fmt.Print("\x1b[35;1m") //purple
fmt.Println(t)
fmt.Print("\x1b[0m") //defaultColor
}
//Cyan color
func (c Color) Cyan(t string) {
fmt.Print("\x1b[36;1m") //cyan
fmt.Println(t)
fmt.Print("\x1b[0m") //defaultColor
}

+ 9
- 0
errors.go

@ -0,0 +1,9 @@
package main
import "fmt"
func check(err error) {
if err != nil {
fmt.Println(err)
}
}

+ 26
- 0
main.go

@ -0,0 +1,26 @@
package main
import (
"fmt"
"log"
"net/http"
"github.com/fatih/color"
)
func main() {
fmt.Println("starting")
//mongodb start
readMongodbConfig("./mongodbConfig.json")
c := connectMongodb()
fmt.Println(c)
color.Green("mongodb connected")
//http server start
readServerConfig("./serverConfig.json")
color.Green("server running")
router := NewRouter()
log.Fatal(http.ListenAndServe(":"+serverConfig.ServerPort, router))
}

+ 72
- 0
mongodb.go

@ -0,0 +1,72 @@
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
mgo "gopkg.in/mgo.v2"
)
//MongoConfig stores the configuration of mongodb to connect
type MongoConfig struct {
Ip string `json:"ip"`
Database string `json:"database"`
Collection string `json:"collection"`
}
var mongoConfig MongoConfig
func readMongodbConfig(path string) {
file, e := ioutil.ReadFile(path)
if e != nil {
fmt.Println("error:", e)
}
content := string(file)
json.Unmarshal([]byte(content), &mongoConfig)
}
func getSession() (*mgo.Session, error) {
session, err := mgo.Dial("mongodb://" + mongoConfig.Ip)
if err != nil {
panic(err)
}
//defer session.Close()
// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
return session, err
}
func getCollection(session *mgo.Session) *mgo.Collection {
c := session.DB(mongoConfig.Database).C(mongoConfig.Collection)
return c
}
func connectMongodb() *mgo.Collection {
session, err := getSession()
if err != nil {
log.Fatal(err)
}
c := getCollection(session)
return c
}
func saveDataEntryToMongo(c *mgo.Collection, user UserModel) {
/*
how to call this function
var auxArr []string
user := UserModel{"123", auxArr}
saveDataEntryToMongo(c, user)
*/
err := c.Insert(user)
if err != nil {
log.Fatal(err)
}
}

+ 5
- 0
mongodbConfig.json

@ -0,0 +1,5 @@
{
"ip": "127.0.0.1",
"database": "goRecommend",
"collection": "userHistory"
}

+ 6
- 0
mongodbModels.go

@ -0,0 +1,6 @@
package main
type UserModel struct {
Userid string
History []string
}

+ 67
- 0
serverConfig.go

@ -0,0 +1,67 @@
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"time"
"github.com/gorilla/mux"
)
type Route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
//server config
type ServerConfig struct {
ServerIP string `json:"serverIP"`
ServerPort string `json:"serverPort"`
}
var serverConfig ServerConfig
func readServerConfig(path string) {
file, err := ioutil.ReadFile(path)
if err != nil {
fmt.Println("error: ", err)
}
content := string(file)
json.Unmarshal([]byte(content), &serverConfig)
}
func Logger(inner http.Handler, name string) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
inner.ServeHTTP(w, r)
log.Printf(
"%s\t%s\t%s\t%s",
r.Method,
r.RequestURI,
name,
time.Since(start),
)
})
}
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
var handler http.Handler
handler = route.HandlerFunc
handler = Logger(handler, route.Name)
router.
Methods(route.Method).
Path(route.Pattern).
Name(route.Name).
Handler(handler)
}
return router
}

+ 4
- 0
serverConfig.json

@ -0,0 +1,4 @@
{
"serverIP": "127.0.0.1",
"serverPort": "3056"
}

+ 32
- 0
serverRoutes.go

@ -0,0 +1,32 @@
package main
import (
"fmt"
"net/http"
)
type Routes []Route
var routes = Routes{
Route{
"Index",
"GET",
"/",
Index,
},
Route{
"NewImage",
"POST",
"/image",
NewImage,
},
}
//ROUTES
func Index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "send images to the /image path")
}
func NewImage(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "response")
}

Loading…
Cancel
Save