New Grunt task

This commit is contained in:
Vincent Fournier 2015-04-29 16:34:48 -04:00
parent 3270236507
commit e8b0609a43
11 changed files with 555 additions and 312 deletions

7
.gitignore vendored
View File

@ -14,4 +14,9 @@ tmp
app/assets/css
.sass-cache/
out/
build/
# Grunt generated files
dist/
.tmp/

View File

@ -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"

View File

@ -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']);
};

View File

@ -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

View File

@ -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,

View File

@ -1,6 +1,6 @@
'use strict';
angular.module('bansho.live')
angular.module('bansho.live', [])
.constant('filterSuffixes', { contains: '__contains',
has_field: '__has_field',

View File

@ -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;
};
}])

View File

@ -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) {

View File

@ -12,9 +12,57 @@
<link rel="stylesheet" href="assets/css/app.css">
<meta name="description" content="">
<!-- build:js js/app.min.js -->
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/jquery/dist/jquery.min.js"></script>
<script src="bower_components/moment/moment.js"></script>
<script src="bower_components/raphael/raphael-min.js"></script>
<script src="bower_components/justgage-toorshia/justgage.js"></script>
<script src="bower_components/bootstrap-sass-official/assets/javascripts/bootstrap.js"></script>
<script src="assets/js/scripts.js"></script>
<script src="bower_components/html5-boilerplate/js/vendor/modernizr-2.6.2.min.js"></script>
<script src="app.js"></script>
<script src="components/config/config.js"></script>
<script src="components/utils/promise_manager.js"></script>
<script src="components/live/live.js"></script>
<script src="components/ng-justgage/ng-justgage.js"></script>
<script src="components/filters/filters.js"></script>
<script src="components/sidebar/sidebar.js"></script>
<script src="components/topbar/topbar.js"></script>
<script src="components/tactical/tactical.js"></script>
<script src="components/tactical/status_overview/status_overview.js"></script>
<script src="components/tactical/current_health/current_health.js"></script>
<script src="components/tactical/top_alert_producers/top_alert_producers.js"></script>
<script src="components/table/actionbar/actionbar.js"></script>
<script src="components/table/table.js"></script>
<script src="components/table/cell_duration/cell_duration.js"></script>
<script src="components/table/cell_host/cell_host.js"></script>
<script src="components/table/cell_last_check/cell_last_check.js"></script>
<script src="components/table/cell_service_check/cell_service_check.js"></script>
<script src="components/table/cell_host_address/cell_host_address.js"></script>
<script src="components/table/cell_host_status/cell_host_status.js"></script>
<script src="components/host/host.js"></script>
<script src="components/host/host_cpu/host_cpu.js"></script>
<script src="components/host/host_info/host_info.js"></script>
<script src="components/host/host_load/host_load.js"></script>
<script src="components/host/host_main/host_main.js"></script>
<script src="components/host/host_services_list/host_services_list.js"></script>
<script src="components/service/service.js"></script>
<script src="components/service/service_main/service_main.js"></script>
<script src="components/service/service_info/service_info.js"></script>
<script src="components/service/service_metrics/service_metrics.js"></script>
<script src="routing_view/routing_view.js"></script>
<script src="templates/dashboard/dashboard.js"></script>
<script src="templates/single_table/single_table.js"></script>
<script src="templates/host/host.js"></script>
<script src="templates/service/service.js"></script>
<!-- endbuild -->
</head>
<body class="layout color-scheme--dark">
<body class="layout color-scheme--dark" ng-strict-di>
<!--[if lt IE 7]> <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> <![endif]-->
<div class="layout__container">
<aside class="layout__aside sidebar-wrapper collapse" id="sidebarWrapper">
@ -30,59 +78,5 @@
<footer class="footer" role="contentinfo">...</footer>
</div>
</div>
<!-- build:js js/app.min.js -->
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/jquery/dist/jquery.min.js"></script>
<script src="bower_components/moment/moment.js"></script>
<script src="bower_components/raphael/raphael-min.js"></script>
<script src="bower_components/justgage-toorshia/justgage.js"></script>
<script src="bower_components/bootstrap-sass-official/assets/javascripts/bootstrap.js"></script>
<script src="assets/js/scripts.js"></script>
<script src="bower_components/html5-boilerplate/js/vendor/modernizr-2.6.2.min.js"></script>
<script src="app.js"></script>
<script src="components/config/config.js"></script>
<script src="components/utils/promise_manager.js"></script>
<script src="components/live/live.js"></script>
<script src="components/ng-justgage/ng-justgage.js"></script>
<script src="components/filters/filters.js"></script>
<script src="components/sidebar/sidebar.js"></script>
<script src="components/topbar/topbar.js"></script>
<script src="components/tactical/tactical.js"></script>
<script src="components/tactical/status_overview/status_overview.js"></script>
<script src="components/tactical/current_health/current_health.js"></script>
<script src="components/tactical/top_alert_producers/top_alert_producers.js"></script>
<script src="components/table/actionbar/actionbar.js"></script>
<script src="components/table/table.js"></script>
<script src="components/table/cell_duration/cell_duration.js"></script>
<script src="components/table/cell_host/cell_host.js"></script>
<script src="components/table/cell_last_check/cell_last_check.js"></script>
<script src="components/table/cell_service_check/cell_service_check.js"></script>
<script src="components/table/cell_host_address/cell_host_address.js"></script>
<script src="components/table/cell_host_status/cell_host_status.js"></script>
<script src="components/host/host.js"></script>
<script src="components/host/host_cpu/host_cpu.js"></script>
<script src="components/host/host_info/host_info.js"></script>
<script src="components/host/host_load/host_load.js"></script>
<script src="components/host/host_main/host_main.js"></script>
<script src="components/host/host_services_list/host_services_list.js"></script>
<script src="components/service/service.js"></script>
<script src="components/service/service_main/service_main.js"></script>
<script src="components/service/service_info/service_info.js"></script>
<script src="components/service/service_metrics/service_metrics.js"></script>
<script src="routing_view/routing_view.js"></script>
<script src="templates/dashboard/dashboard.js"></script>
<script src="templates/single_table/single_table.js"></script>
<script src="templates/host/host.js"></script>
<script src="templates/service/service.js"></script>
<!-- endbuild -->
<!-- build:dev surveil -->
<script src="components/live/surveil.js"></script>
<!-- endbuild -->
</body>
</html>

View File

@ -1,11 +1,11 @@
<Directory "/opt/adagios-frontend/app/">
<Directory "/opt/adagios-frontend/dist/">
Order allow,deny
Allow from all
Require all granted
</Directory>
<VirtualHost *:8888>
Alias / /opt/adagios-frontend/app/
Alias / /opt/adagios-frontend/dist/
ProxyPreserveHost On

View File

@ -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",