diff --git a/config/config.go b/config/config.go index 7ccfd3a..056032b 100644 --- a/config/config.go +++ b/config/config.go @@ -10,7 +10,7 @@ type Config struct { Ip string // Bind address, if different than 0.0.0.0 (server) Port string // listen port, if different than '7777' (server) MongoHost string // mongoDB host, if different than 'localhost' (server) - MongoDB string // mongoDB db name, if different than 'filesrv' (server) + MongoDbName string // mongoDB db name, if different than 'filesrv' (server) MongoUsername string // mongoDB username, if any (server) MongoPassword string // mongoDB password, if any (server) @@ -37,37 +37,37 @@ func (c Config) GetString(option string) (value string) { } func (c *Config) Merge(other *Config) error { - if other == nil { - return nil - } - if other.Server { - c.Server = other.Server - } - if len(other.Ip) > 0 { - c.Ip = other.Ip - } - if len(other.Port) > 0 { - c.Port = other.Port - } - if len(other.Port) > 0 { - c.Port = other.Port - } - if len(other.MongoHost) > 0 { - c.MongoHost = other.MongoHost - } - if len(other.MongoDB) > 0 { - c.MongoDB = other.MongoDB - } - if len(other.MongoUsername) > 0 { - c.MongoUsername = other.MongoUsername - } - if len(other.MongoPassword) > 0 { - c.MongoPassword = other.MongoPassword - } - if len(other.RemoteHost) > 0 { - c.RemoteHost = other.RemoteHost - } - return nil + if other == nil { + return nil + } + if other.Server { + c.Server = other.Server + } + if len(other.Ip) > 0 { + c.Ip = other.Ip + } + if len(other.Port) > 0 { + c.Port = other.Port + } + if len(other.Port) > 0 { + c.Port = other.Port + } + if len(other.MongoHost) > 0 { + c.MongoHost = other.MongoHost + } + if len(other.MongoDbName) > 0 { + c.MongoDbName = other.MongoDbName + } + if len(other.MongoUsername) > 0 { + c.MongoUsername = other.MongoUsername + } + if len(other.MongoPassword) > 0 { + c.MongoPassword = other.MongoPassword + } + if len(other.RemoteHost) > 0 { + c.RemoteHost = other.RemoteHost + } + return nil } // Given a filename to a YAML file, unmarshal it, and return a Config diff --git a/dbutil/dbutil.go b/dbutil/dbutil.go index 6a8ba68..db39361 100644 --- a/dbutil/dbutil.go +++ b/dbutil/dbutil.go @@ -8,8 +8,45 @@ import ( "strings" ) +const ( + DEFAULT_DB_NAME = "filesrv" +) + type Util struct { - Gfs *mgo.GridFS + Seed string // mongo host seed to Dial into + User string // mongo credentials, if needed + Pass string // mongo credentials, if needed + DbName string // mongo database name, if needed + Session *mgo.Session + FileDb *mgo.Database + Gfs *mgo.GridFS +} + +func (u *Util) Init() error { + var err error + u.Session, err = mgo.Dial(u.Seed) + if err != nil { + return err + } + + if len(u.DbName) > 0 { + u.FileDb = u.Session.DB(u.DbName) + } else { + u.FileDb = u.Session.DB(DEFAULT_DB_NAME) + } + + if len(u.User) > 0 && len(u.Pass) > 0 { + err = u.FileDb.Login(u.User, u.Pass) + if err != nil { + return err + } + } + u.Gfs = u.FileDb.GridFS("fs") + return nil +} + +func (u Util) Close() { + u.Session.Close() } /* @@ -71,6 +108,7 @@ Get all the files. pass -1 for all files */ func (u Util) GetFiles(limit int) (files []types.File, err error) { + //files = []types.File{} if limit == -1 { err = u.Gfs.Find(nil).Sort("-metadata.timestamp").Limit(limit).All(&files) } else { diff --git a/imgsrv.go b/imgsrv.go index 0b53075..33255cf 100644 --- a/imgsrv.go +++ b/imgsrv.go @@ -28,7 +28,7 @@ var ( Ip: "0.0.0.0", Port: "7777", MongoHost: "localhost", - MongoDB: "filesrv", + MongoDbName: "filesrv", MongoUsername: "", MongoPassword: "", RemoteHost: "", @@ -132,9 +132,9 @@ func init() { "mongo-host", DefaultConfig.MongoHost, "Mongo Host to connect to ('mongohost' in the config)") - flag.StringVar(&DefaultConfig.MongoDB, + flag.StringVar(&DefaultConfig.MongoDbName, "mongo-db", - DefaultConfig.MongoDB, + DefaultConfig.MongoDbName, "Mongo db to connect to ('mongodb' in the config)") flag.StringVar(&DefaultConfig.MongoUsername, "mongo-username", diff --git a/server.go b/server.go index 838539f..1e26c32 100644 --- a/server.go +++ b/server.go @@ -36,8 +36,17 @@ Run as the file/image server func runServer(c *config.Config) { serverConfig = *c - initMongo() - defer mongo_session.Close() + du = dbutil.Util{ + Seed: serverConfig.MongoHost, + User: serverConfig.MongoUsername, + Pass: serverConfig.MongoPassword, + DbName: serverConfig.MongoDbName, + } + err := du.Init() + if err != nil { + log.Fatal(err) + } + defer du.Close() // TODO this ought to catch a signal to cleanup http.HandleFunc("/", routeRoot) http.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) { @@ -64,7 +73,7 @@ func initMongo() { if err != nil { log.Panic(err) } - images_db = mongo_session.DB(serverConfig.MongoDB) + images_db = mongo_session.DB(serverConfig.MongoDbName) if len(serverConfig.MongoUsername) > 0 && len(serverConfig.MongoPassword) > 0 { err = images_db.Login(serverConfig.MongoUsername, serverConfig.MongoPassword) if err != nil {