Commit 54b1df06 authored by TENCENT\denisfan's avatar TENCENT\denisfan
Browse files

tt

Showing with 101 additions and 87 deletions
+101 -87
......@@ -50,6 +50,7 @@ app.use(apiRouter.routes(), apiRouter.allowedMethods());
//激活静态资源中间件
app.use(static(path.join(__dirname, './client/dist'), {maxage: 7 * 24 * 60 * 60 * 1000}));
app.use(static(path.join(__dirname, './public'), {maxage: 7 * 24 * 60 * 60 * 1000}));
app.use(static(path.join(__dirname, './files'), {maxage: 7 * 24 * 60 * 60 * 1000}));
//后置中间件
postMidware.forEach((midware)=>{
......
......@@ -26,13 +26,12 @@ ServerDao.getServerConf = async(params) => {
params.application != undefined && (where.application = params.application);
params.serverName != undefined && (where.server_name = params.serverName);
params.nodeName != undefined && (where.node_name = params.nodeName);
if (params.enableSet) {
where.enable_set = params.enableSet;
if (params.enableSet == 'Y') {
params.setName && (where.set_name = params.setName);
params.setArea && (where.set_area = params.setArea);
params.setGroup && (where.set_group = params.setGroup);
}
if (params.enableSet && params.enableSet == 'Y') {
params.setName && (where.set_name = params.setName);
params.setArea && (where.set_area = params.setArea);
params.setGroup && (where.set_group = params.setGroup);
}else{
where.enable_set = 'N'
}
let options = {
where: where,
......
//第三方登录相关
let loginConf = require('../../config/loginConf');
let request = require('request-promise-any');
let _ = require('lodash');
......@@ -7,8 +6,6 @@ let logger = require('../logger');
let ignoreList = _.concat([], loginConf.ignore || [], ['/favicon.ico']); //讲登入登出校验接口放到忽略登录校验列表中,兼容本地登录情况
let url = require('url');
let loginCookieMap = {}; //内存中保存用户的登录信息
let cookieDomainConfig = {
domain: loginConf.cookieDomain || '/' //用户cookie域
};
......@@ -18,6 +15,7 @@ let cookieConfig = Object.assign({
//登录校验中间件
module.exports = async(ctx, next) => {
ctx.sourceIp = getSourceIp(ctx);
if (ctx.request.path === '/logout') {
ctx.cookies.set(loginConf.ticketCookieName || 'ticket', null, cookieDomainConfig);
ctx.cookies.set(loginConf.uidCookieName || 'uid', null, cookieDomainConfig);
......@@ -26,10 +24,8 @@ module.exports = async(ctx, next) => {
} else if (!loginConf.enableLogin) {
ctx.uid = loginConf.defaultLoginUid;
await next();
} else if (isInPath(ctx, ignoreList)) { //跳过用户配置的不需要验证的url
await next();
} else if (isInIgnoreIps(ctx, loginConf.ignoreIps || [])) {
ctx.uid = ctx.query['uid'];
} else if (isInPath(ctx, ignoreList) || isInIgnoreIps(ctx, loginConf.ignoreIps || [])) { //跳过用户配置的不需要验证的url或白名单IP
ctx.uid = ctx.query['uid'] || loginConf.defaultLoginUid;
await next();
} else {
let ticket, uid;
......@@ -85,7 +81,7 @@ function isInPath(ctx, pathList) {
//检测是否在IP白名单之中
function isInIgnoreIps(ctx, ignoreIps) {
var ip = getClientIp(ctx);
var ip = ctx.sourceIp;
return _.indexOf(ignoreIps || [], ip) > -1;
}
......@@ -132,25 +128,7 @@ async function getUid(ticket) {
//判断是否ticket和uid是否有效
async function validate(uid, ticket) {
try {
let rst = false;
if (loginConf.enableLocalCache && loginCookieMap[uid] && loginCookieMap[uid].ticket === ticket) {
if (loginCookieMap[uid].updateTime && (new Date()).getTime() - loginCookieMap[uid].updateTime < loginConf.maxAge) {
rst = true;
} else { //如果本地缓存过期,则检测第三方缓存
rst = await casServerValidate(ticket, uid);
}
} else {
rst = await casServerValidate(ticket, uid);
}
if (rst) {
if (!loginCookieMap[uid]) {
loginCookieMap[uid] = {}
}
if (!loginCookieMap[uid].ticket) {
loginCookieMap[uid].ticket = ticket;
}
loginCookieMap[uid].updateTime = (new Date()).getTime();
}
let rst = await casServerValidate(ticket, uid) || false;
return rst;
} catch (e) {
logger.error(e);
......@@ -186,7 +164,7 @@ async function casServerValidate(ticket, uid) {
}
}
function getClientIp(ctx) {
function getSourceIp(ctx) {
let req = ctx.request;
var ip = req.headers['x-forwarded-for'] ||
req.ip ||
......
......@@ -21,8 +21,7 @@ const pageConf = [
['get', '/', PageController.index],
['get', '/old', PageController.indexOld],
['get', '/pages/op_manage.htm', PageController.opManage],
['get', '/pages/tree', TreeController.listTree],
['get', '/tarsnode_install.sh', ResourceController.downloadTarsNode],
['get', '/pages/tree', TreeController.listTree]
];
const apiConf = [
......
const {configFPrx, configFStruct, adminRegPrx, adminRegStruct} = require('../util/rpcClient');
var client = require("@tars/registry");
const {configFPrx, configFStruct, adminRegPrx, adminRegStruct, client} = require('../util/rpcClient');
var registry = require("@tars/registry");
registry.setLocator(client.getProperty('locator'));
const logger = require('../../logger');
const TarsStream = require('@tars/stream');
......@@ -66,7 +69,8 @@ AdminService.addTask = async (req) => {
AdminService.getEndpoints = async (objName) => {
return await client.findObjectById(objName);
let ret = await registry.findObjectById(objName);
return ret.response.return.value;
};
module.exports = AdminService;
\ No newline at end of file
......@@ -50,14 +50,13 @@ async function call(params, the) {
let addrs = await AdminService.getEndpoints("tars.tarsqueryproperty.NoTarsObj").catch(err => {
logger.error('[AdminService.getEndpoints]:',err.toString());
});
//addrs = [['localhost','80']]; // 测试的,假定真实环境传给我这样的数据结构
if(!addrs || !addrs.length) {
logger.error('[AdminService.getEndpoints]:','tars.tarsqueryproperty.NoTarsObj not found');
return;
}
let addr0 = addrs[0];
logger.info(`tars.tarsqueryproperty.NoTarsObj, use ${addr0[0]}:${addr0[1]}`);
return await TCPClient(addr0[0], addr0[1], requestObj);
return await TCPClient(addr0.host, addr0.port, requestObj);
}
function merge(params, theData, preData) {
......
......@@ -3,6 +3,7 @@
*/
const WebSocket = require('ws');
const logger = require('../../logger');
let TCPClient = function (ip, port, requestObj) {
let wsClient = new WebSocket(`ws://${ip}:${port}`);
......
......@@ -32,30 +32,6 @@ ResourceService.installTarsNodes = async(ips) => {
return rst;
};
ResourceService.installTarsNodes = async(ips) => {
//若该ip已经存在表中,则不安装tars node。
let rst = [];
let nodeInfos = await ResourceDao.getNodeInfo(ips);
let installedIps = [];
nodeInfos.forEach((nodeInfo)=> {
nodeInfo = nodeInfo.dataValues;
installedIps.push(nodeInfo.endpoint_ip);
rst.push({
ip: nodeInfo.endpoint_ip,
rst: true,
msg: '#api.resource.tarsNodeExist#'
});
});
let needInstallIps = _.difference(ips, installedIps);
let installTask = [];
needInstallIps.forEach((ip)=>{
installTask.push(ResourceService.doInstallTarsNode(ip));
});
let installRst = await Promise.all(installTask);
rst = rst.concat(installRst);
return rst;
};
ResourceService.doInstallTarsNode = async(ip) => {
try {
......@@ -88,6 +64,8 @@ ResourceService.doUninstallTarsNode = async(ip) => {
ResourceService.doSSHTask = async(ip, shell)=>{
console.log(ip)
console.log(shell);
try{
let index = _.findIndex(sshConfs || [], (o) => {
return o.ip === ip
......
if [ ! -d "/usr/local/app/tars" ]; then
mkdir -p /usr/local/app/tars
cd /usr/local/app/tars/
wget http://${ip}:${port}/tarsnode.tgz
tar -zxvf tarsnode.tgz
cd ./tarsnode/config
wget http://${ip}:${port}/tarsnode.tar.gz
tar -zxvf tarsnode.tar.gz
cd ./tarsnode/conf
sed -i "s/192.168.2.131/${machine_ip}/g" `grep 192.168.2.131 -rl ./*`
cd ../bin
chmod u+x tarsnode
./tarsnode --config=../tarsnode.conf
nohup ./tarsnode --config=../conf/tarsnode.conf &
if [[ `ps -ef | grep tarsnode` =~ "./tarsnode --config=../conf/tarsnode.conf" ]]; then
echo 'Tars node installed success'
else
echo 'Tars node installed failed'
fi
else
echo "Tars node has installed"
fi
\ No newline at end of file
if [ ! -d "/usr/local/app/tars" ]; then
mkdir -p /usr/local/app/tars
cd /usr/local/app/tars/
wget http://{{ip}}:{{port}}/tarsnode_install.sh
tar -zxvf tarsnode.tgz
cd ./tarsnode/scripts
chmod u+x tarsnode_install.sh
./tarsnode_install.sh
$ref =
if [ps -ef | grep tarsnode ~= './tarsnode --config=../config/tarsnode.conf']; then
echo 'Tars node installed success'
else
echo "Tars node has installed"
fi
\ No newline at end of file
echo 'Tars node installed failed'
fi
......@@ -5,6 +5,7 @@ const util = require('../../tools/util');
const ConfigService = require('../config/ConfigService');
const AdapterService = require('../adapter/AdapterService');
const AuthService = require('../auth/AuthService');
const ResourceService = require('../resource/ResourceService');
const ServerService = {};
......@@ -97,8 +98,9 @@ ServerService.addServerConf = async(params)=> {
delete(params.developer);
let serverConf = ServerService.serverConfFields();
serverConf = util.leftAssign(serverConf, params);
serverConf.enable_set = serverConf.enable_set ? 'Y' : 'N';
serverConf.enable_set = params.enable_set ? 'Y' : 'N';
serverConf.posttime = new Date();
await ServerDao.insertServerConf(serverConf);
......@@ -121,7 +123,15 @@ ServerService.addServerConf = async(params)=> {
newAdapterConf.posttime = new Date();
await AdapterDao.insertAdapterConf(newAdapterConf);
}
return await ServerDao.getServerConfByName(serverConf.application, serverConf.server_name, serverConf.node_name);
//安装节点
let installRst = await ResourceService.installTarsNodes([params.node_name]);
let newServerConf = await ServerDao.getServerConfByName(serverConf.application, serverConf.server_name, serverConf.node_name);
return {
tasNodeRst: installRst,
serverConf: newServerConf
};
// return await ServerDao.getServerConfByName(serverConf.application, serverConf.server_name, serverConf.node_name);
};
module.exports = ServerService;
\ No newline at end of file
......@@ -3,8 +3,7 @@ const TarsProxy = require("./rpcProxy/NodeTarsProxy");
const AdminRegProxy = require("./rpcProxy/AdminRegProxy");
const ConfigFProxy = require("./rpcProxy/ConfigFProxy");
const path = require('path');
client.initialize(path.join(__dirname, './tars.conf'));
client.initialize(path.join(__dirname, '../../../../config/tars.conf'));
const RPCClientPrx = (proxy, moduleName, interfaceName, servantName, setInfo) => {
var module = proxy[moduleName];
var rpcClient = client.stringToProxy(module[interfaceName+'Proxy'], servantName, setInfo);
......@@ -74,6 +73,7 @@ module.exports = {
configFPrx : RPCClientPrx(ConfigFProxy, 'tars', 'Config', 'tars.tarsconfig.ConfigObj'),
configFStruct : RPCStruct(ConfigFProxy, 'tars'),
client: client
// configFPrx : RPCClientPrx(ConfigFProxy, 'tars', 'Config', 'TARS.NodeTarsServer.Config@tcp -h 127.0.0.1 -p 14003 -t 10000'),
// configFStruct : RPCStruct(ConfigFProxy, 'tars'),
};
\ No newline at end of file
......@@ -3,7 +3,7 @@
#proxy需要的配置
<client>
#地址
locator = tars.tarsregistry.QueryObj@tcp -h registry1.tars.com -p 17890:tcp -h registry2.tars.com -p 17890
locator = tars.tarsregistry.QueryObj@tcp -h registry1.tars.com -p 17890:tars.tarsregistry.QueryObj@tcp -h registry2.tars.com -p 17890
sync-invoke-timeout = 20000
#最大超时时间(毫秒)
max-invoke-timeout = 60000
......
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>TARS</title><link href=/static/css/app.474f2.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.6f04e.js></script><script type=text/javascript src=/static/js/vendor.9b753.js></script><script type=text/javascript src=/static/js/app.5d2d4.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>TARS</title><link href=/static/css/app.bccc2.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.6f04e.js></script><script type=text/javascript src=/static/js/vendor.c722c.js></script><script type=text/javascript src=/static/js/app.0d670.js></script></body></html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment