V_1.3.0
This commit is contained in:
parent
fe163ae6ad
commit
92e5814d5c
|
@ -1 +1 @@
|
||||||
2
|
1
|
|
@ -6,10 +6,11 @@ var select = require('xpath.js');
|
||||||
//var dataDetailPath = "/home/server_data/data-detail.xml"
|
//var dataDetailPath = "/home/server_data/data-detail.xml"
|
||||||
//var dataPath = "/home/server_data/data.xml"
|
//var dataPath = "/home/server_data/data.xml"
|
||||||
//var versionPath = "/home/server_data/version.txt"
|
//var versionPath = "/home/server_data/version.txt"
|
||||||
|
var allDataPath = process.env.ALL_DATA || '/home/all_data';
|
||||||
|
|
||||||
var dataDetailPath = "/home/server_data/data-detail.xml"
|
var dataDetailPath = allDataPath + "/collecting_data/data-detail.xml"
|
||||||
var dataPath = "/home/server_data/data.xml"
|
var dataPath = allDataPath + "/collecting_data/data.xml"
|
||||||
var versionPath = "/home/server_data/version.txt"
|
var versionPath = allDataPath+ "/collecting_data/version.txt"
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD>fileId<49><64><EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ŵ<EFBFBD>λ<EFBFBD><CEBB>
|
//<2F><><EFBFBD><EFBFBD>fileId<49><64><EFBFBD><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ŵ<EFBFBD>λ<EFBFBD><CEBB>
|
||||||
function getVersionPath(fileId){
|
function getVersionPath(fileId){
|
||||||
|
|
|
@ -203,8 +203,9 @@ declare module Kubernetes {
|
||||||
function currentUserName(): any;
|
function currentUserName(): any;
|
||||||
function createNamespace(ns: any, client?: any): void;
|
function createNamespace(ns: any, client?: any): void;
|
||||||
function createRC(obj: any, onCompleteFn?: any): void;
|
function createRC(obj: any, onCompleteFn?: any): void;
|
||||||
function connectOracle($http: any, $timeout: any, url: any, connectParam: any, rcName: any, delayTime: any): void;
|
function connectOracle($http: any, $timeout: any, url: any, operation: any, rcName: any, delayTime: any): void;
|
||||||
function getOracleStatus(labels: any): number;
|
function getOracleStatus(labels: any): number;
|
||||||
|
function getExtractStatus(labels: any): number;
|
||||||
function getOracleName(name: string): string;
|
function getOracleName(name: string): string;
|
||||||
function extractDataToOracle($http: any, selectedReplicationControllers: any, targetReplicationController: any): void;
|
function extractDataToOracle($http: any, selectedReplicationControllers: any, targetReplicationController: any): void;
|
||||||
function checkoutOracleRCIsRunning(rc: any): boolean;
|
function checkoutOracleRCIsRunning(rc: any): boolean;
|
||||||
|
|
|
@ -1,7 +1,28 @@
|
||||||
/// <reference path="d.ts/includes.d.ts"/>
|
/// <reference path="d.ts/includes.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/kubernetesInterfaces.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/kubernetesInterfaces.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/kubernetesHelpers.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/kubernetesHelpers.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/developerEnrichers.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/developerHelpers.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/developerNavigation.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/FileMode.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/developerPlugin.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/environmentPanel.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/home.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/jenkinsJob.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/jenkinsJobs.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/kubernetesPlugin.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/kubernetesPlugin.d.ts"/>
|
||||||
|
/// <reference path="d.ts/kubernetes/ts/kubernetesModel.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/jenkinsLog.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/jenkinsMetrics.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/navbar.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/pipeline.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/pipelineDirective.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/pipelines.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/project.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/projectSelector.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/projects.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/workspace.d.ts"/>
|
||||||
|
/// <reference path="d.ts/developer/ts/workspaces.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/apps.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/apps.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/breadcrumbs.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/breadcrumbs.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/build.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/build.d.ts"/>
|
||||||
|
@ -15,7 +36,6 @@
|
||||||
/// <reference path="d.ts/kubernetes/ts/deploymentConfig.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/deploymentConfig.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/deploymentConfigs.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/deploymentConfigs.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/events.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/events.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/kubernetesModel.d.ts"/>
|
|
||||||
/// <reference path="d.ts/kubernetes/ts/host.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/host.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/utilHelpers.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/utilHelpers.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/hosts.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/hosts.d.ts"/>
|
||||||
|
@ -48,24 +68,4 @@
|
||||||
/// <reference path="d.ts/kubernetes/ts/sharedControllers.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/sharedControllers.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/tabs.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/tabs.d.ts"/>
|
||||||
/// <reference path="d.ts/kubernetes/ts/templates.d.ts"/>
|
/// <reference path="d.ts/kubernetes/ts/templates.d.ts"/>
|
||||||
/// <reference path="d.ts/developer/ts/developerEnrichers.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/developerHelpers.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/developerNavigation.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/FileMode.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/developerPlugin.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/environmentPanel.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/home.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/jenkinsJob.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/jenkinsJobs.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/jenkinsLog.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/jenkinsMetrics.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/navbar.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/pipeline.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/pipelineDirective.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/pipelines.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/project.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/projectSelector.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/projects.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/workspace.d.ts"/>
|
|
||||||
/// <reference path="d.ts/developer/ts/workspaces.d.ts"/>
|
|
||||||
/// <reference path="d.ts/navigation/ts/navigationPlugin.d.ts"/>
|
/// <reference path="d.ts/navigation/ts/navigationPlugin.d.ts"/>
|
||||||
|
|
|
@ -203,6 +203,9 @@ legend {
|
||||||
.k8s-badge-target {
|
.k8s-badge-target {
|
||||||
background-color: Red;
|
background-color: Red;
|
||||||
}
|
}
|
||||||
|
.badge-remind {
|
||||||
|
background-color: Red;
|
||||||
|
}
|
||||||
|
|
||||||
.environment-row a {
|
.environment-row a {
|
||||||
color: black;
|
color: black;
|
||||||
|
@ -953,6 +956,9 @@ a:hover.data_file_btn {
|
||||||
.pod-log-lines * .white {
|
.pod-log-lines * .white {
|
||||||
color: #ddd;
|
color: #ddd;
|
||||||
}
|
}
|
||||||
|
.top-bottom-middle {
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
.terminal-window {
|
.terminal-window {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|
File diff suppressed because one or more lines are too long
364
gulpfile.js
364
gulpfile.js
|
@ -18,18 +18,18 @@ var gulp = require('gulp'),
|
||||||
app = hawtio.app,
|
app = hawtio.app,
|
||||||
shellprocess = require('child_process'),
|
shellprocess = require('child_process'),
|
||||||
xmloperation = require('./app/xmloperation'),
|
xmloperation = require('./app/xmloperation'),
|
||||||
rootdir = process.env.STORAGE_PATH || '/home/server_data/',
|
|
||||||
K8s = require('k8s'),
|
K8s = require('k8s'),
|
||||||
crontab = require('node-crontab'),
|
crontab = require('node-crontab'),
|
||||||
|
async = require('async'),
|
||||||
myjs=require('./app/my.js');
|
myjs=require('./app/my.js');
|
||||||
|
|
||||||
var oracledb = require('oracledb');
|
var oracledb = require('oracledb');
|
||||||
|
|
||||||
var plugins = gulpLoadPlugins({});
|
var plugins = gulpLoadPlugins({});
|
||||||
var pkg = require('./package.json');
|
var pkg = require('./package.json');
|
||||||
var time =0;
|
var time =0;
|
||||||
var schedule = [];
|
var schedule = [];
|
||||||
|
var allDataPath = process.env.ALL_DATA || '/home/all_data';
|
||||||
|
var rootdir = allDataPath + "/collecting_data/";
|
||||||
var kubectl = K8s.kubectl({
|
var kubectl = K8s.kubectl({
|
||||||
endpoint: process.env.KUBERNETES_MASTER,
|
endpoint: process.env.KUBERNETES_MASTER,
|
||||||
binary: '/usr/bin/kubectl'
|
binary: '/usr/bin/kubectl'
|
||||||
|
@ -313,7 +313,7 @@ gulp.task('connect', ['watch'], function() {
|
||||||
if(req.method=='POST') {
|
if(req.method=='POST') {
|
||||||
var data = [];
|
var data = [];
|
||||||
var parser = new xml2js.Parser();
|
var parser = new xml2js.Parser();
|
||||||
fs.readFile(rootdir + 'data.xml', function(err, xml) {
|
fs.readFile(rootdir + '/data.xml', function(err, xml) {
|
||||||
parser.parseString(xml, function (err, result) {
|
parser.parseString(xml, function (err, result) {
|
||||||
myjs.Recursion(result.node);
|
myjs.Recursion(result.node);
|
||||||
data.push(result.node);
|
data.push(result.node);
|
||||||
|
@ -324,9 +324,9 @@ gulp.task('connect', ['watch'], function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
hawtio.use("/oracleAppPath",function(req,res){
|
hawtio.use("/oracleAppPath",function(req,res){
|
||||||
var dataPath = "/home/ubuntu/data/";
|
var dataPath = allDataPath + "/tabulate_data/";
|
||||||
var tmpPath = "/home/ubuntu/tmp/app";
|
var tmpPath = allDataPath + "/tmp_data/app";
|
||||||
var appSource="/home/app";
|
var appSource=allDataPath + "/template/app";
|
||||||
if(req.method="POST"){
|
if(req.method="POST"){
|
||||||
var timestamp=new Date();
|
var timestamp=new Date();
|
||||||
if((timestamp.getTime() - time) >= 2*60*1000){
|
if((timestamp.getTime() - time) >= 2*60*1000){
|
||||||
|
@ -337,7 +337,7 @@ gulp.task('connect', ['watch'], function() {
|
||||||
fs.mkdirSync(dataPath);
|
fs.mkdirSync(dataPath);
|
||||||
//path.exists(tmpPath,function(exists){if(exists) console.log("exists");});
|
//path.exists(tmpPath,function(exists){if(exists) console.log("exists");});
|
||||||
fs.renameSync(tmpPath, dataPath+"app");
|
fs.renameSync(tmpPath, dataPath+"app");
|
||||||
console.log("move 'home/ubuntu/tmp/app' to " + dataPath);
|
console.log("move '" + tmpPath + "' to " + dataPath);
|
||||||
xmloperation.savehuizong(timestamp.Format('yyyy-MM-dd hh:mm:ss'), '10', id, "汇总数据库("+ id +")", dataPath, dirName);
|
xmloperation.savehuizong(timestamp.Format('yyyy-MM-dd hh:mm:ss'), '10', id, "汇总数据库("+ id +")", dataPath, dirName);
|
||||||
fs.writeFileSync('./app/version.txt', 2);
|
fs.writeFileSync('./app/version.txt', 2);
|
||||||
res.send(200,{path: dataPath+"app/", name: dirName});
|
res.send(200,{path: dataPath+"app/", name: dirName});
|
||||||
|
@ -352,6 +352,18 @@ gulp.task('connect', ['watch'], function() {
|
||||||
//}
|
//}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
hawtio.use('/oracleExtractLog', function(req,res){
|
||||||
|
var path = allDataPath + "/tabulate_logs/" + req.query.rcName;
|
||||||
|
if(fs.existsSync(path)){
|
||||||
|
var log = fs.readFileSync(path, 'utf-8');
|
||||||
|
res.send(200,{logContent: log.toString()});
|
||||||
|
res.end();
|
||||||
|
}else{
|
||||||
|
res.send(200,{logContent: "当前没有日志可以查看!"});
|
||||||
|
res.end();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
hawtio.use('/uploadfiles',function(req,res){
|
hawtio.use('/uploadfiles',function(req,res){
|
||||||
if(req.method==="POST"){
|
if(req.method==="POST"){
|
||||||
var relativePath = req.body.resumableRelativePath;
|
var relativePath = req.body.resumableRelativePath;
|
||||||
|
@ -549,95 +561,271 @@ gulp.task('connect', ['watch'], function() {
|
||||||
});*/
|
});*/
|
||||||
|
|
||||||
hawtio.use('/connectToOracle',function(req,res){
|
hawtio.use('/connectToOracle',function(req,res){
|
||||||
var rcName = req.query.oracleName;
|
var rcName = req.query.oracleName;
|
||||||
|
|
||||||
cancelOracleConectionTask(rcName);
|
cancelOracleConectionTask(rcName);
|
||||||
|
|
||||||
kubectl.rc.get(rcName,function(err, rc){
|
kubectl.rc.get(rcName,function(err, rc){
|
||||||
//console.log(rc);
|
//console.log(rc);
|
||||||
if(err){
|
if(err){
|
||||||
console.log(err);
|
console.log(err);
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if(rc && rc.status.replicas === 1 && rc.metadata.labels.hasOwnProperty("style") && rc.metadata.labels.style === "oracle"){
|
if(rc && rc.status.replicas === 1 && rc.metadata.labels.hasOwnProperty("style") && rc.metadata.labels.style === "oracle"){
|
||||||
var selector = rc.spec.selector;
|
var selector = rc.spec.selector;
|
||||||
var task = {
|
var task = {
|
||||||
taskName: rcName,
|
taskName: rcName,
|
||||||
taskTime: 0,
|
taskTime: 0,
|
||||||
taskCrontab: crontab.scheduleJob("*/1 * * * *", function(){ //This will call this function every 2 minutes
|
taskCrontab: crontab.scheduleJob("*/1 * * * *", function(){ //This will call this function every 2 minutes
|
||||||
//console.log(rcName + "it's been 1 minutes!");
|
//console.log(rcName + "it's been 1 minutes!");
|
||||||
if(task.taskTime === 9){
|
if(task.taskTime === 9){
|
||||||
kubectl.rc.command("label --overwrite rc " + task.taskName + " status=1", function(err, data){
|
kubectl.rc.command("label --overwrite rc " + task.taskName + " status=1", function(err, data){
|
||||||
if(err)
|
if(err)
|
||||||
console.log(err);
|
console.log(err);
|
||||||
crontab.cancelJob(task.taskCrontab);
|
crontab.cancelJob(task.taskCrontab);
|
||||||
cancelOracleConectionTask(task.rcName);
|
cancelOracleConectionTask(task.rcName);
|
||||||
});
|
return;
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var selectorPods = [];
|
||||||
|
kubectl.pod.list(function(err, pods){
|
||||||
|
if(!err){
|
||||||
|
pods.items.forEach(function(item){
|
||||||
|
if(myjs.selectorMatches(selector, item.metadata.labels))
|
||||||
|
selectorPods.push(item);
|
||||||
|
});
|
||||||
|
if(selectorPods.length === 0)
|
||||||
|
return;
|
||||||
|
var host = selectorPods[0].status.hostIP
|
||||||
|
var port = selectorPods[0].spec.containers[0].ports[0].hostPort;
|
||||||
|
|
||||||
|
if(host && port){
|
||||||
|
oracledb.getConnection(
|
||||||
|
{
|
||||||
|
user : "system",
|
||||||
|
password : "oracle",
|
||||||
|
connectString : host + ":" + port + "/orcl"
|
||||||
|
},function(err, connection){
|
||||||
|
if (err) {
|
||||||
|
console.log("connection failed! message" + err.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
kubectl.rc.command("label --overwrite rc " + task.taskName + " status=2", function(err, data){
|
||||||
|
if(err){
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
console.log("update replicationControllers " + rcName + " success");
|
||||||
|
if(connection !== null){
|
||||||
|
connection.close(function(err){
|
||||||
|
if (err){
|
||||||
|
console.error(err.message);
|
||||||
|
}
|
||||||
|
console.log(rcName + "connect success!");
|
||||||
|
crontab.cancelJob(task.taskCrontab);
|
||||||
|
cancelOracleConectionTask(task.rcName);
|
||||||
|
console.log(rcName + "connection closed!");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
task.taskTime++;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
schedule.push(task);
|
||||||
|
}
|
||||||
|
res.send(200,"Ok");
|
||||||
|
res.end();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
var selectorPods = [];
|
|
||||||
kubectl.pod.list(function(err, pods){
|
|
||||||
if(!err){
|
|
||||||
pods.items.forEach(function(item){
|
|
||||||
if(myjs.selectorMatches(selector, item.metadata.labels))
|
|
||||||
selectorPods.push(item);
|
|
||||||
});
|
|
||||||
if(selectorPods.length === 0)
|
|
||||||
return;
|
|
||||||
var host = selectorPods[0].status.hostIP
|
|
||||||
var port = selectorPods[0].spec.containers[0].ports[0].hostPort;
|
|
||||||
|
|
||||||
if(host && port){
|
|
||||||
oracledb.getConnection(
|
|
||||||
{
|
|
||||||
user : "system",
|
|
||||||
password : "oracle",
|
|
||||||
connectString : host + ":" + port + "/orcl"
|
|
||||||
},function(err, connection){
|
|
||||||
if (err) {
|
|
||||||
console.log("connection failed! message" + err.message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log("connect success!");
|
|
||||||
kubectl.rc.command("label --overwrite rc " + task.taskName + " status=2", function(err, data){
|
|
||||||
if(err){
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
console.log("update replicationControllers " + rcName + " success");
|
|
||||||
if(connection !== null){
|
|
||||||
connection.close(function(err){
|
|
||||||
if (err){
|
|
||||||
console.error(err.message);
|
|
||||||
}
|
|
||||||
crontab.cancelJob(task.taskCrontab);
|
|
||||||
cancelOracleConectionTask(task.rcName);
|
|
||||||
console.log("connection closed!");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
task.taskTime++;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
schedule.push(task);
|
|
||||||
}
|
|
||||||
res.send(200,"Ok");
|
|
||||||
res.end();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
hawtio.use('/cancelOracleConection', function(req,res){
|
hawtio.use('/cancelOracleConection', function(req,res){
|
||||||
var rcName = req.query.oracleName;
|
var rcName = req.query.oracleName;
|
||||||
cancelOracleConectionTask(rcName);
|
var operation = req.query.operation;
|
||||||
res.send(200,"Ok");
|
if(operation !== 'stop')
|
||||||
res.end();
|
cancelOracleConectionTask(rcName);
|
||||||
|
else{
|
||||||
|
kubectl.rc.command("label --overwrite rc " + rcName + " status=0", function(err, data){
|
||||||
|
if(err)
|
||||||
|
console.error(err.message);
|
||||||
|
console.log("update replicationControllers " + rcName + " success");
|
||||||
|
cancelOracleConectionTask(rcName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
res.send(200,"Ok");
|
||||||
|
res.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
hawtio.use('/extractOracleData', function(req,res){
|
hawtio.use('/extractOracleData', function(req,res){
|
||||||
var data = req.query.param;
|
var data = req.query.param;
|
||||||
console.log(data);
|
var poolOracle;
|
||||||
|
var collectOracle = [];
|
||||||
|
data.forEach(function(item){
|
||||||
|
var obj = JSON.parse(item);
|
||||||
|
if(obj.isTarget)
|
||||||
|
poolOracle = obj;
|
||||||
|
else{
|
||||||
|
var names = obj.OracleName.split("-");
|
||||||
|
kubectl.rc.command("label --overwrite rc " + obj.OracleName + " isExtract=1", function(err, data){
|
||||||
|
if(err)
|
||||||
|
console.error(err);
|
||||||
|
console.log("update replicationControllers " + obj.OracleName + " success");
|
||||||
|
});
|
||||||
|
obj["name"] = "J" + names[0] + "_" + names[1];
|
||||||
|
collectOracle.push(obj);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var poolOracleParam = poolOracle.connectHost + ":" +poolOracle.connectPort;
|
||||||
|
var logMessage = "";
|
||||||
|
|
||||||
|
oracledb.getConnection({
|
||||||
|
user : "system",
|
||||||
|
password : "oracle",
|
||||||
|
connectString : poolOracleParam + "/orcl"
|
||||||
|
}, function(err, connection){
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var logPath = allDataPath + "/tabulate_logs/";
|
||||||
|
async.eachSeries(collectOracle, function(item, callback){
|
||||||
|
var strTUser = item.name + "_20152016";
|
||||||
|
var message = "-------------------------------------------采集库:" + item.name + "执行汇总-------------------------------------------";
|
||||||
|
console.log(message);
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, message + "\n\n");
|
||||||
|
async.waterfall([
|
||||||
|
function(cb){
|
||||||
|
var dbLinkSql = "create public database link linkTo" + item.name + " connect to system IDENTIFIED BY oracle using "
|
||||||
|
+"'(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = "
|
||||||
|
+ item.connectHost + ")(PORT = " + item.connectPort + ")))(CONNECT_DATA = (SERVICE_NAME = orcl)))'";
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "SQL> " + dbLinkSql + "\n\n");
|
||||||
|
connection.execute(dbLinkSql, function(err, result){
|
||||||
|
if(err){
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, err + "\n\n");
|
||||||
|
cb(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "数据库链接已创建。" + "\n\n");
|
||||||
|
cb(null);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function(cb){
|
||||||
|
connection.execute("select TABLESPACE_NAME from dba_tablespaces where TABLESPACE_NAME = 'TS_JSSJBS'", function(err, result){
|
||||||
|
if(err){
|
||||||
|
console.log(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(result.rows.length !== 0)
|
||||||
|
cb(null, false);
|
||||||
|
else
|
||||||
|
cb(null, true);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function(arg, cb){
|
||||||
|
if(!arg){
|
||||||
|
cb(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var sql = "create tablespace TS_JSSJBS datafile '/opt/oracle/app/oradata/orcl/ts_jssjbs.dbf' size 512M autoextend on next 512M maxsize unlimited";
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "SQL> " + sql + ";\n\n");
|
||||||
|
connection.execute(sql, function(err, result){
|
||||||
|
if (err){
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, err + "\n\n");
|
||||||
|
cb(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "表空间已创建。" + "\n\n");
|
||||||
|
cb(null);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function(cb){
|
||||||
|
var sql = "Create user " + strTUser + " default tablespace TS_JSSJBS identified by 1";
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "SQL> " + sql + ";\n\n");
|
||||||
|
connection.execute(sql, function(err, result){
|
||||||
|
if (err){
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, err + "\n\n");
|
||||||
|
cb(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "用户已创建。" + "\n\n");
|
||||||
|
//console.log("create us");
|
||||||
|
cb(null);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function(cb){
|
||||||
|
var sql = "grant connect, resource, dba to " + strTUser;
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "SQL> " + sql + ";\n\n");
|
||||||
|
connection.execute(sql, function(err, result){
|
||||||
|
if(err)
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, err + "\n\n");
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "授权成功。" + "\n\n");
|
||||||
|
//console.log("grant dba");
|
||||||
|
cb(null);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function(cb){
|
||||||
|
var sql = "SELECT 'create table " + strTUser + ".J'|| substr(t.OWNER||'_'||t.TABLE_NAME,0,29)||' as select * from '||t.OWNER||'.'||t.TABLE_NAME||"
|
||||||
|
+"'@linkTo" + item.name + ";' FROM dba_tables@linkTo" + item.name + " t WHERE t.TABLESPACE_NAME NOT IN ('SYSTEM','SYSAUX')"
|
||||||
|
+ " and t.owner||t.table_name not in (select owner||table_name from dba_tables@linkTo" + item.name + " where 'data_type'='CLOB')";
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "SQL> " + sql + ";\n\n");
|
||||||
|
connection.execute(sql, function(err, result){
|
||||||
|
if(err){
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, err + "\n\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
preSql = [];
|
||||||
|
result.rows.forEach(function(row){
|
||||||
|
row.forEach(function(it){
|
||||||
|
preSql.push(it.replace(/;$/, ""));
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, it + "\n");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "\n");
|
||||||
|
cb(null, preSql);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function(arg, cb){
|
||||||
|
async.eachSeries(arg, function(sql, cback){
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "SQL> " + sql + ";\n\n");
|
||||||
|
connection.execute(sql, function(err, result){
|
||||||
|
if(err){
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, err + "\n\n");
|
||||||
|
cback(null, !err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fs.appendFileSync(logPath + poolOracle.OracleName, "表已创建。" + "\n\n");
|
||||||
|
cback(null, !err);
|
||||||
|
});
|
||||||
|
}, function(err, result){
|
||||||
|
cb(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
], function(err, result){
|
||||||
|
if(err)
|
||||||
|
console.error(err);
|
||||||
|
kubectl.rc.command("label --overwrite rc " + item.OracleName + " isExtract=2", function(err, data){
|
||||||
|
if(err)
|
||||||
|
console.err(err);
|
||||||
|
console.log("update replicationControllers " + item.OracleName + " success");
|
||||||
|
callback(null);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, function(err, result){
|
||||||
|
if(err)
|
||||||
|
console.error(err);
|
||||||
|
connection.close(function(err){
|
||||||
|
if(err)
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
res.send(200,"Ok");
|
||||||
|
res.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
hawtio.listen(function(server) {
|
hawtio.listen(function(server) {
|
||||||
|
|
Binary file not shown.
|
@ -29,6 +29,7 @@
|
||||||
"yargs": "^3.32.0"
|
"yargs": "^3.32.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"async": "^2.0.0-rc.6",
|
||||||
"connect-multiparty": "^2.0.0",
|
"connect-multiparty": "^2.0.0",
|
||||||
"hawtio-node-backend": "^2.1.0",
|
"hawtio-node-backend": "^2.1.0",
|
||||||
"k8s": "^0.2.7",
|
"k8s": "^0.2.7",
|
||||||
|
|
|
@ -364,7 +364,7 @@ module Developer {
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.downLoadFiles = ()=>{
|
$scope.downLoadFiles = ()=>{
|
||||||
Kubernetes.connectOracle($http, $timeout, "192.168.0.103:64182", "320614-54-1", 500);
|
//Kubernetes.connectOracle($http, $timeout, "192.168.0.103:64182", "320614-54-1", 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.isSelected= (node)=>{
|
$scope.isSelected= (node)=>{
|
||||||
|
@ -394,8 +394,8 @@ module Developer {
|
||||||
var Obj = createRCObj($scope.model.selecteditems[id]);
|
var Obj = createRCObj($scope.model.selecteditems[id]);
|
||||||
if(!checkIsRunning(KubernetesModel.replicationControllers,Obj)){
|
if(!checkIsRunning(KubernetesModel.replicationControllers,Obj)){
|
||||||
Kubernetes.createRC(Obj, (rc) =>{
|
Kubernetes.createRC(Obj, (rc) =>{
|
||||||
console.log(rc.metadata.name);
|
console.log(rc);
|
||||||
Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", rc.metadata.name, 0);
|
Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "create", rc.metadata.name, 0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,22 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script type="text/ng-template" id="dataSummaryTemplate.html">
|
||||||
|
<div class="ngCellText" ng-init="entity=row.entity" >
|
||||||
|
<a ng-show="row.entity.$podCounters.podsLink" title="pods status">
|
||||||
|
<span ng-show="row.entity.$extractStatus === 0" class="badge badge-info" href=""> 未汇总</span>
|
||||||
|
<span ng-show="row.entity.$extractStatus === 1" class="badge badge-success" href=""> 正在汇总</span>
|
||||||
|
<span ng-show="row.entity.$extractStatus === 2" class="badge" href=""> 已完成</span>
|
||||||
|
<span ng-show="row.entity.$extractStatus === 3" class="badge badge-warning" href=""> 失败</span>
|
||||||
|
<div ng-show="row.entity.$extractStatus === 10">
|
||||||
|
<span class="badge badge-remind"> 汇总数据库</span>
|
||||||
|
<span ng-include = "'oracleLogTemplate.html'"></span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
|
||||||
<script type="text/ng-template" id="labelTemplate.html">
|
<script type="text/ng-template" id="labelTemplate.html">
|
||||||
<div class="ngCellText" ng-init="entity=row.entity" ng-controller="Kubernetes.Labels">
|
<div class="ngCellText" ng-init="entity=row.entity" ng-controller="Kubernetes.Labels">
|
||||||
<p ng-show="data"><strong>Labels</strong></p>
|
<p ng-show="data"><strong>Labels</strong></p>
|
||||||
|
@ -135,6 +151,12 @@
|
||||||
</span>
|
</span>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script type="text/ng-template" id="oracleLogTemplate.html">
|
||||||
|
<span ng-controller="Kubernetes.PodLogLinkController">
|
||||||
|
<i class="fa fa-file-text" title="打开{{entity.$oracleName}}的汇总日志" ng-click="openLogs(entity)"></i>
|
||||||
|
</span>
|
||||||
|
</script>
|
||||||
|
|
||||||
<script type="text/ng-template" id="connectParamTemplate.html">
|
<script type="text/ng-template" id="connectParamTemplate.html">
|
||||||
<div class="ngCellText" ng-init="entity=row.entity">
|
<div class="ngCellText" ng-init="entity=row.entity">
|
||||||
<p ng-show="row.entity.$pods.length"><strong>{{row.entity.$pods[0].$host}}:{{row.entity.$pods[0].spec.containers[0].ports[0].hostPort}}/orcl</strong></p>
|
<p ng-show="row.entity.$pods.length"><strong>{{row.entity.$pods[0].$host}}:{{row.entity.$pods[0].spec.containers[0].ports[0].hostPort}}/orcl</strong></p>
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
<span class="fa fa-caret-down"></span>
|
<span class="fa fa-caret-down"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="terminal-title" ng-mousedown="mouseDown($event)" ng-mouseup="mouseUp($event)" ng-mousemove="mouseMove($event)">
|
<div class="terminal-title" ng-mousedown="mouseDown($event)" ng-mouseup="mouseUp($event)" ng-mousemove="mouseMove($event)">
|
||||||
<h5>{{containerName}} logs</h5>
|
<h5 class="top-bottom-middle">{{containerName}}的汇总日志</h5>
|
||||||
<i class="fa fa-remove pull-right clickable" title="Close and exit this log" ng-click="close()"></i>
|
<i class="fa fa-remove pull-right clickable" title="Close and exit this log" ng-click="close()"></i>
|
||||||
<i class="fa fa-square-o pull-right clickable" title="Maximize this log" ng-click="maximize($event)"></i>
|
<i class="fa fa-square-o pull-right clickable" title="Maximize this log" ng-click="maximize($event)"></i>
|
||||||
<i class="fa fa-sort-desc pull-right clickable" ng-hide="maximized()" title="Minimize this log" ng-click="minimize($event)"></i>
|
<i class="fa fa-sort-desc pull-right clickable" ng-hide="maximized()" title="Minimize this log" ng-click="minimize($event)"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="terminal-body" scroll-glue ng-model="atBottom">
|
<!--<div class="terminal-body" scroll-glue ng-model="atBottom" style="overflow-y:hidden"> -->
|
||||||
<pod-log-display></pod-log-display>
|
<textarea style="height:100%; width:100%" disabled="disabled">{{logs}}</textarea>
|
||||||
</div>
|
<!--</div>-->
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -115,7 +115,7 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<span class="help-block" ng-show="filterReplicationControllers.length == 0">
|
<span class="help-block" ng-show="filterReplicationControllers.length == 0">
|
||||||
当前没有汇总数据库可以选择,请先创建,可以点击创建汇总数据库按钮进行创建!
|
当前没有汇总数据库可以选择,请先创建,可以点击创建汇总数据库按钮进行创建或从汇总页面中的服务器数据列表中启动已创建的汇总数据库!
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -29,3 +29,7 @@
|
||||||
color: #ddd;
|
color: #ddd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.top-bottom-middle{
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
|
|
@ -1739,23 +1739,23 @@ module Kubernetes {
|
||||||
var rcTemplate = RCTemplate.createRC(obj);
|
var rcTemplate = RCTemplate.createRC(obj);
|
||||||
//console.log(rcTemplate);
|
//console.log(rcTemplate);
|
||||||
client.put(rcTemplate, function(obj) {
|
client.put(rcTemplate, function(obj) {
|
||||||
console.log("Created: ", obj);
|
//console.log("Created: ", obj);
|
||||||
if (angular.isFunction(onCompleteFn)) {
|
if (angular.isFunction(onCompleteFn)) {
|
||||||
onCompleteFn(obj);
|
onCompleteFn(obj);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function connectOracle($http, $timeout, url, connectParam, rcName, delayTime){
|
export function connectOracle($http, $timeout, url, operation, rcName, delayTime){
|
||||||
$timeout(() => {
|
$timeout(() => {
|
||||||
$http({
|
$http({
|
||||||
url: url,
|
url: url,
|
||||||
method:'POST',
|
method:'POST',
|
||||||
params:{oracleName: rcName, param: connectParam}
|
params:{oracleName: rcName, operation: operation}
|
||||||
}).success(function(data,header,config,status){
|
}).success(function(data,header,config,status){
|
||||||
console.log("success");
|
console.log("success");
|
||||||
}).error(function(data,header,config,status){
|
}).error(function(data,header,config,status){
|
||||||
log.warn("Failed to connect " + connectParam + " " + data + " " + status);
|
//log.warn("Failed to connect " + connectParam + " " + data + " " + status);
|
||||||
});
|
});
|
||||||
}, delayTime);
|
}, delayTime);
|
||||||
}
|
}
|
||||||
|
@ -1780,6 +1780,14 @@ module Kubernetes {
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getExtractStatus(labels){
|
||||||
|
if(labels.isTarget === 'false'){
|
||||||
|
return parseInt(labels.isExtract);
|
||||||
|
}else{
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function getOracleName(name:string):string {
|
export function getOracleName(name:string):string {
|
||||||
var results = name.split("-");
|
var results = name.split("-");
|
||||||
if(results.length === 2){
|
if(results.length === 2){
|
||||||
|
@ -1808,10 +1816,10 @@ module Kubernetes {
|
||||||
if(getName(rc) !== getName(targetReplicationController)){
|
if(getName(rc) !== getName(targetReplicationController)){
|
||||||
answer = answer && checkoutOracleRCIsRunning(rc);
|
answer = answer && checkoutOracleRCIsRunning(rc);
|
||||||
oracleConnectParam.push({
|
oracleConnectParam.push({
|
||||||
OracleName: getName(rc),
|
"OracleName": getName(rc),
|
||||||
connectHost: getHost(rc.$pods[0]),
|
"connectHost": getHost(rc.$pods[0]),
|
||||||
connectPort: rc.$pods[0].spec.containers[0].ports[0].hostPort,
|
"connectPort": rc.$pods[0].spec.containers[0].ports[0].hostPort,
|
||||||
isTarget: false
|
"isTarget": false
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1819,6 +1827,7 @@ module Kubernetes {
|
||||||
if(answer){
|
if(answer){
|
||||||
$http({
|
$http({
|
||||||
url: '/extractOracleData',
|
url: '/extractOracleData',
|
||||||
|
dataType: 'json',
|
||||||
method:'POST',
|
method:'POST',
|
||||||
params:{param: oracleConnectParam}
|
params:{param: oracleConnectParam}
|
||||||
}).success(function(data,header,config,status){
|
}).success(function(data,header,config,status){
|
||||||
|
|
|
@ -357,6 +357,8 @@ module Kubernetes {
|
||||||
replicationController.$oracleName = getOracleName(getName(replicationController));
|
replicationController.$oracleName = getOracleName(getName(replicationController));
|
||||||
//console.log(getName(replicationController));
|
//console.log(getName(replicationController));
|
||||||
replicationController.$oracleStatus = getOracleStatus(getLabels(replicationController));
|
replicationController.$oracleStatus = getOracleStatus(getLabels(replicationController));
|
||||||
|
replicationController.$extractStatus = getExtractStatus(getLabels(replicationController));
|
||||||
|
|
||||||
|
|
||||||
var selectedPods = replicationController.$pods;
|
var selectedPods = replicationController.$pods;
|
||||||
replicationController.connectTo = selectedPods.map((pod) => {
|
replicationController.connectTo = selectedPods.map((pod) => {
|
||||||
|
|
|
@ -183,7 +183,7 @@ module Kubernetes {
|
||||||
})
|
})
|
||||||
.href(() => context)
|
.href(() => context)
|
||||||
.title(() => '服务集群')
|
.title(() => '服务集群')
|
||||||
.tabs(controllers, events)
|
.tabs(controllers, pods, events)
|
||||||
.build();
|
.build();
|
||||||
HawtioNav.add(mainTab);
|
HawtioNav.add(mainTab);
|
||||||
|
|
||||||
|
|
|
@ -45,11 +45,11 @@ module Kubernetes {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
_module.controller("Kubernetes.PodLogLinkController", ($scope, TerminalService, $templateCache) => {
|
_module.controller("Kubernetes.PodLogLinkController", ($scope, $interval, TerminalService, $templateCache) => {
|
||||||
|
|
||||||
$scope.openLogs = (entity) => {
|
$scope.openLogs = (entity) => {
|
||||||
log.debug("Open logs: ", entity);
|
log.debug("Open logs: ", entity);
|
||||||
TerminalService.newTerminal(entity.metadata.selfLink, entity.metadata.name, $templateCache.get(UrlHelpers.join(templatePath, 'logShell.html')));
|
TerminalService.newTerminal($interval, entity.metadata.selfLink, entity.$oracleName, entity,$templateCache.get(UrlHelpers.join(templatePath, 'logShell.html')));
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -61,6 +61,10 @@ module Kubernetes {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{ field: '$extractStatus',
|
||||||
|
displayName: '数据汇总状态',
|
||||||
|
cellTemplate: $templateCache.get("dataSummaryTemplate.html")
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -89,7 +93,7 @@ module Kubernetes {
|
||||||
log.debug("deleted: ", getName(next));
|
log.debug("deleted: ", getName(next));
|
||||||
if(next.metadata.labels.style === "oracle"){
|
if(next.metadata.labels.style === "oracle"){
|
||||||
console.log("delete " + next.metadata.name);
|
console.log("delete " + next.metadata.name);
|
||||||
Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "", getName(next), 0);
|
Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "delete", getName(next), 0);
|
||||||
}
|
}
|
||||||
deleteSelected(selected, selected.shift());
|
deleteSelected(selected, selected.shift());
|
||||||
}, (error) => {
|
}, (error) => {
|
||||||
|
@ -151,7 +155,7 @@ module Kubernetes {
|
||||||
}).error(function(data,header,config,status){
|
}).error(function(data,header,config,status){
|
||||||
console.log("error");
|
console.log("error");
|
||||||
});
|
});
|
||||||
Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", getName(rc), 0);
|
Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "create", getName(rc), 0);
|
||||||
});
|
});
|
||||||
}else if(xhr.status == 403){
|
}else if(xhr.status == 403){
|
||||||
alert("两次创建oracle服务时间间隔需要超过2分钟!");
|
alert("两次创建oracle服务时间间隔需要超过2分钟!");
|
||||||
|
@ -180,7 +184,7 @@ module Kubernetes {
|
||||||
Kubernetes.resizeController($http, KubernetesApiURL, next, 0, () => {
|
Kubernetes.resizeController($http, KubernetesApiURL, next, 0, () => {
|
||||||
if(next.metadata.labels.style === "oracle"){
|
if(next.metadata.labels.style === "oracle"){
|
||||||
console.log("stop " + next.metadata.name);
|
console.log("stop " + next.metadata.name);
|
||||||
Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "", getName(next), 0);
|
Kubernetes.connectOracle($http, $timeout, "/cancelOracleConection", "stop", getName(next), 0);
|
||||||
}
|
}
|
||||||
stopSelected(selected, selected.shift());
|
stopSelected(selected, selected.shift());
|
||||||
});
|
});
|
||||||
|
@ -205,7 +209,7 @@ module Kubernetes {
|
||||||
if(next.$replicas === 0)
|
if(next.$replicas === 0)
|
||||||
Kubernetes.resizeController($http, KubernetesApiURL, next, 1, () => {
|
Kubernetes.resizeController($http, KubernetesApiURL, next, 1, () => {
|
||||||
console.log("restart " + next.metadata.name);
|
console.log("restart " + next.metadata.name);
|
||||||
Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "", getName(next), 0);
|
Kubernetes.connectOracle($http, $timeout, "/connectToOracle", "reStart", getName(next), 0);
|
||||||
startSelected(selected, selected.shift());
|
startSelected(selected, selected.shift());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,9 +97,9 @@ module Kubernetes {
|
||||||
|
|
||||||
//服务状态过滤
|
//服务状态过滤
|
||||||
export var Status = controller('Status', ["$scope", "$http", "$interval", "$location", "KubernetesApiURL", ($scope, $http, $interval, $location, KubernetesApiURL) => {
|
export var Status = controller('Status', ["$scope", "$http", "$interval", "$location", "KubernetesApiURL", ($scope, $http, $interval, $location, KubernetesApiURL) => {
|
||||||
// $scope.$watch('entity', (newValue, oldValue) => {
|
/*$scope.$watch('entity', (newValue, oldValue) => {
|
||||||
// if(newValue)
|
if(newValue)
|
||||||
// console.log(newValue);
|
console.log(newValue);
|
||||||
// },true);
|
},true);*/
|
||||||
}]);
|
}]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ module Kubernetes {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
_module.service('TerminalService', ($rootScope, $document, $compile, $templateCache) => {
|
_module.service('TerminalService', ($rootScope, $document, $compile, $interval, $templateCache) => {
|
||||||
var body = $document.find('body');
|
var body = $document.find('body');
|
||||||
function positionTerminals(terminals) {
|
function positionTerminals(terminals) {
|
||||||
var total = _.keys(terminals).length;
|
var total = _.keys(terminals).length;
|
||||||
|
@ -42,7 +42,8 @@ module Kubernetes {
|
||||||
positionTerminals(self.terminals);
|
positionTerminals(self.terminals);
|
||||||
},
|
},
|
||||||
terminals: {},
|
terminals: {},
|
||||||
newTerminal: (podLink, containerName, template = defaultTemplate) => {
|
httpTask: {},
|
||||||
|
newTerminal: ($interval, podLink, containerName, entity, template = defaultTemplate) => {
|
||||||
var terminalId = UrlHelpers.join(podLink, containerName);
|
var terminalId = UrlHelpers.join(podLink, containerName);
|
||||||
if (terminalId in self.terminals) {
|
if (terminalId in self.terminals) {
|
||||||
log.debug("Already a terminal with id: ", terminalId);
|
log.debug("Already a terminal with id: ", terminalId);
|
||||||
|
@ -50,10 +51,19 @@ module Kubernetes {
|
||||||
return terminalId;
|
return terminalId;
|
||||||
}
|
}
|
||||||
var scope = $rootScope.$new();
|
var scope = $rootScope.$new();
|
||||||
|
getLogs(entity, scope);
|
||||||
scope.podLink = podLink;
|
scope.podLink = podLink;
|
||||||
scope.containerName = containerName;
|
scope.containerName = containerName;
|
||||||
scope.id = terminalId;
|
scope.id = terminalId;
|
||||||
scope.docked = true;
|
scope.docked = true;
|
||||||
|
if(terminalId in self.httpTask){
|
||||||
|
self.raiseTerminal(terminalId);
|
||||||
|
return terminalId;
|
||||||
|
}else{
|
||||||
|
self.httpTask[terminalId] = $interval(() =>{
|
||||||
|
getLogs(entity, scope);
|
||||||
|
},2000);
|
||||||
|
}
|
||||||
var el = $($compile(template)(scope));
|
var el = $($compile(template)(scope));
|
||||||
var term = {
|
var term = {
|
||||||
scope: scope,
|
scope: scope,
|
||||||
|
@ -66,6 +76,11 @@ module Kubernetes {
|
||||||
},
|
},
|
||||||
closeTerminal: (id) => {
|
closeTerminal: (id) => {
|
||||||
var term = self.terminals[id];
|
var term = self.terminals[id];
|
||||||
|
var timer = self.httpTask[id];
|
||||||
|
if(timer){
|
||||||
|
$interval.cancel(timer);
|
||||||
|
delete self.httpTask[id];
|
||||||
|
}
|
||||||
if (term) {
|
if (term) {
|
||||||
term.el.remove();
|
term.el.remove();
|
||||||
delete self.terminals[id];
|
delete self.terminals[id];
|
||||||
|
@ -284,5 +299,25 @@ module Kubernetes {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function getLogs(rc, scope){
|
||||||
|
console.log(scope);
|
||||||
|
var xhr= new XMLHttpRequest();
|
||||||
|
xhr.onreadystatechange = () => {
|
||||||
|
if(xhr.readyState == 4){
|
||||||
|
if (xhr.status == 200){
|
||||||
|
var obj=JSON.parse(xhr.responseText);
|
||||||
|
var text = obj.logContent.replace(/\\n/gmi, '\r\n');
|
||||||
|
scope.logs = text;
|
||||||
|
//return ({text: "aaaaaa"});
|
||||||
|
|
||||||
|
}else{
|
||||||
|
//log = "当前没有可以查看的日志!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhr.open("POST", "/oracleExtractLog?rcName=" + getName(rc),false);
|
||||||
|
xhr.send(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -254,4 +254,7 @@ legend {
|
||||||
.k8s-badge-target {
|
.k8s-badge-target {
|
||||||
background-color: Red;
|
background-color: Red;
|
||||||
}
|
}
|
||||||
|
.badge-remind{
|
||||||
|
background-color: Red;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue