From 3270236507deede9e8f57ade4bbf504b9a2eec7c Mon Sep 17 00:00:00 2001 From: Vincent Fournier Date: Wed, 29 Apr 2015 12:30:08 -0400 Subject: [PATCH 1/3] Refactoring of Grunt task --- app/index.html | 58 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/app/index.html b/app/index.html index 3b72499..199bc40 100644 --- a/app/index.html +++ b/app/index.html @@ -9,17 +9,9 @@ Bansho + - - - - - - - - - @@ -39,10 +31,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e8b0609a43f13910677187350658c3e1b2dca73f Mon Sep 17 00:00:00 2001 From: Vincent Fournier Date: Wed, 29 Apr 2015 16:34:48 -0400 Subject: [PATCH 2/3] New Grunt task --- .gitignore | 7 +- Dockerfile | 4 +- Gruntfile.js | 350 +++++++-------------- Makefile | 11 +- app/components/host/host_cpu/host_cpu.js | 2 +- app/components/live/adagios.js | 2 +- app/components/live/live.js | 374 ++++++++++++++++++++++- app/components/live/surveil.js | 2 +- app/index.html | 104 +++---- container/000-default.conf | 4 +- package.json | 7 +- 11 files changed, 555 insertions(+), 312 deletions(-) diff --git a/.gitignore b/.gitignore index 54ae1d9..cde243d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,9 @@ tmp app/assets/css .sass-cache/ out/ -build/ + +# Grunt generated files +dist/ +.tmp/ + + diff --git a/Dockerfile b/Dockerfile index 30502a5..fcd2d12 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,11 +32,11 @@ ADD /app /opt/adagios-frontend/app # Override those variables at runtime to point Bansho to another backend ENV BANSHO_BACKEND surveil +ENV BANSHO_PROD true ENV BANSHO_SURVEIL_URL http://surveil:8080/ ENV BANSHO_ADAGIOS_URL http://demo.kaji-project.org/ CMD ./configure.sh && \ cd /opt/adagios-frontend && \ - grunt sass && \ - grunt uglify:${BANSHO_BACKEND} && \ + bash -c "if [ $BANSHO_PROD = true ] ; then grunt production:$BANSHO_BACKEND ; fi" && \ bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND" diff --git a/Gruntfile.js b/Gruntfile.js index 4a1e186..a8fca14 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -2,15 +2,66 @@ module.exports = function (grunt) { + require('load-grunt-tasks')(grunt); + grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), project: { - app: ['app'], - assets: ['<%= project.app %>/assets'], - css: ['<%= project.assets %>/sass/app.scss'], - build: ['<%= project.app %>/build/'] + app: 'app', + assets: '<%= project.app %>/assets', + scss: '<%= project.assets %>/sass/app.scss', + tmp: '.tmp', + dist: 'dist' + }, + + clean: { + dist: ['<%= project.dist %>/'], + tmp: ['<%= project.tmp %>/'] + }, + + copy: { + prod: { + files: [ + { + cwd: '<%= project.assets %>/css/', + expand: true, + src: ['**.*'], + dest: '<%= project.dist %>/assets/css/' + }, + { + cwd: '<%= project.app %>/', + expand: true, + src: ['**/*.html'], + dest: '<%= project.dist %>/' + }, + { + src: '<%= project.app %>/components/config/config.json', + dest: '<%= project.dist %>/components/config/config.json' + }, + { + src: '<%= project.app %>/index.html', + dest: '<%= project.dist %>/index.html' + } + ] + }, + adagios: { + files: [ + { + dest: '<%= project.app %>/components/live/live.js', + src: '<%= project.app %>/components/live/adagios.js' + } + ] + }, + surveil: { + files: [ + { + dest: '<%= project.app %>/components/live/live.js', + src: '<%= project.app %>/components/live/surveil.js' + } + ] + } }, sass: { @@ -20,31 +71,11 @@ module.exports = function (grunt) { compass: false }, files: { - '<%= project.assets %>/css/app.css' : '<%= project.css %>' + '<%= project.assets %>/css/app.css': '<%= project.scss %>' } } }, - watch: { - sass: { - files: [ - '<%= project.assets %>/sass/{,*/}*.{scss,sass}', - '<%= project.app %>/{,*/}*/{,*/}*.{scss,sass}' - ], - tasks: ['sass:dev'] - }, - uglify: { - files: [ - '<%= project.app %>/**/*.js', - '<%= project.app %>/**/*_test.js', - '!<%= project.app %>/bower_components/**', - '!<%= project.build %>/**', - '!<%= project.assets %>/**' - ], - tasks: ['uglify:surveil'] - } - }, - jslint: { // configure the task client: { @@ -82,237 +113,70 @@ module.exports = function (grunt) { } }, + useminPrepare: { + html: { + src: ['<%= project.app %>/index.html'] + }, + options: { + dest: '<%= project.dist %>/' + } + }, + + usemin: { + html: '<%= project.dist %>/index.html' + }, + + concat: { + generated: { + nonull: true + } + }, + // Minify and concatenate bansho in one file uglify: { - compress: { - files: [{ - '<%= project.build %>/js/bansho.min.js' : [ - '<%= project.app %>/app.js', - '<%= project.app %>/app.js', - '<%= project.app %>/components/config/config.js', - '<%= project.app %>/components/utils/promise_manager.js', - '<%= project.app %>/components/live/live.js', - '<%= project.app %>/components/live/surveil.js', - '<%= project.app %>/components/ng-justgage/ng-justgage.js', - '<%= project.app %>/components/filters/filters.js', - '<%= project.app %>/components/sidebar/sidebar.js', - '<%= project.app %>/components/topbar/topbar.js', - '<%= project.app %>/components/tactical/tactical.js', - '<%= project.app %>/components/tactical/status_overview/status_overview.js', - '<%= project.app %>/components/tactical/current_health/current_health.js', - '<%= project.app %>/components/tactical/top_alert_producers/top_alert_producers.js', - '<%= project.app %>/components/table/actionbar/actionbar.js', - '<%= project.app %>/components/table/table.js', - '<%= project.app %>/components/table/cell_duration/cell_duration.js', - '<%= project.app %>/components/table/cell_host/cell_host.js', - '<%= project.app %>/components/table/cell_last_check/cell_last_check.js', - '<%= project.app %>/components/table/cell_service_check/cell_service_check.js', - '<%= project.app %>/components/table/cell_host_address/cell_host_address.js', - '<%= project.app %>/components/table/cell_host_status/cell_host_status.js', - '<%= project.app %>/components/host/host.js', - '<%= project.app %>/components/host/host_cpu/host_cpu.js', - '<%= project.app %>/components/host/host_info/host_info.js', - '<%= project.app %>/components/host/host_load/host_load.js', - '<%= project.app %>/components/host/host_main/host_main.js', - '<%= project.app %>/components/host/host_services_list/host_services_list.js', - '<%= project.app %>/components/service/service.js', - '<%= project.app %>/components/service/service_main/service_main.js', - '<%= project.app %>/components/service/service_info/service_info.js', - '<%= project.app %>/components/service/service_metrics/service_metrics.js', - '<%= project.app %>/routing_view/routing_view.js', - '<%= project.app %>/templates/dashboard/dashboard.js', - '<%= project.app %>/templates/single_table/single_table.js', - '<%= project.app %>/templates/host/host.js', - '<%= project.app %>/templates/service/service.js' - ] - }], - options: { - mangle: true - } + generated: { + nonull: true }, + options: { + mangle: true + } + }, + + watch: { adagios: { files: [ - { - '<%= project.build %>/app.js': '<%= project.app %>/app.js', - '<%= project.build %>/components/config/config.js': '<%= project.app %>/components/config/config.js', - '<%= project.build %>/components/utils/promise_manager.js': '<%= project.app %>/components/utils/promise_manager.js', - '<%= project.build %>/components/live/live.js': '<%= project.app %>/components/live/live.js', - '<%= project.build %>/components/live/adagios.js': '<%= project.app %>/components/live/adagios.js', - '<%= project.build %>/components/ng-justgage/ng-justgage.js': '<%= project.app %>/components/ng-justgage/ng-justgage.js', - '<%= project.build %>/components/filters/filters.js': '<%= project.app %>/components/filters/filters.js', - '<%= project.build %>/components/sidebar/sidebar.js': '<%= project.app %>/components/sidebar/sidebar.js', - '<%= project.build %>/components/topbar/topbar.js': '<%= project.app %>/components/topbar/topbar.js', - '<%= project.build %>/components/tactical/tactical.js': '<%= project.app %>/components/tactical/tactical.js', - '<%= project.build %>/components/tactical/status_overview/status_overview.js': '<%= project.app %>/components/tactical/status_overview/status_overview.js', - '<%= project.build %>/components/tactical/current_health/current_health.js': '<%= project.app %>/components/tactical/current_health/current_health.js', - '<%= project.build %>/components/tactical/top_alert_producers/top_alert_producers.js': '<%= project.app %>/components/tactical/top_alert_producers/top_alert_producers.js', - '<%= project.build %>/components/table/actionbar/actionbar.js': '<%= project.app %>/components/table/actionbar/actionbar.js', - '<%= project.build %>/components/table/table.js': '<%= project.app %>/components/table/table.js', - '<%= project.build %>/components/table/cell_duration/cell_duration.js': '<%= project.app %>/components/table/cell_duration/cell_duration.js', - '<%= project.build %>/components/table/cell_host/cell_host.js': '<%= project.app %>/components/table/cell_host/cell_host.js', - '<%= project.build %>/components/table/cell_last_check/cell_last_check.js': '<%= project.app %>/components/table/cell_last_check/cell_last_check.js', - '<%= project.build %>/components/table/cell_service_check/cell_service_check.js': '<%= project.app %>/components/table/cell_service_check/cell_service_check.js', - '<%= project.build %>/components/table/cell_host_address/cell_host_address.js': '<%= project.app %>/components/table/cell_host_address/cell_host_address.js', - '<%= project.build %>/components/table/cell_host_status/cell_host_status.js': '<%= project.app %>/components/table/cell_host_status/cell_host_status.js', - - '<%= project.build %>/components/host/host.js': '<%= project.app %>/components/host/host.js', - '<%= project.build %>/components/host/host_cpu/host_cpu.js': '<%= project.app %>/components/host/host_cpu/host_cpu.js', - '<%= project.build %>/components/host/host_info/host_info.js': '<%= project.app %>/components/host/host_info/host_info.js', - '<%= project.build %>/components/host/host_load/host_load.js': '<%= project.app %>/components/host/host_load/host_load.js', - '<%= project.build %>/components/host/host_main/host_main.js': '<%= project.app %>/components/host/host_main/host_main.js', - '<%= project.build %>/components/host/host_services_list/host_services_list.js': '<%= project.app %>/components/host/host_services_list/host_services_list.js', - '<%= project.build %>/components/service/service.js': '<%= project.app %>/components/service/service.js', - '<%= project.build %>/components/service/service_main/service_main.js': '<%= project.app %>/components/service/service_main/service_main.js', - '<%= project.build %>/components/service/service_info/service_info.js': '<%= project.app %>/components/service/service_info/service_info.js', - '<%= project.build %>/components/service/service_metrics/service_metrics.js': '<%= project.app %>/components/service/service_metrics/service_metrics.js', - - '<%= project.build %>/routing_view/routing_view.js': '<%= project.app %>/routing_view/routing_view.js', - '<%= project.build %>/templates/dashboard/dashboard.js': '<%= project.app %>/templates/dashboard/dashboard.js', - '<%= project.build %>/templates/single_table/single_table.js' : '<%= project.app %>/templates/single_table/single_table.js', - '<%= project.build %>/templates/host/host.js': '<%= project.app %>/templates/host/host.js', - '<%= project.build %>/templates/service/service.js': '<%= project.app %>/templates/service/service.js' - }, - { - '<%= project.build %>/js/bansho.min.js' : [ - '<%= project.build %>/app.js', - '<%= project.build %>/components/config/config.js', - '<%= project.build %>/components/utils/promise_manager.js', - '<%= project.build %>/components/live/live.js', - '<%= project.build %>/components/live/adagios.js', - '<%= project.build %>/components/ng-justgage/ng-justgage.js', - '<%= project.build %>/components/filters/filters.js', - '<%= project.build %>/components/sidebar/sidebar.js', - '<%= project.build %>/components/topbar/topbar.js', - '<%= project.build %>/components/tactical/tactical.js', - '<%= project.build %>/components/tactical/status_overview/status_overview.js', - '<%= project.build %>/components/tactical/current_health/current_health.js', - '<%= project.build %>/components/tactical/top_alert_producers/top_alert_producers.js', - '<%= project.build %>/components/table/actionbar/actionbar.js', - '<%= project.build %>/components/table/table.js', - '<%= project.build %>/components/table/cell_duration/cell_duration.js', - '<%= project.build %>/components/table/cell_host/cell_host.js', - '<%= project.build %>/components/table/cell_last_check/cell_last_check.js', - '<%= project.build %>/components/table/cell_service_check/cell_service_check.js', - '<%= project.build %>/components/table/cell_host_address/cell_host_address.js', - '<%= project.build %>/components/table/cell_host_status/cell_host_status.js', - '<%= project.build %>/components/host/host.js', - '<%= project.build %>/components/host/host_cpu/host_cpu.js', - '<%= project.build %>/components/host/host_info/host_info.js', - '<%= project.build %>/components/host/host_load/host_load.js', - '<%= project.build %>/components/host/host_main/host_main.js', - '<%= project.build %>/components/host/host_services_list/host_services_list.js', - '<%= project.build %>/components/service/service.js', - '<%= project.build %>/components/service/service_main/service_main.js', - '<%= project.build %>/components/service/service_info/service_info.js', - '<%= project.build %>/components/service/service_metrics/service_metrics.js', - '<%= project.build %>/routing_view/routing_view.js', - '<%= project.build %>/templates/dashboard/dashboard.js', - '<%= project.build %>/templates/single_table/single_table.js', - '<%= project.build %>/templates/host/host.js', - '<%= project.build %>/templates/service/service.js' - ] - } + '<%= project.app %>/components/live/adagios.js', + '<%= project.assets %>/sass/{,*/}*.{scss,sass}' ], - options: { - mangle: false, - beautify: true - } + tasks: ['copy:adagios', 'sass:dev'] }, surveil: { files: [ - { - '<%= project.build %>/app.js': '<%= project.app %>/app.js', - '<%= project.build %>/components/config/config.js': '<%= project.app %>/components/config/config.js', - '<%= project.build %>/components/utils/promise_manager.js': '<%= project.app %>/components/utils/promise_manager.js', - '<%= project.build %>/components/live/live.js': '<%= project.app %>/components/live/live.js', - '<%= project.build %>/components/live/surveil.js': '<%= project.app %>/components/live/surveil.js', - '<%= project.build %>/components/ng-justgage/ng-justgage.js': '<%= project.app %>/components/ng-justgage/ng-justgage.js', - '<%= project.build %>/components/filters/filters.js': '<%= project.app %>/components/filters/filters.js', - '<%= project.build %>/components/sidebar/sidebar.js': '<%= project.app %>/components/sidebar/sidebar.js', - '<%= project.build %>/components/topbar/topbar.js': '<%= project.app %>/components/topbar/topbar.js', - '<%= project.build %>/components/tactical/tactical.js': '<%= project.app %>/components/tactical/tactical.js', - '<%= project.build %>/components/tactical/status_overview/status_overview.js': '<%= project.app %>/components/tactical/status_overview/status_overview.js', - '<%= project.build %>/components/tactical/current_health/current_health.js': '<%= project.app %>/components/tactical/current_health/current_health.js', - '<%= project.build %>/components/tactical/top_alert_producers/top_alert_producers.js': '<%= project.app %>/components/tactical/top_alert_producers/top_alert_producers.js', - '<%= project.build %>/components/table/actionbar/actionbar.js': '<%= project.app %>/components/table/actionbar/actionbar.js', - '<%= project.build %>/components/table/table.js': '<%= project.app %>/components/table/table.js', - '<%= project.build %>/components/table/cell_duration/cell_duration.js': '<%= project.app %>/components/table/cell_duration/cell_duration.js', - '<%= project.build %>/components/table/cell_host/cell_host.js': '<%= project.app %>/components/table/cell_host/cell_host.js', - '<%= project.build %>/components/table/cell_last_check/cell_last_check.js': '<%= project.app %>/components/table/cell_last_check/cell_last_check.js', - '<%= project.build %>/components/table/cell_service_check/cell_service_check.js': '<%= project.app %>/components/table/cell_service_check/cell_service_check.js', - '<%= project.build %>/components/table/cell_host_address/cell_host_address.js': '<%= project.app %>/components/table/cell_host_address/cell_host_address.js', - '<%= project.build %>/components/table/cell_host_status/cell_host_status.js': '<%= project.app %>/components/table/cell_host_status/cell_host_status.js', - - '<%= project.build %>/components/host/host.js': '<%= project.app %>/components/host/host.js', - '<%= project.build %>/components/host/host_cpu/host_cpu.js': '<%= project.app %>/components/host/host_cpu/host_cpu.js', - '<%= project.build %>/components/host/host_info/host_info.js': '<%= project.app %>/components/host/host_info/host_info.js', - '<%= project.build %>/components/host/host_load/host_load.js': '<%= project.app %>/components/host/host_load/host_load.js', - '<%= project.build %>/components/host/host_main/host_main.js': '<%= project.app %>/components/host/host_main/host_main.js', - '<%= project.build %>/components/host/host_services_list/host_services_list.js': '<%= project.app %>/components/host/host_services_list/host_services_list.js', - '<%= project.build %>/components/service/service.js': '<%= project.app %>/components/service/service.js', - '<%= project.build %>/components/service/service_main/service_main.js': '<%= project.app %>/components/service/service_main/service_main.js', - '<%= project.build %>/components/service/service_info/service_info.js': '<%= project.app %>/components/service/service_info/service_info.js', - '<%= project.build %>/components/service/service_metrics/service_metrics.js': '<%= project.app %>/components/service/service_metrics/service_metrics.js', - - '<%= project.build %>/routing_view/routing_view.js': '<%= project.app %>/routing_view/routing_view.js', - '<%= project.build %>/templates/dashboard/dashboard.js': '<%= project.app %>/templates/dashboard/dashboard.js', - '<%= project.build %>/templates/single_table/single_table.js' : '<%= project.app %>/templates/single_table/single_table.js', - '<%= project.build %>/templates/host/host.js': '<%= project.app %>/templates/host/host.js', - '<%= project.build %>/templates/service/service.js': '<%= project.app %>/templates/service/service.js' - }, - { - '<%= project.build %>/js/bansho.min.js' : [ - '<%= project.build %>/app.js', - '<%= project.build %>/components/config/config.js', - '<%= project.build %>/components/utils/promise_manager.js', - '<%= project.build %>/components/live/live.js', - '<%= project.build %>/components/live/surveil.js', - '<%= project.build %>/components/ng-justgage/ng-justgage.js', - '<%= project.build %>/components/filters/filters.js', - '<%= project.build %>/components/sidebar/sidebar.js', - '<%= project.build %>/components/topbar/topbar.js', - '<%= project.build %>/components/tactical/tactical.js', - '<%= project.build %>/components/tactical/status_overview/status_overview.js', - '<%= project.build %>/components/tactical/current_health/current_health.js', - '<%= project.build %>/components/tactical/top_alert_producers/top_alert_producers.js', - '<%= project.build %>/components/table/actionbar/actionbar.js', - '<%= project.build %>/components/table/table.js', - '<%= project.build %>/components/table/cell_duration/cell_duration.js', - '<%= project.build %>/components/table/cell_host/cell_host.js', - '<%= project.build %>/components/table/cell_last_check/cell_last_check.js', - '<%= project.build %>/components/table/cell_service_check/cell_service_check.js', - '<%= project.build %>/components/table/cell_host_address/cell_host_address.js', - '<%= project.build %>/components/table/cell_host_status/cell_host_status.js', - '<%= project.build %>/components/host/host.js', - '<%= project.build %>/components/host/host_cpu/host_cpu.js', - '<%= project.build %>/components/host/host_info/host_info.js', - '<%= project.build %>/components/host/host_load/host_load.js', - '<%= project.build %>/components/host/host_main/host_main.js', - '<%= project.build %>/components/host/host_services_list/host_services_list.js', - '<%= project.build %>/components/service/service.js', - '<%= project.build %>/components/service/service_main/service_main.js', - '<%= project.build %>/components/service/service_info/service_info.js', - '<%= project.build %>/components/service/service_metrics/service_metrics.js', - '<%= project.build %>/routing_view/routing_view.js', - '<%= project.build %>/templates/dashboard/dashboard.js', - '<%= project.build %>/templates/single_table/single_table.js', - '<%= project.build %>/templates/host/host.js', - '<%= project.build %>/templates/service/service.js' - ] - } + '<%= project.app %>/components/live/surveil.js', + '<%= project.assets %>/sass/{,*/}*.{scss,sass}' ], - options: { - mangle: false, - beautify: true - } + tasks: ['copy:surveil', 'sass:dev'] } } }); - grunt.loadNpmTasks('grunt-contrib-sass'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-jslint'); - grunt.registerTask('default', ['watch']); + + grunt.registerTask('development:adagios', [ + 'sass', 'copy:adagios', 'watch:adagios' + ]); + + grunt.registerTask('development:surveil', [ + 'sass', 'copy:surveil', 'watch:surveil' + ]); + + grunt.registerTask('production:adagios', [ + 'clean', 'sass', 'copy:prod', 'useminPrepare:html', 'concat:generated', + 'copy:adagios', + 'uglify:generated', 'usemin:html']); + + grunt.registerTask('production:surveil', [ + 'clean', 'sass', 'copy:prod', 'useminPrepare:html', 'concat:generated', + 'copy:surveil', + 'uglify:generated', 'usemin:html']); }; diff --git a/Makefile b/Makefile index b267dae..7d71895 100644 --- a/Makefile +++ b/Makefile @@ -9,14 +9,17 @@ rebuild: sudo docker build --no-cache -t adg-fe . interactive: - sudo docker run -p 8888:8888 --link surveil_surveil_1:surveil -v ${PWD}:/opt/adagios-frontend -i -t --name adg-fe adg-fe bash + sudo docker run -p 8888:8888 --link surveil_surveil_1:surveil -v $(shell pwd)/app:/opt/adagios-frontend/dist -e BANSHO_ENV=false -i -t --name adg-fe adg-fe bash daemon: - sudo docker run -p 8888:8888 --link surveil_surveil_1:surveil -v ${PWD}:/opt/adagios-frontend -d -t --name adg-fe adg-fe - grunt watch + sudo docker run -p 8888:8888 --link surveil_surveil_1:surveil -v $(shell pwd)/app:/opt/adagios-frontend/dist -e BANSHO_PROD=false -d -t --name adg-fe adg-fe + grunt development:surveil + +production: + sudo docker run -p 8888:8888 --link surveil_surveil_1:surveil -d -t --name adg-fe adg-fe kill: sudo docker kill adg-fe remove: - sudo docker rm adg-fe + sudo docker rm -f adg-fe diff --git a/app/components/host/host_cpu/host_cpu.js b/app/components/host/host_cpu/host_cpu.js index 6fa3a7a..6a140f8 100644 --- a/app/components/host/host_cpu/host_cpu.js +++ b/app/components/host/host_cpu/host_cpu.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('bansho.host.cpu', []) +angular.module('bansho.host.cpu', ['bansho.live']) .controller('HostCpuCtrl', ['$scope', 'getObjects', function ($scope, getObjects) { var hostName = $scope.hostName, diff --git a/app/components/live/adagios.js b/app/components/live/adagios.js index 91d4817..62db4ac 100644 --- a/app/components/live/adagios.js +++ b/app/components/live/adagios.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('bansho.live') +angular.module('bansho.live', []) .constant('filterSuffixes', { contains: '__contains', has_field: '__has_field', diff --git a/app/components/live/live.js b/app/components/live/live.js index 6694f3a..861f19f 100644 --- a/app/components/live/live.js +++ b/app/components/live/live.js @@ -1,3 +1,375 @@ 'use strict'; -angular.module('bansho.live', []); +angular.module('bansho.live', []) + + .service('getObjects', ['$http', 'hostQueryTransform', 'hostMiddleware', 'serviceMiddleware', + function ($http, hostQueryTransform, hostMiddleware, serviceMiddleware) { + return function (fields, filters, apiName, additionnalFields) { + var query = {}, + transformations; + + // Merges additionnalFields into filters as 'is' filter + angular.forEach(additionnalFields, function (value, key) { + if (!('is' in filters)) { + filters.is = {}; + } + + if (!(key in filters.is)) { + filters.is[key] = []; + } + + filters.is[key].push(value); + }) + + function appendTransform(defaults, transform) { + // We can't guarantee that the default transformation is an array + defaults = angular.isArray(defaults) ? defaults : [defaults]; + + return defaults.concat(transform); + }; + + if (apiName === 'hosts') { + transformations = hostMiddleware; + } else if (apiName === 'services') { + transformations = serviceMiddleware; + } else { + throw new Error('getObjects : ' + apiName + ' API is not supported'); + } + + if (apiName === 'hosts') { + hostQueryTransform(fields, filters); + } + + if (fields.length > 0) { + query.fields = JSON.stringify(fields); + } + + query.filters = JSON.stringify(filters); + + return $http({ + url: '/surveil/v2/status/' + apiName + '/', + method: 'POST', + data: query, + transformResponse: appendTransform($http.defaults.transformResponse, transformations), + }).error(function () { + throw new Error('getObjects : POST Request failed'); + }); + }; + }]) + + .service('getService', ['$http', 'getObjects', + function ($http, getObjects) { + return function (hostName, description) { + var fields = [], + filters = {}, + additionnalFields = { 'host_name': hostName, 'description': description }; + + return getObjects(fields, filters, 'services', additionnalFields) + .error(function () { + throw new Error('getService : POST Request failed'); + }); + }; + }]) + + // This service is used to count the number of host open problems + .service('getHostOpenProblems', ['$http', 'getObjects', + function ($http, getObjects) { + return function () { + var fields = ['state'], + filters = {}, + apiName = 'hosts', + additionnalFields = {'acknowledged': 0, 'state': 1}; + + return getObjects(fields, filters, apiName, additionnalFields) + .error(function () { + throw new Error('getHostOpenProblems : POST Request failed'); + }); + }; + }]) + + // This service is used to count the number of service open problems + .service('getServiceOpenProblems', ['$http', '$q', 'getObjects', + function ($http, $q, getObjects) { + return function () { + var serviceFields = ['host_name', 'state'], + serviceFilters = { 'isnot': { 'state': [0] } }, + serviceAdditionnalFields = { 'acknowledged': 0 }, + hostFields = ['host_name', 'state'], + hostFilters = { 'isnot': { 'state': [2] } }, + hostAdditionnalFields = {}, + responsePromise = $q.defer(); + + getObjects(hostFields, hostFilters, 'hosts', hostAdditionnalFields) + .success(function (hostData) { + var hostsResult = {}, + i; + + // Creates a host dictionnary for performance + for (i = 0; i < hostData.length; i += 1) { + hostsResult[hostData[i].host_name] = ''; + } + + getObjects(serviceFields, serviceFilters, 'services', serviceAdditionnalFields) + .success(function (serviceData) { + var result = []; + for (i = 0; i < serviceData.length; i += 1) { + if (serviceData[i].host_name in hostsResult) { + result.push(serviceData[i]); + } + } + responsePromise.resolve(result); + }); + }); + + return responsePromise.promise; + }; + }]) + + // This service is used to count the number of host problems + .service('getHostProblems', ['$http', 'getObjects', + function ($http, getObjects) { + return function () { + var fields = ['state'], + filters = { 'isnot': {'state': [0]} }, + apiName = 'hosts', + additionnalFields = {}; + + return getObjects(fields, filters, apiName, additionnalFields) + .error(function () { + throw new Error('getHostProblems : POST Request failed'); + }); + }; + }]) + + // This service is used to count the number of service problems + .service('getServiceProblems', ['$http', 'getObjects', + function ($http, getObjects) { + return function () { + var fields = ['state'], + filters = { 'isnot': {'state': [0]} }, + apiName = 'services', + additionnalFields = {}; + + return getObjects(fields, filters, apiName, additionnalFields) + .error(function () { + throw new Error('getServiceOpenProblems : POST Request failed'); + }); + }; + }]) + + // This service is used to count the number of hosts + .service('getTotalHosts', ['$http', 'getObjects', + function ($http, getObjects) { + return function () { + var fields = ['host_name'], + filters = {}, + apiName = 'hosts', + additionnalFields = {}; + + return getObjects(fields, filters, apiName, additionnalFields) + .error(function () { + throw new Error('getTotalHosts : POST Request failed'); + }); + }; + }]) + + // This service is used to count the number of services + .service('getTotalServices', ['$http', 'getObjects', + function ($http, getObjects) { + return function () { + var fields = ['host_name'], + filters = {}, + apiName = 'services', + additionnalFields = {}; + + return getObjects(fields, filters, apiName, additionnalFields) + .error(function () { + throw new Error('getTotalServices : POST Request failed'); + }); + }; + }]) + + .service('getHost', ['$http', '$q', function ($http, $q) { + return function (objectType, objectIdentifier) { + var objectData = {}, + endpoints = { + "host" : "hosts", + "service" : "services" + }, + liveUrl = '/surveil/v2/status/' + endpoints[objectType] + '/' + objectIdentifier.host_name + '/', + configUrl = '/surveil/v2/config/'+ endpoints[objectType] + '/' + objectIdentifier.host_name + '/', + responsePromise = $q.defer(); + + $http.get(liveUrl) .success(function (liveData) { + $http.get(configUrl).success(function (configData) { + objectData.live = liveData; + objectData.config = configData; + responsePromise.resolve(objectData); + }) + }); + + return responsePromise.promise; + }; + }]) + + .service('hostQueryTransform', function () { + return function (fields, filters) { + var i, + transformations = { + 'host_state': 'state', + }; + + for (i = 0; i < fields.length; i += 1) { + if (fields[i] in transformations) { + fields[i] = transformations[fields[i]]; + } + } + } + }) + + // Modify response object to conform to web ui + .service('hostMiddleware', function() { + return function (data) { + var i = 0, + conversions = { + 'state': 'host_state' + }; + + for (i = 0; i < data.length; i += 1) { + angular.forEach(data[i], function (value, field) { + if (field in conversions) { + data[i][conversions[field]] = value; + delete data[i][field]; + } + }); + } + + return data; + }; + }) + + // Modify response object to conform to web ui + .service('serviceMiddleware', function() { + return function (data) { + var i = 0, + conversions = { + }; + + if (jQuery.isEmptyObject(conversions)) { + return data; + } + + for (i = 0; i < data.length; i += 1) { + angular.forEach(data[i], function (value, field) { + if (field in conversions) { + data[i][conversions[field]] = value; + delete data[i][field]; + } + }); + } + + return data; + }; + }) + + .service('getTableData', ['$q', 'getObjects', + function ($q, getObjects) { + return function (fields, filters, apiName, additionnalFields) { + var hostFields = [], + serviceFields = [], + hostFilters = {}, + serviceFilters = {}, + hostAdditionnalFields = {}, + serviceAdditionnalFields = {}, + hostKeys = { + 'host_state': 'state', + 'address': 'address', + 'childs': 'childs' + }, + responsePromise = $q.defer(), + i, + found = false; + + if (apiName === 'hosts') { + getObjects(fields, filters, 'hosts', additionnalFields) + .success(function (data) { + responsePromise.resolve(data); + }); + return responsePromise.promise; + } + + angular.forEach(fields, function (field) { + if (field in hostKeys) { + hostFields.push(hostKeys[field]); + } else { + serviceFields.push(field); + } + }); + + // Make sure that 'host_name' is in both queries as we + // use this field to merge data + if ($.inArray('host_name', hostFields) === -1) { + hostFields.push('host_name'); + } + if ($.inArray('host_name', serviceFields) === -1) { + serviceFields.push('host_name'); + } + + angular.forEach(additionnalFields, function (value, field) { + if (field in hostKeys) { + hostAdditionnalFields[hostKeys[field]] = value; + } else { + serviceAdditionnalFields[field] = value; + } + }) + + angular.forEach(filters, function (filterData, filterName) { + angular.forEach(filterData, function (values, field) { + if (field in hostKeys) { + if (!(filterData in hostFilters)) { + hostFilters[filterName] = {}; + } + hostFilters[filterName][hostKeys[field]] = values; + } else { + if (!(filterData in serviceFilters)) { + serviceFilters[filterName] = {}; + } + serviceFilters[filterName][field] = values; + } + }); + }); + + // Queries host and service APIs and merges responses + getObjects(hostFields, hostFilters, 'hosts', hostAdditionnalFields) + .success(function (hostData) { + getObjects(serviceFields, serviceFilters, 'services', serviceAdditionnalFields) + .success(function (serviceData) { + var hostDict = {}; + + // Create a host dict for performance + for (i = 0; i < hostData.length; i += 1) { + var host_name = hostData[i].host_name; + + angular.forEach(hostData[i], function (value, field) { + if (!(host_name in hostDict)) { + hostDict[host_name] = {}; + } + + hostDict[host_name][field] = value; + }); + } + + for (i = 0; i < serviceData.length; i += 1) { + angular.forEach(hostDict[serviceData[i].host_name], + function (value, field) { + serviceData[i][field] = value; + }); + } + + responsePromise.resolve(serviceData); + }); + }); + + return responsePromise.promise; + }; + }]) diff --git a/app/components/live/surveil.js b/app/components/live/surveil.js index 61cdf69..861f19f 100644 --- a/app/components/live/surveil.js +++ b/app/components/live/surveil.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('bansho.live') +angular.module('bansho.live', []) .service('getObjects', ['$http', 'hostQueryTransform', 'hostMiddleware', 'serviceMiddleware', function ($http, hostQueryTransform, hostMiddleware, serviceMiddleware) { diff --git a/app/index.html b/app/index.html index 199bc40..2c71b35 100644 --- a/app/index.html +++ b/app/index.html @@ -12,9 +12,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/container/000-default.conf b/container/000-default.conf index 9391ae9..0f44d68 100644 --- a/container/000-default.conf +++ b/container/000-default.conf @@ -1,11 +1,11 @@ - + Order allow,deny Allow from all Require all granted - Alias / /opt/adagios-frontend/app/ + Alias / /opt/adagios-frontend/dist/ ProxyPreserveHost On diff --git a/package.json b/package.json index ee7dbc2..1471414 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,12 @@ "karma-junit-reporter": "^0.2.2", "protractor": "^1.1.1", "shelljs": "^0.2.6", - "grunt-contrib-uglify": "~0.8.0" + "grunt-contrib-uglify": "~0.8.0", + "grunt-usemin": "~3.0.0", + "grunt-contrib-concat": "~0.5.1", + "grunt-contrib-clean": "~0.6.0", + "grunt-contrib-copy": "~0.8.0", + "load-grunt-tasks": "~3.1.0" }, "scripts": { "postinstall": "bower install", From 9d90a4f66b805edb694a1314e36ec255b16598eb Mon Sep 17 00:00:00 2001 From: Vincent Fournier Date: Wed, 29 Apr 2015 16:45:01 -0400 Subject: [PATCH 3/3] Fix indentation and remove live.js --- .gitignore | 2 +- app/components/live/live.js | 375 ------------------------------------ app/index.html | 95 +++++---- 3 files changed, 48 insertions(+), 424 deletions(-) delete mode 100644 app/components/live/live.js diff --git a/.gitignore b/.gitignore index cde243d..7d0d51d 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,4 @@ out/ dist/ .tmp/ - +app/components/live/live.js diff --git a/app/components/live/live.js b/app/components/live/live.js deleted file mode 100644 index 861f19f..0000000 --- a/app/components/live/live.js +++ /dev/null @@ -1,375 +0,0 @@ -'use strict'; - -angular.module('bansho.live', []) - - .service('getObjects', ['$http', 'hostQueryTransform', 'hostMiddleware', 'serviceMiddleware', - function ($http, hostQueryTransform, hostMiddleware, serviceMiddleware) { - return function (fields, filters, apiName, additionnalFields) { - var query = {}, - transformations; - - // Merges additionnalFields into filters as 'is' filter - angular.forEach(additionnalFields, function (value, key) { - if (!('is' in filters)) { - filters.is = {}; - } - - if (!(key in filters.is)) { - filters.is[key] = []; - } - - filters.is[key].push(value); - }) - - function appendTransform(defaults, transform) { - // We can't guarantee that the default transformation is an array - defaults = angular.isArray(defaults) ? defaults : [defaults]; - - return defaults.concat(transform); - }; - - if (apiName === 'hosts') { - transformations = hostMiddleware; - } else if (apiName === 'services') { - transformations = serviceMiddleware; - } else { - throw new Error('getObjects : ' + apiName + ' API is not supported'); - } - - if (apiName === 'hosts') { - hostQueryTransform(fields, filters); - } - - if (fields.length > 0) { - query.fields = JSON.stringify(fields); - } - - query.filters = JSON.stringify(filters); - - return $http({ - url: '/surveil/v2/status/' + apiName + '/', - method: 'POST', - data: query, - transformResponse: appendTransform($http.defaults.transformResponse, transformations), - }).error(function () { - throw new Error('getObjects : POST Request failed'); - }); - }; - }]) - - .service('getService', ['$http', 'getObjects', - function ($http, getObjects) { - return function (hostName, description) { - var fields = [], - filters = {}, - additionnalFields = { 'host_name': hostName, 'description': description }; - - return getObjects(fields, filters, 'services', additionnalFields) - .error(function () { - throw new Error('getService : POST Request failed'); - }); - }; - }]) - - // This service is used to count the number of host open problems - .service('getHostOpenProblems', ['$http', 'getObjects', - function ($http, getObjects) { - return function () { - var fields = ['state'], - filters = {}, - apiName = 'hosts', - additionnalFields = {'acknowledged': 0, 'state': 1}; - - return getObjects(fields, filters, apiName, additionnalFields) - .error(function () { - throw new Error('getHostOpenProblems : POST Request failed'); - }); - }; - }]) - - // This service is used to count the number of service open problems - .service('getServiceOpenProblems', ['$http', '$q', 'getObjects', - function ($http, $q, getObjects) { - return function () { - var serviceFields = ['host_name', 'state'], - serviceFilters = { 'isnot': { 'state': [0] } }, - serviceAdditionnalFields = { 'acknowledged': 0 }, - hostFields = ['host_name', 'state'], - hostFilters = { 'isnot': { 'state': [2] } }, - hostAdditionnalFields = {}, - responsePromise = $q.defer(); - - getObjects(hostFields, hostFilters, 'hosts', hostAdditionnalFields) - .success(function (hostData) { - var hostsResult = {}, - i; - - // Creates a host dictionnary for performance - for (i = 0; i < hostData.length; i += 1) { - hostsResult[hostData[i].host_name] = ''; - } - - getObjects(serviceFields, serviceFilters, 'services', serviceAdditionnalFields) - .success(function (serviceData) { - var result = []; - for (i = 0; i < serviceData.length; i += 1) { - if (serviceData[i].host_name in hostsResult) { - result.push(serviceData[i]); - } - } - responsePromise.resolve(result); - }); - }); - - return responsePromise.promise; - }; - }]) - - // This service is used to count the number of host problems - .service('getHostProblems', ['$http', 'getObjects', - function ($http, getObjects) { - return function () { - var fields = ['state'], - filters = { 'isnot': {'state': [0]} }, - apiName = 'hosts', - additionnalFields = {}; - - return getObjects(fields, filters, apiName, additionnalFields) - .error(function () { - throw new Error('getHostProblems : POST Request failed'); - }); - }; - }]) - - // This service is used to count the number of service problems - .service('getServiceProblems', ['$http', 'getObjects', - function ($http, getObjects) { - return function () { - var fields = ['state'], - filters = { 'isnot': {'state': [0]} }, - apiName = 'services', - additionnalFields = {}; - - return getObjects(fields, filters, apiName, additionnalFields) - .error(function () { - throw new Error('getServiceOpenProblems : POST Request failed'); - }); - }; - }]) - - // This service is used to count the number of hosts - .service('getTotalHosts', ['$http', 'getObjects', - function ($http, getObjects) { - return function () { - var fields = ['host_name'], - filters = {}, - apiName = 'hosts', - additionnalFields = {}; - - return getObjects(fields, filters, apiName, additionnalFields) - .error(function () { - throw new Error('getTotalHosts : POST Request failed'); - }); - }; - }]) - - // This service is used to count the number of services - .service('getTotalServices', ['$http', 'getObjects', - function ($http, getObjects) { - return function () { - var fields = ['host_name'], - filters = {}, - apiName = 'services', - additionnalFields = {}; - - return getObjects(fields, filters, apiName, additionnalFields) - .error(function () { - throw new Error('getTotalServices : POST Request failed'); - }); - }; - }]) - - .service('getHost', ['$http', '$q', function ($http, $q) { - return function (objectType, objectIdentifier) { - var objectData = {}, - endpoints = { - "host" : "hosts", - "service" : "services" - }, - liveUrl = '/surveil/v2/status/' + endpoints[objectType] + '/' + objectIdentifier.host_name + '/', - configUrl = '/surveil/v2/config/'+ endpoints[objectType] + '/' + objectIdentifier.host_name + '/', - responsePromise = $q.defer(); - - $http.get(liveUrl) .success(function (liveData) { - $http.get(configUrl).success(function (configData) { - objectData.live = liveData; - objectData.config = configData; - responsePromise.resolve(objectData); - }) - }); - - return responsePromise.promise; - }; - }]) - - .service('hostQueryTransform', function () { - return function (fields, filters) { - var i, - transformations = { - 'host_state': 'state', - }; - - for (i = 0; i < fields.length; i += 1) { - if (fields[i] in transformations) { - fields[i] = transformations[fields[i]]; - } - } - } - }) - - // Modify response object to conform to web ui - .service('hostMiddleware', function() { - return function (data) { - var i = 0, - conversions = { - 'state': 'host_state' - }; - - for (i = 0; i < data.length; i += 1) { - angular.forEach(data[i], function (value, field) { - if (field in conversions) { - data[i][conversions[field]] = value; - delete data[i][field]; - } - }); - } - - return data; - }; - }) - - // Modify response object to conform to web ui - .service('serviceMiddleware', function() { - return function (data) { - var i = 0, - conversions = { - }; - - if (jQuery.isEmptyObject(conversions)) { - return data; - } - - for (i = 0; i < data.length; i += 1) { - angular.forEach(data[i], function (value, field) { - if (field in conversions) { - data[i][conversions[field]] = value; - delete data[i][field]; - } - }); - } - - return data; - }; - }) - - .service('getTableData', ['$q', 'getObjects', - function ($q, getObjects) { - return function (fields, filters, apiName, additionnalFields) { - var hostFields = [], - serviceFields = [], - hostFilters = {}, - serviceFilters = {}, - hostAdditionnalFields = {}, - serviceAdditionnalFields = {}, - hostKeys = { - 'host_state': 'state', - 'address': 'address', - 'childs': 'childs' - }, - responsePromise = $q.defer(), - i, - found = false; - - if (apiName === 'hosts') { - getObjects(fields, filters, 'hosts', additionnalFields) - .success(function (data) { - responsePromise.resolve(data); - }); - return responsePromise.promise; - } - - angular.forEach(fields, function (field) { - if (field in hostKeys) { - hostFields.push(hostKeys[field]); - } else { - serviceFields.push(field); - } - }); - - // Make sure that 'host_name' is in both queries as we - // use this field to merge data - if ($.inArray('host_name', hostFields) === -1) { - hostFields.push('host_name'); - } - if ($.inArray('host_name', serviceFields) === -1) { - serviceFields.push('host_name'); - } - - angular.forEach(additionnalFields, function (value, field) { - if (field in hostKeys) { - hostAdditionnalFields[hostKeys[field]] = value; - } else { - serviceAdditionnalFields[field] = value; - } - }) - - angular.forEach(filters, function (filterData, filterName) { - angular.forEach(filterData, function (values, field) { - if (field in hostKeys) { - if (!(filterData in hostFilters)) { - hostFilters[filterName] = {}; - } - hostFilters[filterName][hostKeys[field]] = values; - } else { - if (!(filterData in serviceFilters)) { - serviceFilters[filterName] = {}; - } - serviceFilters[filterName][field] = values; - } - }); - }); - - // Queries host and service APIs and merges responses - getObjects(hostFields, hostFilters, 'hosts', hostAdditionnalFields) - .success(function (hostData) { - getObjects(serviceFields, serviceFilters, 'services', serviceAdditionnalFields) - .success(function (serviceData) { - var hostDict = {}; - - // Create a host dict for performance - for (i = 0; i < hostData.length; i += 1) { - var host_name = hostData[i].host_name; - - angular.forEach(hostData[i], function (value, field) { - if (!(host_name in hostDict)) { - hostDict[host_name] = {}; - } - - hostDict[host_name][field] = value; - }); - } - - for (i = 0; i < serviceData.length; i += 1) { - angular.forEach(hostDict[serviceData[i].host_name], - function (value, field) { - serviceData[i][field] = value; - }); - } - - responsePromise.resolve(serviceData); - }); - }); - - return responsePromise.promise; - }; - }]) diff --git a/app/index.html b/app/index.html index 2c71b35..2bf7402 100644 --- a/app/index.html +++ b/app/index.html @@ -9,60 +9,59 @@ Bansho - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - +