Example #1
0
File: main.go Project: safeie/fsmon
func main() {
	// Config
	config := parseConfig()
	isDaemon, err := config.GetBool("log", "daemon")
	logfile, err := config.GetString("log", "logfile")

	// Daemon
	if isDaemon {
		_, err := daemon.Daemon(1, 0)
		if err != nil {
			fmt.Println(err)
			os.Exit(1)
		}
	}

	// Log
	var logFileHandle *os.File
	if isDaemon {
		if logfile != "" {
			logFileHandle, err = os.OpenFile(logfile, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
		} else {
			logFileHandle, err = os.OpenFile("/dev/null", 0, 0)
		}
	} else {
		logFileHandle = os.Stderr
	}
	defer logFileHandle.Close()
	if err != nil {
		log.Fatalln(err.Error())
	}
	mon.logger = log.New(logFileHandle, "", log.Ldate|log.Ltime)

	// Watch
	initWatcher()
}
Example #2
0
func main() {
	var err error

	// 先设定工作目录
	var dir string
	dir, err = util.GetDir()
	if err != nil {
		log.Fatalln("My God, GetDir Fatal!")
	}
	acs := new(ACST)
	acs.Pwd = dir

	// 检测是否存在错误锁定
	if ok, _ := util.IsExist(acs.Pwd + util.ACS_LOCKFILE); ok {
		log.Fatalln("Sorry, acs had locked, please check error!")
	}

	// 启动daemon模式
	if len(os.Args) > 1 && os.Args[1] == "-d" {
		_, err = daemon.Daemon(1, 0)
		if err != nil {
			log.Fatalln(err)
		}
	}

	// 加载配置文件
	var conFile string
	conFile = "/conf/acs.conf"
	acs.parseConfig(acs.Pwd + conFile)

	// 加载过滤列表
	conFile = "/conf/exclude.conf"
	acs.parseExcludeList(acs.Pwd + conFile)

	// 初始化日志
	logFileHandle, err := os.OpenFile(acs.Config["logFile"], os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
	defer logFileHandle.Close()
	if err != nil {
		log.Fatalln(err.Error())
	}
	acs.Logger = log.New(logFileHandle, "", log.Ldate|log.Ltime)

	// 判断工作目录是否存在,如果不存在则创建
	if ok, err := util.IsExist(acs.Config["checkoutDir"]); !ok {
		err = os.Mkdir(acs.Config["checkoutDir"], 0777)
		if err != nil {
			log.Fatalln("checkoutDir create error: " + err.Error())
		}
	}
	if ok, err := util.IsExist(acs.Config["commitDir"]); !ok {
		err = os.Mkdir(acs.Config["commitDir"], 0777)
		if err != nil {
			log.Fatalln("commitDir create error: " + err.Error())
		}
	}

	// 初始化SVN结构
	acs.svn = new(util.SVNT)
	acs.svn.Bin = acs.Config["svnBin"]

	// 初始化SVN目录
	if ok, err := util.IsExist(acs.Config["checkoutDir"] + ".svn"); !ok {
		err = acs.svn.Checkout(acs.Config["checkoutDir"], acs.Config["svnReposCheckout"], 0)
		if err != nil {
			log.Fatalln("checkoutDir init svn error: " + err.Error())
		}
	}
	if ok, err := util.IsExist(acs.Config["commitDir"] + ".svn"); !ok {
		err = acs.svn.Checkout(acs.Config["commitDir"], acs.Config["svnReposCommit"], 0)
		if err != nil {
			log.Fatalln("commitDir init svn error: " + err.Error())
		}
	}

	// 检查错误是否已经被修正
	if ok, err := acs.svn.Status(acs.Config["commitDir"]); ok {
		log.Fatalln("oh! there's some error need you check, to be use [svn status] error: " + err.Error())
	}

	// 获取当前的工作的SVN版本
	var svnInfo = new(util.SvnInfo)
	svnInfo, err = acs.svn.Info(acs.Config["checkoutDir"])
	if err != nil {
		log.Fatalln("checkoutDir init svn info error: " + err.Error())
	}
	acs.CheckoutRev = svnInfo.Rev
	svnInfo, err = acs.svn.Info(acs.Config["commitDir"])
	if err != nil {
		log.Fatalln("commitDir init svn info error: " + err.Error())
	}
	acs.CommitRev = svnInfo.Rev

	// 开始工作啦
	for {
		time.Sleep(time.Second)
		acs.run()
	}
}
Example #3
0
func main() {
	var err error

	// 先设定工作目录
	var dir string
	dir, err = util.GetDir()
	if err != nil {
		log.Fatalln("My God, GetDir Fatal!")
	}
	dir = path.Dir(dir)

	// 检测是否存在错误锁定
	if ok, _ := util.IsExist(dir + util.LOCKFILE); ok {
		log.Fatalln("Sorry, encoder had locked, please check error!")
	}

	// 启动daemon模式
	var isDaemon bool
	if len(os.Args) > 1 && os.Args[1] == "-d" {
		_, err = daemon.Daemon(1, 0)
		if err != nil {
			log.Fatalln(err)
		}
		isDaemon = true
	}

	// 加载配置文件
	config := parseConfig(dir+CONFIG_FILE, dir)

	// 加载过滤列表
	excludeList := parseExcludeList(dir + EXCLUDE_FILE)

	// 初始化日志
	var logFileHandle *os.File
	if isDaemon {
		logFileHandle, err = os.OpenFile(config["logFile"], os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
		defer logFileHandle.Close()
		if err != nil {
			log.Fatalln(err.Error())
		}
	} else {
		logFileHandle = os.Stderr
	}
	logger := log.New(logFileHandle, "", log.Ldate|log.Ltime)

	var encoder client.Encoder
	if config["versionType"] == "git" {
		// GIT
		git := new(client.GitEncoder)
		git.Config = config
		git.ExcludeList = excludeList
		git.Pwd = dir
		git.Logger = logger
		encoder = git
	} else {
		// SVN
		svn := new(client.SvnEncoder)
		svn.Config = config
		svn.ExcludeList = excludeList
		svn.Pwd = dir
		svn.Logger = logger
		encoder = svn
	}

	// 开始工作啦
	sign := make(chan bool)
	encoder.Info("autoencode starting...")
	go encoder.Run(sign)

	// 启动信号监听,等待所有Process都运行结束
	trapSignal(encoder)
	<-sign

	// 停止工作
	encoder.Info("autoencode stopped.")
}