func main() { err := conf.Init_conf("server") if err != nil { fmt.Fprintf(os.Stderr, "ERROR: error reading conf file: "+err.Error()) os.Exit(1) } //if !conf.INIT_SUCCESS { // conf.PrintServerUsage() // os.Exit(1) //} if conf.DEBUG_LEVEL > 0 { fmt.Println("DEBUG_LEVEL > 0") } if _, err := os.Stat(conf.DATA_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.DATA_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating data_path \"%s\", %s\n", conf.DATA_PATH, err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.LOGS_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.LOGS_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating log_path \"%s\" %s\n", conf.LOGS_PATH, err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.DATA_PATH + "/temp"); err != nil && os.IsNotExist(err) { if err := os.Mkdir(conf.DATA_PATH+"/temp", 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(1) } } if conf.DEBUG_LEVEL > 0 { fmt.Println("logger.Initialize...") } //init logger logger.Initialize("server") if conf.DEBUG_LEVEL > 0 { fmt.Println("init db...") } //init db if err := db.Initialize(); err != nil { fmt.Printf("failed to initialize job db: %s\n", err.Error()) os.Exit(1) } //init versions if err := versions.Initialize(); err != nil { fmt.Fprintf(os.Stderr, "[email protected]: %v\n", err) logger.Error("[email protected]: " + err.Error()) os.Exit(1) } if conf.DEBUG_LEVEL > 0 { fmt.Println("init db collection for user...") } //init db collection for user if err := user.Initialize(); err != nil { fmt.Fprintf(os.Stderr, "ERROR initializing user database: %s\n", err.Error()) os.Exit(1) } if conf.DEBUG_LEVEL > 0 { fmt.Println("init resource manager...") } //init resource manager core.InitResMgr("server") core.InitAwfMgr() core.InitJobDB() core.InitClientGroupDB() if conf.DEBUG_LEVEL > 0 { fmt.Println("init auth...") } //init auth auth.Initialize() controller.PrintLogo() conf.Print("server") // reload job directory if conf.RELOAD != "" { fmt.Println("####### Reloading #######") if err := reload(conf.RELOAD); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) } fmt.Println("Done") } if conf.DEBUG_LEVEL > 0 { fmt.Println("launching server...") } //launch server control := make(chan int) go core.Ttl.Handle() go core.QMgr.TaskHandle() go core.QMgr.ClientHandle() go core.QMgr.ClientChecker() go launchSite(control, conf.SITE_PORT) go launchAPI(control, conf.API_PORT) if conf.DEBUG_LEVEL > 0 { fmt.Println("API launched...") } if err := core.AwfMgr.LoadWorkflows(); err != nil { logger.Error("LoadWorkflows: " + err.Error()) } var host string if hostname, err := os.Hostname(); err == nil { host = fmt.Sprintf("%s:%d", hostname, conf.API_PORT) } //recover unfinished jobs before server went down last time if conf.RECOVER { fmt.Println("####### Recovering unfinished jobs #######") if err := core.QMgr.RecoverJobs(); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) } fmt.Println("Done") logger.Event(event.SERVER_RECOVER, "host="+host) } else { logger.Event(event.SERVER_START, "host="+host) } if conf.PID_FILE_PATH != "" { f, err := os.Create(conf.PID_FILE_PATH) if err != nil { err_msg := "Could not create pid file: " + conf.PID_FILE_PATH + "\n" fmt.Fprintf(os.Stderr, err_msg) logger.Error("ERROR: " + err_msg) os.Exit(1) } defer f.Close() pid := os.Getpid() fmt.Fprintln(f, pid) fmt.Println("##### pidfile #####") fmt.Printf("pid: %d saved to file: %s\n\n", pid, conf.PID_FILE_PATH) } if conf.DEBUG_LEVEL > 0 { fmt.Println("setting GOMAXPROCS...") } // setting GOMAXPROCS var procs int avail := runtime.NumCPU() if avail <= 2 { procs = 1 } else if avail == 3 { procs = 2 } else { procs = avail - 2 } fmt.Println("##### Procs #####") fmt.Printf("Number of available CPUs = %d\n", avail) if conf.GOMAXPROCS > 0 { procs = conf.GOMAXPROCS } if procs <= avail { fmt.Printf("Running AWE server with GOMAXPROCS = %d\n\n", procs) runtime.GOMAXPROCS(procs) } else { fmt.Println("GOMAXPROCS config value is greater than available number of CPUs.") fmt.Printf("Running Shock server with GOMAXPROCS = %d\n\n", avail) runtime.GOMAXPROCS(avail) } <-control //block till something dies }
func main() { err := conf.Init_conf("proxy") // TODO config not adapted for proxy if err != nil { fmt.Fprintf(os.Stderr, "ERROR: error reading conf file: "+err.Error()) os.Exit(1) } //if !conf.INIT_SUCCESS { // conf.PrintServerUsage() // os.Exit(1) //} fmt.Printf("--------AWE Proxy running--------\n\n") conf.Print("proxy") if _, err := os.Stat(conf.DATA_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.DATA_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating data_path %s\n", err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.LOGS_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.LOGS_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating log_path %s\n", err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.DATA_PATH + "/temp"); err != nil && os.IsNotExist(err) { if err := os.Mkdir(conf.DATA_PATH+"/temp", 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR: %v\n", err) os.Exit(1) } } //init proxy mgr core.InitResMgr("proxy") //init logger logger.Initialize("proxy") //launch server control := make(chan int) go core.QMgr.JidHandle() go core.QMgr.TaskHandle() go core.QMgr.ClientHandle() go core.QMgr.ClientChecker() go launchAPI(control, conf.API_PORT) var host string if hostname, err := os.Hostname(); err == nil { host = fmt.Sprintf("%s:%d", hostname, conf.API_PORT) } logger.Event(event.SERVER_START, "host="+host) if conf.PID_FILE_PATH != "" { f, err := os.Create(conf.PID_FILE_PATH) if err != nil { err_msg := "Could not create pid file: " + conf.PID_FILE_PATH + "\n" fmt.Fprintf(os.Stderr, err_msg) logger.Error("ERROR: " + err_msg) os.Exit(1) } defer f.Close() pid := os.Getpid() fmt.Fprintln(f, pid) fmt.Println("##### pidfile #####") fmt.Printf("pid: %d saved to file: %s\n\n", pid, conf.PID_FILE_PATH) } profile, err := worker.ComposeProfile() if err != nil { fmt.Fprintf(os.Stderr, "fail to compose profile: %s\n", err.Error()) os.Exit(1) } self, err := worker.RegisterWithAuth(conf.SERVER_URL, profile) if err != nil { fmt.Fprintf(os.Stderr, "fail to register: %s\n", err.Error()) os.Exit(1) } core.InitClientProfile(self) core.InitProxyWorkChan() fmt.Printf("Proxy registered, name=%s, id=%s\n", self.Name, self.Id) logger.Event(event.CLIENT_REGISTRATION, "clientid="+self.Id) if err := worker.InitWorkers(self); err == nil { worker.StartProxyWorkers() } else { fmt.Printf("failed to initialize and start workers:" + err.Error()) } <-control //block till something dies }
func main() { // workstealer -> dataMover (download from Shock) -> processor -> deliverer (upload to Shock) err := conf.Init_conf("client") if err != nil { fmt.Fprintf(os.Stderr, "ERROR: error reading conf file: "+err.Error()) os.Exit(1) } //if !conf.INIT_SUCCESS { // conf.PrintClientUsage() // os.Exit(1) //} if _, err = os.Stat(conf.WORK_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.WORK_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating work_path \"%s\" : %s\n", conf.WORK_PATH, err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.DATA_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.DATA_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating data_path \"%s\" : %s\n", conf.DATA_PATH, err.Error()) os.Exit(1) } } if _, err := os.Stat(conf.LOGS_PATH); err != nil && os.IsNotExist(err) { if err := os.MkdirAll(conf.LOGS_PATH, 0777); err != nil { fmt.Fprintf(os.Stderr, "ERROR in creating log_path \"%s\" : %s\n", conf.LOGS_PATH, err.Error()) os.Exit(1) } } if conf.PID_FILE_PATH != "" { f, err := os.Create(conf.PID_FILE_PATH) if err != nil { err_msg := "Could not create pid file: " + conf.PID_FILE_PATH + "\n" fmt.Fprintf(os.Stderr, err_msg) logger.Error("ERROR: " + err_msg) os.Exit(1) } defer f.Close() pid := os.Getpid() fmt.Fprintln(f, pid) fmt.Println("##### pidfile #####") fmt.Printf("pid: %d saved to file: %s\n\n", pid, conf.PID_FILE_PATH) } logger.Initialize("client") logger.Debug(0, "PATH="+os.Getenv("PATH")) profile, err := worker.ComposeProfile() if err != nil { fmt.Fprintf(os.Stderr, "fail to compose profile: %s\n", err.Error()) os.Exit(1) } if conf.SERVER_URL == "" { fmt.Fprintf(os.Stderr, "AWE server url not configured or is empty. Please check the [Client]serverurl field in the configuration file.\n") os.Exit(1) } if strings.Contains(conf.SERVER_URL, "http") == false { fmt.Fprintf(os.Stderr, "serverurl not valid (require http://): %s \n", conf.SERVER_URL) os.Exit(1) } self, err := worker.RegisterWithAuth(conf.SERVER_URL, profile) if err != nil { fmt.Fprintf(os.Stderr, "fail to register: %s\n", err.Error()) os.Exit(1) } core.InitClientProfile(self) fmt.Printf("Client registered, name=%s, id=%s\n", self.Name, self.Id) logger.Event(event.CLIENT_REGISTRATION, "clientid="+self.Id) if err := worker.InitWorkers(self); err == nil { worker.StartClientWorkers() } else { fmt.Printf("failed to initialize and start workers:" + err.Error()) } }