Return-Path: X-Original-To: apmail-ignite-commits-archive@minotaur.apache.org Delivered-To: apmail-ignite-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E1F5A1829B for ; Thu, 30 Jul 2015 09:37:08 +0000 (UTC) Received: (qmail 73774 invoked by uid 500); 30 Jul 2015 09:37:08 -0000 Delivered-To: apmail-ignite-commits-archive@ignite.apache.org Received: (qmail 73741 invoked by uid 500); 30 Jul 2015 09:37:08 -0000 Mailing-List: contact commits-help@ignite.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.incubator.apache.org Delivered-To: mailing list commits@ignite.incubator.apache.org Received: (qmail 73732 invoked by uid 99); 30 Jul 2015 09:37:08 -0000 Received: from Unknown (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 30 Jul 2015 09:37:08 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 5DE0F1A8C4A for ; Thu, 30 Jul 2015 09:37:08 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.771 X-Spam-Level: * X-Spam-Status: No, score=1.771 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id Di4UR16y5isV for ; Thu, 30 Jul 2015 09:36:58 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with SMTP id BB8EA2FAB6 for ; Thu, 30 Jul 2015 09:36:46 +0000 (UTC) Received: (qmail 72917 invoked by uid 99); 30 Jul 2015 09:36:46 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 30 Jul 2015 09:36:46 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 95A3FE6B10; Thu, 30 Jul 2015 09:36:46 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: anovikov@apache.org To: commits@ignite.incubator.apache.org Date: Thu, 30 Jul 2015 09:37:11 -0000 Message-Id: <74db41d8defd4f23a8af9f9d3edd875a@git.apache.org> In-Reply-To: <431d0233e2bf435fa31293bb3d879553@git.apache.org> References: <431d0233e2bf435fa31293bb3d879553@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [27/28] incubator-ignite git commit: Merge branch 'ignite-843' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-1155_1 Merge branch 'ignite-843' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-1155_1 Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/1c6280ee Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/1c6280ee Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/1c6280ee Branch: refs/heads/ignite-1155_1 Commit: 1c6280ee22d01df3cc03fc21d04eae739ff80b3b Parents: 6e9fa45 86fb3d7 Author: Andrey Authored: Thu Jul 30 16:09:13 2015 +0700 Committer: Andrey Committed: Thu Jul 30 16:09:13 2015 +0700 ---------------------------------------------------------------------- .../control-center-web/licenses/apache-2.0.txt | 202 +++ .../control-center-web/src/main/js/.gitignore | 4 + .../control-center-web/src/main/js/DEVNOTES.txt | 21 + modules/control-center-web/src/main/js/app.js | 158 +++ modules/control-center-web/src/main/js/bin/www | 110 ++ .../src/main/js/config/default.json | 17 + .../src/main/js/controllers/admin-controller.js | 68 + .../js/controllers/cache-viewer-controller.js | 77 ++ .../main/js/controllers/caches-controller.js | 351 +++++ .../main/js/controllers/clusters-controller.js | 310 +++++ .../src/main/js/controllers/common-module.js | 484 +++++++ .../main/js/controllers/metadata-controller.js | 711 ++++++++++ .../src/main/js/controllers/models/caches.json | 943 +++++++++++++ .../main/js/controllers/models/clusters.json | 909 +++++++++++++ .../main/js/controllers/models/metadata.json | 252 ++++ .../src/main/js/controllers/models/sql.json | 5 + .../src/main/js/controllers/models/summary.json | 163 +++ .../main/js/controllers/profile-controller.js | 51 + .../src/main/js/controllers/sql-controller.js | 84 ++ .../main/js/controllers/summary-controller.js | 170 +++ modules/control-center-web/src/main/js/db.js | 370 +++++ .../src/main/js/helpers/configuration-loader.js | 22 + .../src/main/js/helpers/data-structures.js | 84 ++ .../control-center-web/src/main/js/package.json | 52 + .../src/main/js/public/favicon.ico | Bin 0 -> 1150 bytes .../src/main/js/public/images/docker.png | Bin 0 -> 994 bytes .../src/main/js/public/images/java.png | Bin 0 -> 170 bytes .../src/main/js/public/images/logo.png | Bin 0 -> 8148 bytes .../src/main/js/public/images/xml.png | Bin 0 -> 232 bytes .../src/main/js/public/stylesheets/style.scss | 1270 ++++++++++++++++++ .../src/main/js/routes/admin.js | 79 ++ .../src/main/js/routes/caches.js | 105 ++ .../src/main/js/routes/clusters.js | 104 ++ .../src/main/js/routes/generator/common.js | 315 +++++ .../src/main/js/routes/generator/docker.js | 58 + .../src/main/js/routes/generator/java.js | 859 ++++++++++++ .../src/main/js/routes/generator/xml.js | 738 ++++++++++ .../src/main/js/routes/metadata.js | 95 ++ .../src/main/js/routes/profile.js | 97 ++ .../src/main/js/routes/public.js | 123 ++ .../src/main/js/routes/sql.js | 24 + .../src/main/js/routes/summary.js | 108 ++ .../src/main/js/views/configuration/caches.jade | 74 + .../main/js/views/configuration/clusters.jade | 77 ++ .../main/js/views/configuration/metadata.jade | 121 ++ .../main/js/views/configuration/sidebar.jade | 39 + .../main/js/views/configuration/summary.jade | 113 ++ .../src/main/js/views/error.jade | 22 + .../src/main/js/views/includes/controls.jade | 359 +++++ .../src/main/js/views/includes/footer.jade | 22 + .../src/main/js/views/includes/header.jade | 39 + .../src/main/js/views/index.jade | 30 + .../src/main/js/views/login.jade | 55 + .../src/main/js/views/settings/admin.jade | 58 + .../src/main/js/views/settings/profile.jade | 58 + .../src/main/js/views/sql/sql.jade | 85 ++ .../src/main/js/views/templates/confirm.jade | 27 + .../src/main/js/views/templates/copy.jade | 31 + .../src/main/js/views/templates/layout.jade | 61 + .../src/main/js/views/templates/select.jade | 26 + .../src/main/js/views/templates/tab.jade | 26 + .../web-control-center/licenses/apache-2.0.txt | 202 --- .../web-control-center/src/main/js/.gitignore | 4 - .../web-control-center/src/main/js/DEVNOTES.txt | 21 - modules/web-control-center/src/main/js/app.js | 158 --- modules/web-control-center/src/main/js/bin/www | 110 -- .../src/main/js/config/default.json | 17 - .../src/main/js/controllers/admin-controller.js | 68 - .../js/controllers/cache-viewer-controller.js | 77 -- .../main/js/controllers/caches-controller.js | 347 ----- .../main/js/controllers/clusters-controller.js | 307 ----- .../src/main/js/controllers/common-module.js | 422 ------ .../main/js/controllers/metadata-controller.js | 707 ---------- .../src/main/js/controllers/models/caches.json | 938 ------------- .../main/js/controllers/models/clusters.json | 913 ------------- .../main/js/controllers/models/metadata.json | 246 ---- .../src/main/js/controllers/models/sql.json | 5 - .../src/main/js/controllers/models/summary.json | 163 --- .../main/js/controllers/profile-controller.js | 51 - .../src/main/js/controllers/sql-controller.js | 84 -- .../main/js/controllers/summary-controller.js | 170 --- modules/web-control-center/src/main/js/db.js | 360 ----- .../src/main/js/helpers/configuration-loader.js | 22 - .../src/main/js/helpers/data-structures.js | 84 -- .../web-control-center/src/main/js/package.json | 51 - .../src/main/js/public/favicon.ico | Bin 1150 -> 0 bytes .../src/main/js/public/images/docker.png | Bin 994 -> 0 bytes .../src/main/js/public/images/java.png | Bin 170 -> 0 bytes .../src/main/js/public/images/logo.png | Bin 8148 -> 0 bytes .../src/main/js/public/images/xml.png | Bin 232 -> 0 bytes .../src/main/js/public/stylesheets/style.scss | 1270 ------------------ .../src/main/js/routes/admin.js | 79 -- .../src/main/js/routes/caches.js | 105 -- .../src/main/js/routes/clusters.js | 104 -- .../src/main/js/routes/generator/common.js | 299 ----- .../src/main/js/routes/generator/docker.js | 58 - .../src/main/js/routes/generator/java.js | 626 --------- .../src/main/js/routes/generator/xml.js | 607 --------- .../src/main/js/routes/metadata.js | 95 -- .../src/main/js/routes/profile.js | 97 -- .../src/main/js/routes/public.js | 123 -- .../src/main/js/routes/sql.js | 24 - .../src/main/js/routes/summary.js | 108 -- .../src/main/js/views/configuration/caches.jade | 74 - .../main/js/views/configuration/clusters.jade | 77 -- .../main/js/views/configuration/metadata.jade | 121 -- .../main/js/views/configuration/sidebar.jade | 39 - .../main/js/views/configuration/summary.jade | 114 -- .../src/main/js/views/error.jade | 22 - .../src/main/js/views/includes/controls.jade | 336 ----- .../src/main/js/views/includes/footer.jade | 22 - .../src/main/js/views/includes/header.jade | 39 - .../src/main/js/views/index.jade | 30 - .../src/main/js/views/login.jade | 55 - .../src/main/js/views/settings/admin.jade | 58 - .../src/main/js/views/settings/profile.jade | 58 - .../src/main/js/views/sql/sql.jade | 85 -- .../src/main/js/views/templates/confirm.jade | 27 - .../src/main/js/views/templates/copy.jade | 31 - .../src/main/js/views/templates/layout.jade | 61 - .../src/main/js/views/templates/select.jade | 26 - .../src/main/js/views/templates/tab.jade | 26 - 122 files changed, 10916 insertions(+), 10423 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1c6280ee/modules/control-center-web/src/main/js/app.js ---------------------------------------------------------------------- diff --cc modules/control-center-web/src/main/js/app.js index 0000000,a67afc8..930c798 mode 000000,100644..100644 --- a/modules/control-center-web/src/main/js/app.js +++ b/modules/control-center-web/src/main/js/app.js @@@ -1,0 -1,156 +1,158 @@@ + /* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + var flash = require('connect-flash'); + var express = require('express'); + var path = require('path'); + var favicon = require('serve-favicon'); + var logger = require('morgan'); + var cookieParser = require('cookie-parser'); + var bodyParser = require('body-parser'); + var session = require('express-session'); + var mongoStore = require('connect-mongo')(session); + + var publicRoutes = require('./routes/public'); + var clustersRouter = require('./routes/clusters'); + var cachesRouter = require('./routes/caches'); + var metadataRouter = require('./routes/metadata'); + var summary = require('./routes/summary'); + var adminRouter = require('./routes/admin'); + var profileRouter = require('./routes/profile'); + var sqlRouter = require('./routes/sql'); ++var agentRouter = require('./routes/agent'); + + var passport = require('passport'); + + var db = require('./db'); + + var app = express(); + + // Views engine setup. + app.set('views', path.join(__dirname, 'views')); + app.set('view engine', 'jade'); + + // Site favicon. + app.use(favicon(__dirname + '/public/favicon.ico')); + + app.use(logger('dev')); + + app.use(bodyParser.json()); + app.use(bodyParser.urlencoded({extended: false})); + + app.use(require('node-sass-middleware')({ + /* Options */ + src: path.join(__dirname, 'public'), + dest: path.join(__dirname, 'public'), + debug: true, + outputStyle: 'nested' + })); + + app.use(express.static(path.join(__dirname, 'public'))); + app.use(express.static(path.join(__dirname, 'controllers'))); + app.use(express.static(path.join(__dirname, 'helpers'))); + + app.use(cookieParser('keyboard cat')); + + app.use(session({ + secret: 'keyboard cat', + resave: false, + saveUninitialized: true, + store: new mongoStore({ + mongooseConnection: db.mongoose.connection + }) + })); + + app.use(flash()); + + app.use(passport.initialize()); + app.use(passport.session()); + + passport.serializeUser(db.Account.serializeUser()); + passport.deserializeUser(db.Account.deserializeUser()); + + passport.use(db.Account.createStrategy()); + + var mustAuthenticated = function (req, res, next) { + req.isAuthenticated() ? next() : res.redirect('/'); + }; + + var adminOnly = function(req, res, next) { + req.isAuthenticated() && req.user.admin ? next() : res.sendStatus(403); + }; + + app.all('/configuration/*', mustAuthenticated); + + app.all('*', function(req, res, next) { + var becomeUsed = req.session.viewedUser && req.user.admin; + + res.locals.user = becomeUsed ? req.session.viewedUser : req.user; + res.locals.becomeUsed = becomeUsed; + + req.currentUserId = function() { + if (!req.user) + return null; + + if (req.session.viewedUser && req.user.admin) + return req.session.viewedUser._id; + + return req.user._id; + }; + + next(); + }); + + app.use('/', publicRoutes); + app.use('/admin', mustAuthenticated, adminOnly, adminRouter); + app.use('/profile', mustAuthenticated, profileRouter); + + app.use('/configuration/clusters', clustersRouter); + app.use('/configuration/caches', cachesRouter); + app.use('/configuration/metadata', metadataRouter); + app.use('/configuration/summary', summary); + app.use('/sql', sqlRouter); ++app.use('/agent', agentRouter); + + // Catch 404 and forward to error handler. + app.use(function (req, res, next) { + var err = new Error('Not Found: ' + req.originalUrl); + err.status = 404; + next(err); + }); + + // Error handlers. + + // Development error handler: will print stacktrace. + if (app.get('env') === 'development') { + app.use(function (err, req, res) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err + }); + }); + } + + // Production error handler: no stacktraces leaked to user. + app.use(function (err, req, res) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {} + }); + }); + + module.exports = app; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1c6280ee/modules/control-center-web/src/main/js/bin/www ---------------------------------------------------------------------- diff --cc modules/control-center-web/src/main/js/bin/www index 0000000,4cf0583..cbc637a mode 000000,100644..100644 --- a/modules/control-center-web/src/main/js/bin/www +++ b/modules/control-center-web/src/main/js/bin/www @@@ -1,0 -1,85 +1,110 @@@ + #!/usr/bin/env node + + /** + * Module dependencies. + */ -var app = require('../app'); ++var http = require('http'); ++var https = require('https'); + var config = require('../helpers/configuration-loader.js'); ++var app = require('../app'); ++var agentManager = require('../agents/agent-manager'); ++ ++var fs = require('fs'); ++ + var debug = require('debug')('ignite-web-control-center:server'); -var http = require('http'); + + /** + * Get port from environment and store in Express. + */ + var port = normalizePort(process.env.PORT || config.get('express:port')); + app.set('port', port); + + /** + * Create HTTP server. + */ + var server = http.createServer(app); + + /** + * Listen on provided port, on all network interfaces. + */ + server.listen(port); + server.on('error', onError); + server.on('listening', onListening); + + /** ++ * Start agent server. ++ */ ++var agentServer; ++ ++if (config.get('monitor:server:ssl')) { ++ agentServer = https.createServer({ ++ key: fs.readFileSync(config.get('monitor:server:key')), ++ cert: fs.readFileSync(config.get('monitor:server:cert')), ++ passphrase: config.get('monitor:server:keyPassphrase') ++ }); ++} ++else { ++ agentServer = http.createServer(); ++} ++ ++agentServer.listen(config.get('monitor:server:port')); ++ ++agentManager.createManager(agentServer); ++ ++/** + * Normalize a port into a number, string, or false. + */ + function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; + } + + /** + * Event listener for HTTP server "error" event. + */ + function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } + } + + /** + * Event listener for HTTP server "listening" event. + */ + function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + + debug('Listening on ' + bind); + } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1c6280ee/modules/control-center-web/src/main/js/config/default.json ---------------------------------------------------------------------- diff --cc modules/control-center-web/src/main/js/config/default.json index 0000000,72dbd4e..f7f7a02 mode 000000,100644..100644 --- a/modules/control-center-web/src/main/js/config/default.json +++ b/modules/control-center-web/src/main/js/config/default.json @@@ -1,0 -1,8 +1,17 @@@ + { + "express": { + "port": 3000 + }, + "mongoDB": { + "url": "mongodb://localhost/web-control-center" ++ }, ++ "monitor": { ++ "server": { ++ "port": 3001, ++ "ssl": true, ++ "key": "keys/test.key", ++ "cert": "keys/test.crt", ++ "keyPassphrase": "password" ++ } + } -} ++} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1c6280ee/modules/control-center-web/src/main/js/package.json ---------------------------------------------------------------------- diff --cc modules/control-center-web/src/main/js/package.json index 0000000,fd82196..57be345 mode 000000,100644..100644 --- a/modules/control-center-web/src/main/js/package.json +++ b/modules/control-center-web/src/main/js/package.json @@@ -1,0 -1,49 +1,52 @@@ + { + "name": "ignite-web-control-center", + "version": "1.0.0", + "description": "Web application for configuration, monitoring Ignite Cluster", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "author": "", + "contributors": [ + { + "name": "", + "email": "" + } + ], + "license": "Apache-2.0", + "keywords": "grid", + "homepage": "https://ignite.incubator.apache.org/", + "engines": { + "node": ">=0.12.4" + }, + "dependencies": { + "angular-ui-ace": "^0.2.3", + "archiver": "^0.14.4", + "body-parser": "~1.12.0", + "connect-flash": "^0.1.1", + "connect-mongo": "^0.8.1", + "cookie-parser": "~1.3.4", + "debug": "~2.1.1", + "express": "~4.12.2", + "express-session": "^1.11.1", + "jade": "~1.9.2", + "lodash": "3.10.0", + "mongoose": "^4.0.2", + "mongoose-deep-populate": "1.1.0", + "nconf": "^0.7.1", + "node-sass-middleware": "^0.9.0", + "passport": "^0.2.1", + "passport-local": "^1.0.0", + "passport-local-mongoose": "^1.0.0", - "serve-favicon": "~2.2.0" ++ "pg": "^4.4.0", ++ "serve-favicon": "~2.2.0", ++ "util": "^0.10.3", ++ "ws": "~0.7.2" + }, + "devDependencies": { + "morgan": "~1.5.1", + "supertest": "^1.0.1", + "mocha": "~2.0.1", + "should": "~3.1.3" + } + }