You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							1.8 KiB
						
					
					
				
								package store
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"fmt"
							 | 
						|
									"time"
							 | 
						|
								
							 | 
						|
									"github.com/globalsign/mgo"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								var db *mgo.Database
							 | 
						|
								var dbInits []func(db *mgo.Database)
							 | 
						|
								
							 | 
						|
								// ConnectDB connects to a mongodb database.
							 | 
						|
								func ConnectDB(host string, port int, database, username, password, mechanism string) error {
							 | 
						|
									session, err := mgo.DialWithInfo(&mgo.DialInfo{
							 | 
						|
										Addrs:     []string{fmt.Sprintf("%s:%d", host, port)},
							 | 
						|
										Timeout:   30 * time.Second,
							 | 
						|
										Database:  database,
							 | 
						|
										Username:  username,
							 | 
						|
										Password:  password,
							 | 
						|
										Mechanism: mechanism,
							 | 
						|
										Source:    database,
							 | 
						|
									})
							 | 
						|
									if err != nil {
							 | 
						|
										return err
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									db = session.DB(database)
							 | 
						|
								
							 | 
						|
									return setupDB()
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// HandleInit handles the initialization of the database
							 | 
						|
								func HandleInit(function func(db *mgo.Database)) {
							 | 
						|
									dbInits = append(dbInits, function)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func setupDB() error {
							 | 
						|
									db.C("common.characters").EnsureIndexKey("name")
							 | 
						|
									db.C("common.characters").EnsureIndexKey("shortName")
							 | 
						|
									db.C("common.characters").EnsureIndexKey("author")
							 | 
						|
									err := db.C("common.characters").EnsureIndex(mgo.Index{
							 | 
						|
										Key:      []string{"nicks"},
							 | 
						|
										Unique:   true,
							 | 
						|
										DropDups: true,
							 | 
						|
									})
							 | 
						|
									if err != nil {
							 | 
						|
										return err
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									db.C("logbot3.logs").EnsureIndexKey("date")
							 | 
						|
									db.C("logbot3.logs").EnsureIndexKey("channel")
							 | 
						|
									db.C("logbot3.logs").EnsureIndexKey("channel", "open")
							 | 
						|
									db.C("logbot3.logs").EnsureIndexKey("open")
							 | 
						|
									db.C("logbot3.logs").EnsureIndexKey("oldId")
							 | 
						|
									db.C("logbot3.logs").EnsureIndexKey("characterIds")
							 | 
						|
									db.C("logbot3.logs").EnsureIndexKey("event")
							 | 
						|
									db.C("logbot3.logs").EnsureIndexKey("$text:channel", "$text:title", "$text:event", "$text:description", "$text:posts.nick", "$text:posts.text")
							 | 
						|
								
							 | 
						|
									err = db.C("server.changes").EnsureIndex(mgo.Index{
							 | 
						|
										Key:         []string{"date"},
							 | 
						|
										ExpireAfter: time.Hour * (24 * 14),
							 | 
						|
									})
							 | 
						|
									if err != nil {
							 | 
						|
										return err
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									for _, dbInit := range dbInits {
							 | 
						|
										dbInit(db)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return nil
							 | 
						|
								}
							 |