func CreateNewMongoGraph(addr string, options graph.Options) bool { conn, err := mgo.Dial(addr) if err != nil { glog.Fatal("Error connecting: ", err) return false } conn.SetSafe(&mgo.Safe{}) dbName := DefaultDBName if val, ok := options.StringKey("database_name"); ok { dbName = val } db := conn.DB(dbName) indexOpts := mgo.Index{ Key: []string{"Sub"}, Unique: false, DropDups: false, Background: true, Sparse: true, } db.C("triples").EnsureIndex(indexOpts) indexOpts.Key = []string{"Pred"} db.C("triples").EnsureIndex(indexOpts) indexOpts.Key = []string{"Obj"} db.C("triples").EnsureIndex(indexOpts) indexOpts.Key = []string{"Provenance"} db.C("triples").EnsureIndex(indexOpts) return true }
func Serve(handle *graph.Handle, cfg *config.Config) { SetupRoutes(handle, cfg) glog.Infof("Cayley now listening on %s:%s\n", cfg.ListenHost, cfg.ListenPort) fmt.Printf("Cayley now listening on http://%s:%s\n", cfg.ListenHost, cfg.ListenPort) err := http.ListenAndServe(fmt.Sprintf("%s:%s", cfg.ListenHost, cfg.ListenPort), nil) if err != nil { glog.Fatal("ListenAndServe: ", err) } }
func CayleyHTTP(ts graph.TripleStore, cfg *config.CayleyConfig) { SetupRoutes(ts, cfg) glog.Infof("Cayley now listening on %s:%s\n", cfg.ListenHost, cfg.ListenPort) fmt.Printf("Cayley now listening on %s:%s\n", cfg.ListenHost, cfg.ListenPort) err := http.ListenAndServe(fmt.Sprintf("%s:%s", cfg.ListenHost, cfg.ListenPort), nil) if err != nil { glog.Fatal("ListenAndServe: ", err) } }
func NewTripleStore(addr string, options graph.Options) *TripleStore { var ts TripleStore conn, err := mgo.Dial(addr) if err != nil { glog.Fatal("Error connecting: ", err) } conn.SetSafe(&mgo.Safe{}) dbName := DefaultDBName if val, ok := options.StringKey("database_name"); ok { dbName = val } ts.db = conn.DB(dbName) ts.session = conn ts.hasher = sha1.New() ts.idCache = NewIDLru(1 << 16) return &ts }
func main() { // No command? It's time for usage. if len(os.Args) == 1 { fmt.Fprintln(os.Stderr, "Cayley is a graph store and graph query layer.") usage() os.Exit(1) } cmd := os.Args[1] os.Args = append(os.Args[:1], os.Args[2:]...) flag.Parse() if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { glog.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } var buildString string if Version != "" { buildString = fmt.Sprint("Cayley ", Version, " built ", BuildDate) glog.Infoln(buildString) } cfg := configFrom(*configFile) if os.Getenv("GOMAXPROCS") == "" { runtime.GOMAXPROCS(runtime.NumCPU()) glog.Infoln("Setting GOMAXPROCS to", runtime.NumCPU()) } else { glog.Infoln("GOMAXPROCS currently", os.Getenv("GOMAXPROCS"), " -- not adjusting") } var ( handle *graph.Handle err error ) switch cmd { case "version": if Version != "" { fmt.Println(buildString) } else { fmt.Println("Cayley snapshot") } os.Exit(0) case "init": err = db.Init(cfg) if err != nil { break } if *quadFile != "" { handle, err = db.Open(cfg) if err != nil { break } err = internal.Load(handle.QuadWriter, cfg, *quadFile, *quadType) if err != nil { break } handle.Close() } case "load": handle, err = db.Open(cfg) if err != nil { break } err = internal.Load(handle.QuadWriter, cfg, *quadFile, *quadType) if err != nil { break } handle.Close() case "dump": handle, err = db.Open(cfg) if err != nil { break } if !graph.IsPersistent(cfg.DatabaseType) { err = internal.Load(handle.QuadWriter, cfg, *quadFile, *quadType) if err != nil { break } } err = internal.Dump(handle.QuadStore, *dumpFile, *dumpType) if err != nil { break } handle.Close() case "repl": handle, err = db.Open(cfg) if err != nil { break } if !graph.IsPersistent(cfg.DatabaseType) { err = internal.Load(handle.QuadWriter, cfg, "", *quadType) if err != nil { break } } err = db.Repl(handle, *queryLanguage, cfg) handle.Close() case "http": handle, err = db.Open(cfg) if err != nil { break } if !graph.IsPersistent(cfg.DatabaseType) { err = internal.Load(handle.QuadWriter, cfg, "", *quadType) if err != nil { break } } http.Serve(handle, cfg) handle.Close() default: fmt.Println("No command", cmd) usage() } if err != nil { glog.Errorln(err) } }