예제 #1
0
파일: goron_test.go 프로젝트: uwork/gorond
// 設定自動リロードのテスト
func TestStartAutoReload(t *testing.T) {
	configPath := ".reload.conf"
	configDir := "reload.d"
	os.Mkdir(configDir, 0777)
	ioutil.WriteFile(configPath, []byte(`
[config]
notifytype = stdout
notifywhen = always
webapi = 0.0.0.0:6777
log = ""
cronlog = ""
`), 0666)
	defer os.Remove(configPath)
	defer os.Remove(configDir)

	conf, err := config.LoadConfig(configPath, configDir)
	if err != nil {
		t.Error(err)
	}
	// 設定の確認
	if conf.Config.NotifyWhen != "always" {
		t.Errorf("config load failed. notifyWhen: %v", conf.Config.NotifyWhen)
	}
	goron, err := NewGorond(conf)
	if err != nil {
		t.Error(err)
	}
	goron.Start()
	defer goron.Stop()

	// 1秒毎に監視
	fswatch.WatchInterval = time.Second
	_, err = StartAutoReload(goron, configPath, configDir)
	if err != nil {
		t.Error(err)
	}

	// 2秒待って設定を書き換える
	time.Sleep(time.Second * 2)
	ioutil.WriteFile(configPath, []byte(`
[config]
notifytype = stdout
notifywhen = onerror
webapi = 0.0.0.0:6777
log = ""
cronlog = ""
`), 0666)

	// さらに2秒待つ
	time.Sleep(time.Second * 2)

	// 書き換わっている事の確認
	if goron.Config.Config.NotifyWhen != "onerror" {
		t.Errorf("config not reloaded. notifyWhen: %v", goron.Config.Config.NotifyWhen)
	}
}
예제 #2
0
파일: main.go 프로젝트: uwork/gorond
func doMain(configPath string, includeDir string, pidPath string) int {

	// load config.
	config, err := config.LoadConfig(configPath, includeDir)
	if err != nil {
		log.Println(err)
		return -1
	}

	// start goron.
	grn, err := goron.NewGorond(config)
	if err != nil {
		log.Println(err)
		return -1
	}

	// Goronデーモンの開始
	grn.Start()

	// API サーバの開始
	if grn.Config.Config.WebApi != "" {
		webapi.SetLogger(config.Config.ApiLog)
		server, err := webapi.NewWebApiServer(grn.Config.Config.WebApi, grn)
		if err != nil {
			log.Println(err)
			return -2
		}

		wc := make(chan os.Signal)
		wsc := make(chan error)
		signal.Notify(wc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
		err = server.Start(wc, wsc)
		if err != nil {
			log.Println(err)
			return -2
		}
	}

	// create pid file.
	err = util.SavePidFile(pidPath)
	if err != nil {
		log.Println(err)
		return -3
	}
	defer os.Remove(pidPath)

	log.Println("wait for signal")

	// wait for terminate.
	c := make(chan os.Signal)
	sc := make(chan int, 1)
	signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
	go goron.WaitSignal(c, sc)

	return <-sc
}
예제 #3
0
파일: main.go 프로젝트: uwork/gorond
func doConfigTest(configPath string, includeDir string) int {

	// load config test.
	_, err := config.LoadConfig(configPath, includeDir)
	if err != nil {
		log.Println(err)
		return -1
	}

	return 0
}
예제 #4
0
파일: webapi_test.go 프로젝트: uwork/gorond
// テスト用のサーバを作成
func createTestServer(t *testing.T) (*WebApiServer, chan os.Signal, chan error) {
	conf, err := config.LoadConfig("webapi_test.conf", "config_test.d")
	if err != nil {
		t.Error(err)
	}
	grn, err := goron.NewGorond(conf)
	if err != nil {
		t.Error(err)
	}

	server, err := NewWebApiServer(grn.Config.Config.WebApi, grn)
	if err != nil {
		t.Error(err)
		os.Exit(-1)
	}

	wc := make(chan os.Signal)
	wsc := make(chan error)
	signal.Notify(wc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)

	return server, wc, wsc
}