2017-03-14 06:31:46 +00:00
|
|
|
|
package app
|
|
|
|
|
|
|
|
|
|
import (
|
2017-04-02 02:38:49 +00:00
|
|
|
|
"os"
|
2017-03-23 05:58:42 +00:00
|
|
|
|
|
2017-04-02 02:38:49 +00:00
|
|
|
|
"github.com/ouqiang/cron-scheduler/models"
|
|
|
|
|
"github.com/ouqiang/cron-scheduler/modules/ansible"
|
|
|
|
|
"github.com/ouqiang/cron-scheduler/modules/crontask"
|
|
|
|
|
"github.com/ouqiang/cron-scheduler/service"
|
2017-04-03 03:23:21 +00:00
|
|
|
|
"github.com/ouqiang/cron-scheduler/modules/setting"
|
2017-04-03 07:27:19 +00:00
|
|
|
|
"github.com/ouqiang/cron-scheduler/modules/logger"
|
2017-04-06 06:58:34 +00:00
|
|
|
|
"runtime"
|
2017-03-14 06:31:46 +00:00
|
|
|
|
)
|
|
|
|
|
|
2017-04-02 02:19:52 +00:00
|
|
|
|
var (
|
2017-04-02 02:38:49 +00:00
|
|
|
|
AppDir string // 应用根目录
|
|
|
|
|
ConfDir string // 配置目录
|
|
|
|
|
LogDir string // 日志目录
|
|
|
|
|
DataDir string // 数据目录,存放session文件等
|
|
|
|
|
AppConfig string // 应用配置文件
|
|
|
|
|
AnsibleHosts string // ansible hosts文件
|
|
|
|
|
Installed bool // 应用是否安装过
|
2017-04-06 06:58:34 +00:00
|
|
|
|
IsWindows bool // 是否是在windows上运行
|
2017-03-14 06:31:46 +00:00
|
|
|
|
)
|
|
|
|
|
|
2017-04-06 06:58:34 +00:00
|
|
|
|
func init() {
|
|
|
|
|
IsWindows = runtime.GOOS == "windows"
|
|
|
|
|
}
|
|
|
|
|
|
2017-03-24 09:55:44 +00:00
|
|
|
|
func InitEnv() {
|
2017-04-03 07:27:19 +00:00
|
|
|
|
logger.InitLogger()
|
2017-04-02 02:38:49 +00:00
|
|
|
|
wd, err := os.Getwd()
|
|
|
|
|
if err != nil {
|
2017-04-03 10:16:23 +00:00
|
|
|
|
logger.Fatal(err)
|
2017-04-02 02:38:49 +00:00
|
|
|
|
}
|
|
|
|
|
AppDir = wd
|
|
|
|
|
ConfDir = AppDir + "/conf"
|
|
|
|
|
LogDir = AppDir + "/log"
|
|
|
|
|
DataDir = AppDir + "/data"
|
|
|
|
|
AppConfig = ConfDir + "/app.ini"
|
|
|
|
|
AnsibleHosts = ConfDir + "/ansible_hosts.ini"
|
|
|
|
|
checkDirExists(ConfDir, LogDir, DataDir)
|
|
|
|
|
// ansible配置文件目录
|
|
|
|
|
os.Setenv("ANSIBLE_CONFIG", ConfDir)
|
|
|
|
|
Installed = IsInstalled()
|
|
|
|
|
if Installed {
|
|
|
|
|
InitDb()
|
|
|
|
|
InitResource()
|
|
|
|
|
}
|
2017-03-14 06:31:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 判断应用是否安装过
|
|
|
|
|
func IsInstalled() bool {
|
2017-04-02 02:38:49 +00:00
|
|
|
|
_, err := os.Stat(ConfDir + "/install.lock")
|
|
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
return false
|
|
|
|
|
}
|
2017-03-14 06:31:46 +00:00
|
|
|
|
|
2017-04-02 02:38:49 +00:00
|
|
|
|
return true
|
2017-03-14 06:31:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建安装锁文件
|
|
|
|
|
func CreateInstallLock() error {
|
2017-04-02 02:38:49 +00:00
|
|
|
|
_, err := os.Create(ConfDir + "/install.lock")
|
|
|
|
|
if err != nil {
|
2017-04-03 07:27:19 +00:00
|
|
|
|
logger.Error("创建安装锁文件失败")
|
2017-04-02 02:38:49 +00:00
|
|
|
|
}
|
2017-03-14 06:31:46 +00:00
|
|
|
|
|
2017-04-02 02:38:49 +00:00
|
|
|
|
return err
|
2017-03-14 06:31:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 初始化资源
|
2017-03-24 05:06:53 +00:00
|
|
|
|
func InitResource() {
|
2017-04-02 02:38:49 +00:00
|
|
|
|
// 初始化ansible Hosts
|
|
|
|
|
ansible.DefaultHosts = ansible.NewHosts(AnsibleHosts)
|
|
|
|
|
// 初始化定时任务
|
|
|
|
|
crontask.DefaultCronTask = crontask.NewCronTask()
|
|
|
|
|
serviceTask := new(service.Task)
|
|
|
|
|
serviceTask.Initialize()
|
2017-03-14 06:31:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-04-01 09:04:40 +00:00
|
|
|
|
// 初始化DB
|
2017-04-03 03:23:21 +00:00
|
|
|
|
func InitDb() {
|
|
|
|
|
dbConfig := getDbConfig(AppConfig)
|
|
|
|
|
models.Db = models.CreateDb(dbConfig)
|
2017-04-01 09:04:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-03-14 06:31:46 +00:00
|
|
|
|
// 检测目录是否存在
|
2017-04-02 02:19:52 +00:00
|
|
|
|
func checkDirExists(path ...string) {
|
2017-04-02 02:38:49 +00:00
|
|
|
|
for _, value := range path {
|
|
|
|
|
_, err := os.Stat(value)
|
|
|
|
|
if os.IsNotExist(err) {
|
2017-04-03 07:27:19 +00:00
|
|
|
|
logger.Fatal(value + "目录不存在")
|
2017-04-02 02:38:49 +00:00
|
|
|
|
}
|
|
|
|
|
if os.IsPermission(err) {
|
2017-04-03 07:27:19 +00:00
|
|
|
|
logger.Fatal(value + "目录无权限操作")
|
2017-04-02 02:38:49 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2017-04-02 02:19:52 +00:00
|
|
|
|
}
|
2017-04-03 03:23:21 +00:00
|
|
|
|
|
|
|
|
|
// 获取数据库配置
|
|
|
|
|
func getDbConfig(configFile string) map[string]string {
|
|
|
|
|
config, err := setting.Read(configFile)
|
|
|
|
|
if err != nil {
|
2017-04-03 07:27:19 +00:00
|
|
|
|
logger.Fatal(err)
|
2017-04-03 03:23:21 +00:00
|
|
|
|
}
|
|
|
|
|
section := config.Section("db")
|
|
|
|
|
if err != nil {
|
2017-04-03 07:27:19 +00:00
|
|
|
|
logger.Fatal(err)
|
2017-04-03 03:23:21 +00:00
|
|
|
|
}
|
|
|
|
|
var db map[string]string = make(map[string]string)
|
|
|
|
|
db["user"] = section.Key("user").String()
|
|
|
|
|
db["password"] = section.Key("password").String()
|
|
|
|
|
db["host"] = section.Key("host").String()
|
|
|
|
|
db["port"] = section.Key("port").String()
|
|
|
|
|
db["database"] = section.Key("database").String()
|
|
|
|
|
db["charset"] = section.Key("charset").String()
|
|
|
|
|
db["prefix"] = section.Key("prefix").String()
|
|
|
|
|
db["engine"] = section.Key("engine").String()
|
|
|
|
|
|
|
|
|
|
return db
|
2017-04-03 07:27:19 +00:00
|
|
|
|
}
|