mirror of https://github.com/tp4a/teleport
1. 调整安装页面,根据用户配置文件显示要操作的数据库;2. 支持重新加载配置文件;3. 调整几个文件名;
parent
233702811e
commit
7e80ab6ed3
|
@ -3,6 +3,7 @@
|
||||||
import configparser
|
import configparser
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import eom_common.eomcore.utils as utils
|
||||||
from eom_common.eomcore.logger import log
|
from eom_common.eomcore.logger import log
|
||||||
|
|
||||||
__all__ = ['app_cfg']
|
__all__ = ['app_cfg']
|
||||||
|
@ -187,6 +188,13 @@ class BaseAppConfig(dict):
|
||||||
def _on_load(self, cfg_parser):
|
def _on_load(self, cfg_parser):
|
||||||
raise RuntimeError('can not create instance for base class.')
|
raise RuntimeError('can not create instance for base class.')
|
||||||
|
|
||||||
|
def reload(self):
|
||||||
|
self['_cfg_default'] = {}
|
||||||
|
self['_cfg_loaded'] = {}
|
||||||
|
self['_kvs'] = {'_': self['_kvs']['_']}
|
||||||
|
self._on_init()
|
||||||
|
return self.load(self['_cfg_file'])
|
||||||
|
|
||||||
def set_kv(self, key, val):
|
def set_kv(self, key, val):
|
||||||
x = key.split('::')
|
x = key.split('::')
|
||||||
if 1 == len(x):
|
if 1 == len(x):
|
||||||
|
@ -420,7 +428,7 @@ class AppConfig(BaseAppConfig):
|
||||||
self.set_default('database::mysql-db', 'teleport', 'mysql-db=teleport')
|
self.set_default('database::mysql-db', 'teleport', 'mysql-db=teleport')
|
||||||
self.set_default('database::mysql-prefix', 'tp_', 'mysql-prefix=tp_')
|
self.set_default('database::mysql-prefix', 'tp_', 'mysql-prefix=tp_')
|
||||||
self.set_default('database::mysql-user', 'teleport', 'mysql-user=teleport')
|
self.set_default('database::mysql-user', 'teleport', 'mysql-user=teleport')
|
||||||
self.set_default('database::mysql-password', None, 'mysql-password=password')
|
self.set_default('database::mysql-password', 'password', 'mysql-password=password')
|
||||||
|
|
||||||
def _on_get_save_info(self):
|
def _on_get_save_info(self):
|
||||||
return [
|
return [
|
||||||
|
@ -498,6 +506,21 @@ class AppConfig(BaseAppConfig):
|
||||||
if _tmp_str is not None:
|
if _tmp_str is not None:
|
||||||
self.set_kv('database::mysql-password', _tmp_str)
|
self.set_kv('database::mysql-password', _tmp_str)
|
||||||
|
|
||||||
|
_log_file, ok = self.get_str('common::log-file')
|
||||||
|
if ok:
|
||||||
|
self.log_path = os.path.abspath(os.path.dirname(_log_file))
|
||||||
|
else:
|
||||||
|
_log_file = os.path.join(self.log_path, 'tpweb.log')
|
||||||
|
self.set_default('common::log-file', _log_file)
|
||||||
|
|
||||||
|
if not os.path.exists(self.log_path):
|
||||||
|
utils.make_dir(self.log_path)
|
||||||
|
if not os.path.exists(self.log_path):
|
||||||
|
log.e('Can not create log path:{}\n'.format(self.log_path))
|
||||||
|
return False
|
||||||
|
|
||||||
|
log.set_attribute(filename=_log_file)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def update_core(self, conf_data):
|
def update_core(self, conf_data):
|
||||||
|
|
|
@ -33,24 +33,25 @@ class WebServerCore:
|
||||||
cfg.template_path = os.path.abspath(options['template_path'])
|
cfg.template_path = os.path.abspath(options['template_path'])
|
||||||
cfg.res_path = os.path.abspath(options['res_path'])
|
cfg.res_path = os.path.abspath(options['res_path'])
|
||||||
cfg.cfg_path = os.path.abspath(options['cfg_path'])
|
cfg.cfg_path = os.path.abspath(options['cfg_path'])
|
||||||
|
cfg.log_path = os.path.abspath(options['log_path'])
|
||||||
|
|
||||||
_cfg_file = os.path.join(cfg.cfg_path, 'web.ini')
|
_cfg_file = os.path.join(cfg.cfg_path, 'web.ini')
|
||||||
if not cfg.load(_cfg_file):
|
if not cfg.load(_cfg_file):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
_log_file, ok = cfg.get_str('common::log-file')
|
# _log_file, ok = cfg.get_str('common::log-file')
|
||||||
if ok:
|
# if ok:
|
||||||
cfg.log_path = os.path.abspath(os.path.dirname(_log_file))
|
# cfg.log_path = os.path.abspath(os.path.dirname(_log_file))
|
||||||
else:
|
# else:
|
||||||
cfg.log_path = os.path.abspath(options['log_path'])
|
# cfg.log_path = os.path.abspath(options['log_path'])
|
||||||
_log_file = os.path.join(cfg.log_path, 'tpweb.log')
|
# _log_file = os.path.join(cfg.log_path, 'tpweb.log')
|
||||||
cfg.set_default('common::log-file', _log_file)
|
# cfg.set_default('common::log-file', _log_file)
|
||||||
|
#
|
||||||
if not os.path.exists(cfg.log_path):
|
# if not os.path.exists(cfg.log_path):
|
||||||
utils.make_dir(cfg.log_path)
|
# utils.make_dir(cfg.log_path)
|
||||||
if not os.path.exists(cfg.log_path):
|
# if not os.path.exists(cfg.log_path):
|
||||||
log.e('Can not create log path:{}\n'.format(cfg.log_path))
|
# log.e('Can not create log path:{}\n'.format(cfg.log_path))
|
||||||
return False
|
# return False
|
||||||
|
|
||||||
# log.set_attribute(min_level=cfg.common.log_level, filename=cfg.common.log_file)
|
# log.set_attribute(min_level=cfg.common.log_level, filename=cfg.common.log_file)
|
||||||
# if cfg.common.debug_mode:
|
# if cfg.common.debug_mode:
|
||||||
|
|
|
@ -181,6 +181,8 @@ class TPDatabase:
|
||||||
elif self.db_type == self.DB_TYPE_MYSQL:
|
elif self.db_type == self.DB_TYPE_MYSQL:
|
||||||
# select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='dbname' and TABLE_NAME='tablename' ;
|
# select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='dbname' and TABLE_NAME='tablename' ;
|
||||||
ret = self.query('SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA="{}" and TABLE_NAME="{}";'.format(self.mysql_db, table_name))
|
ret = self.query('SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA="{}" and TABLE_NAME="{}";'.format(self.mysql_db, table_name))
|
||||||
|
if ret is None:
|
||||||
|
return None
|
||||||
if len(ret) == 0:
|
if len(ret) == 0:
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -49,7 +49,7 @@ class IndexHandler(TPBaseUserAuthHandler):
|
||||||
param['cert_list'] = host.get_cert_list()
|
param['cert_list'] = host.get_cert_list()
|
||||||
self.render('host/admin_index.mako', page_param=json.dumps(param))
|
self.render('host/admin_index.mako', page_param=json.dumps(param))
|
||||||
else:
|
else:
|
||||||
self.render('host/common_index.mako', page_param=json.dumps(param))
|
self.render('host/user_index.mako', page_param=json.dumps(param))
|
||||||
|
|
||||||
|
|
||||||
class UploadAndImportHandler(TPBaseAdminAuthHandler):
|
class UploadAndImportHandler(TPBaseAdminAuthHandler):
|
||||||
|
|
|
@ -19,7 +19,10 @@ class IndexHandler(TPBaseUserAuthHandler):
|
||||||
class InstallHandler(TPBaseAdminAuthHandler):
|
class InstallHandler(TPBaseAdminAuthHandler):
|
||||||
def get(self):
|
def get(self):
|
||||||
if get_db().need_create:
|
if get_db().need_create:
|
||||||
|
cfg.reload()
|
||||||
|
|
||||||
_db = get_db()
|
_db = get_db()
|
||||||
|
_db.init()
|
||||||
|
|
||||||
db = {'type': _db.db_type}
|
db = {'type': _db.db_type}
|
||||||
if _db.db_type == _db.DB_TYPE_SQLITE:
|
if _db.db_type == _db.DB_TYPE_SQLITE:
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
<%block name="extend_js">
|
<%block name="extend_js">
|
||||||
<script type="text/javascript" src="${ static_url('js/ui/teleport.js') }"></script>
|
<script type="text/javascript" src="${ static_url('js/ui/teleport.js') }"></script>
|
||||||
<script type="text/javascript" src="${ static_url('js/ui/admin_host.js') }"></script>
|
<script type="text/javascript" src="${ static_url('js/ui/host/admin.js') }"></script>
|
||||||
</%block>
|
</%block>
|
||||||
|
|
||||||
<%block name="breadcrumb">
|
<%block name="breadcrumb">
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
<%block name="extend_js">
|
<%block name="extend_js">
|
||||||
<script type="text/javascript" src="${ static_url('js/ui/teleport.js') }"></script>
|
<script type="text/javascript" src="${ static_url('js/ui/teleport.js') }"></script>
|
||||||
<script type="text/javascript" src="${ static_url('js/ui/common_host.js') }"></script>
|
<script type="text/javascript" src="${ static_url('js/ui/host/user.js') }"></script>
|
||||||
</%block>
|
</%block>
|
||||||
|
|
||||||
<%block name="breadcrumb">
|
<%block name="breadcrumb">
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
.steps-detail {
|
.steps-detail {
|
||||||
display: none;
|
display: none;
|
||||||
margin: 10px;
|
## margin: 10px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border: 1px solid #b4b4b4;
|
border: 1px solid #b4b4b4;
|
||||||
background-color: #dcdcdc;
|
background-color: #dcdcdc;
|
||||||
|
@ -44,8 +44,30 @@
|
||||||
border: 1px solid #9c2a26;
|
border: 1px solid #9c2a26;
|
||||||
}
|
}
|
||||||
|
|
||||||
#sqlite-info, #mysql-info {
|
## #db-info {
|
||||||
display: none;
|
## }
|
||||||
|
|
||||||
|
.table {
|
||||||
|
width: auto;
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table .key {
|
||||||
|
## width:240px;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table .value {
|
||||||
|
text-align: left;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-box {
|
||||||
|
border:1px solid #e2cab4;
|
||||||
|
background-color: #ffe4cb;
|
||||||
|
padding:15px;
|
||||||
|
color: #000000;
|
||||||
|
margin-bottom:10px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</%block>
|
</%block>
|
||||||
|
@ -62,11 +84,11 @@
|
||||||
|
|
||||||
<h2>第一步:创建数据表</h2>
|
<h2>第一步:创建数据表</h2>
|
||||||
<div>
|
<div>
|
||||||
<p>请选择要使用的数据库类型(暂时仅支持sqlite,其它类型开发中):</p>
|
<p>TELEPORT支持<strong>SQLite</strong>和<strong>MySQL</strong>数据库,根据您的配置,将使用以下信息进行操作:</p>
|
||||||
<input id="db-sqlite" type="radio" checked="checked" name="database" value="sqlite"/> <label for="db-sqlite">SQLite</label><br/>
|
<table id="db-info" class="table"></table>
|
||||||
<input id="db-mysql" type="radio" name="database" value="mysql"/> <label for="db-mysql">MySQL(开发中,暂不支持)</label>
|
<div class="notice-box">
|
||||||
<div id="sqlite-info"></div>
|
注意:如果以上配置并不是您所期望的,请修改您的配置文件,然后刷新本页面。
|
||||||
<div id="mysql-info"></div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<button id="btn-create-db" type="button" class="btn btn-primary"><i class="fa fa-wrench fa-fw"></i> 开始创建</button>
|
<button id="btn-create-db" type="button" class="btn btn-primary"><i class="fa fa-wrench fa-fw"></i> 开始创建</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -77,7 +99,7 @@
|
||||||
<div id="step2" style="display:none;">
|
<div id="step2" style="display:none;">
|
||||||
<hr/>
|
<hr/>
|
||||||
<h2>已完成!</h2>
|
<h2>已完成!</h2>
|
||||||
<p>是的,没有第二步了,安装配置已经完成了!刷新页面即可进入Teleport主界面啦~~</p>
|
<p>是的,没有第二步了,安装配置已经完成了!刷新页面即可进入 TELEPORT 主界面啦~~</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -91,20 +113,47 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
ywl.add_page_options(${ page_param });
|
ywl.add_page_options(${ page_param });
|
||||||
|
|
||||||
|
|
||||||
|
ywl._make_info = function (key, value) {
|
||||||
|
return '<tr><td class="key">' + key + ':</td><td class="value">' + value + '</td></tr>';
|
||||||
|
};
|
||||||
|
|
||||||
ywl.on_init = function (cb_stack, cb_args) {
|
ywl.on_init = function (cb_stack, cb_args) {
|
||||||
ywl.dom = {
|
ywl.dom = {
|
||||||
btn_create_db: $('#btn-create-db'),
|
btn_create_db: $('#btn-create-db'),
|
||||||
steps_detail: $('#steps-detail'),
|
steps_detail: $('#steps-detail'),
|
||||||
sqlite_info: $('#sqlite-info'),
|
db_info: $('#db-info')
|
||||||
mysql_info: $('#mysql-info')
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var html = [];
|
||||||
if (ywl.page_options.db.type === DB_TYPE_SQLITE) {
|
if (ywl.page_options.db.type === DB_TYPE_SQLITE) {
|
||||||
|
html.push(ywl._make_info('数据库类型', 'SQLite'));
|
||||||
|
html.push(ywl._make_info('数据库文件', ywl.page_options.db.sqlite_file));
|
||||||
} else if (ywl.page_options.db.type === DB_TYPE_MYSQL) {
|
} else if (ywl.page_options.db.type === DB_TYPE_MYSQL) {
|
||||||
|
html.push(ywl._make_info('数据库类型', 'MySQL'));
|
||||||
|
html.push(ywl._make_info('MySQL主机', ywl.page_options.db.mysql_host));
|
||||||
|
html.push(ywl._make_info('MySQL端口', ywl.page_options.db.mysql_port));
|
||||||
|
html.push(ywl._make_info('数据库名称', ywl.page_options.db.mysql_db));
|
||||||
|
html.push(ywl._make_info('用户名', ywl.page_options.db.mysql_user));
|
||||||
|
|
||||||
|
var _t = [];
|
||||||
|
_t.push('<div class="notice-box">');
|
||||||
|
_t.push('注意:请确保您在执行后续创建操作之前,已经在MySQL数据库中创建了数据库"');
|
||||||
|
_t.push(ywl.page_options.db.mysql_db);
|
||||||
|
_t.push('"和用户"');
|
||||||
|
_t.push(ywl.page_options.db.mysql_user);
|
||||||
|
_t.push('",并为用户"');
|
||||||
|
_t.push(ywl.page_options.db.mysql_user);
|
||||||
|
_t.push('"设置了在数据库"');
|
||||||
|
_t.push(ywl.page_options.db.mysql_db);
|
||||||
|
_t.push('"创建表的权限!');
|
||||||
|
_t.push('</div>');
|
||||||
|
ywl.dom.db_info.after(_t.join(''));
|
||||||
} else {
|
} else {
|
||||||
ywl.show_message('error', '未知的数据库类型,请检查您的配置文件!');
|
ywl.show_message('error', '未知的数据库类型,请检查您的配置文件!');
|
||||||
ywl.dom.btn_create_db.attr('disabled', 'disabled').hide();
|
ywl.dom.btn_create_db.attr('disabled', 'disabled').hide();
|
||||||
}
|
}
|
||||||
|
ywl.dom.db_info.append(html.join(''));
|
||||||
|
|
||||||
ywl.dom.btn_create_db.click(function () {
|
ywl.dom.btn_create_db.click(function () {
|
||||||
|
|
||||||
|
@ -145,6 +194,7 @@
|
||||||
if (ret.code === TPE_OK) {
|
if (ret.code === TPE_OK) {
|
||||||
|
|
||||||
// show step progress.
|
// show step progress.
|
||||||
|
var all_ok = true;
|
||||||
var steps = ret.data.steps;
|
var steps = ret.data.steps;
|
||||||
ywl.dom.steps_detail.empty();
|
ywl.dom.steps_detail.empty();
|
||||||
|
|
||||||
|
@ -161,6 +211,7 @@
|
||||||
icon_class = 'fa-exclamation-circle';
|
icon_class = 'fa-exclamation-circle';
|
||||||
err_class = ' class="error"';
|
err_class = ' class="error"';
|
||||||
steps[i].msg += ' 失败!'
|
steps[i].msg += ' 失败!'
|
||||||
|
all_ok = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
err_class = '';
|
err_class = '';
|
||||||
|
@ -178,7 +229,9 @@
|
||||||
|
|
||||||
|
|
||||||
if (!ret.data.running) {
|
if (!ret.data.running) {
|
||||||
|
if (all_ok) {
|
||||||
$('#step2').show('fast');
|
$('#step2').show('fast');
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue