diff --git a/Gruntfile.js b/Gruntfile.js index fa1b647..3a52a87 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -41,7 +41,7 @@ module.exports = function (grunt) { '!<%= project.build %>/**', '!<%= project.assets %>/**' ], - tasks: ['uglify:dev'] + tasks: ['uglify:surveil'] } }, @@ -92,7 +92,7 @@ module.exports = function (grunt) { '<%= project.app %>/components/config/config.js', '<%= project.app %>/components/utils/promise_manager.js', '<%= project.app %>/components/live/live.js', - '<%= project.app %>/components/live/get_objects.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', @@ -107,7 +107,6 @@ module.exports = function (grunt) { '<%= 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_hosts_host/cell_hosts_host.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', @@ -131,14 +130,14 @@ module.exports = function (grunt) { mangle: true } }, - dev: { + 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/get_objects.js': '<%= project.app %>/components/live/get_objects.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', @@ -153,7 +152,6 @@ module.exports = function (grunt) { '<%= 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_hosts_host/cell_hosts_host.js': '<%= project.app %>/components/table/cell_hosts_host/cell_hosts_host.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', @@ -180,7 +178,95 @@ module.exports = function (grunt) { '<%= project.build %>/components/config/config.js', '<%= project.build %>/components/utils/promise_manager.js', '<%= project.build %>/components/live/live.js', - '<%= project.build %>/components/live/get_objects.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' + ] + } + ], + options: { + mangle: false, + beautify: true + } + }, + 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/adagios.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', @@ -195,7 +281,6 @@ module.exports = function (grunt) { '<%= 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_hosts_host/cell_hosts_host.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', diff --git a/app/components/live/get_objects.js b/app/components/live/get_objects.js deleted file mode 100644 index 98f452d..0000000 --- a/app/components/live/get_objects.js +++ /dev/null @@ -1,291 +0,0 @@ -'use strict'; - -angular.module('adagios.live') - - .constant('filterSuffixes', { contains: '__contains', - has_field: '__has_field', - startswith: '__startswith', - endswith: '__endswith', - exists: '__exists', - in: '__in', - isnot: '__isnot', - regex: '__regex' - }) - - .service('getObjects', ['$http', 'filterSuffixes', 'hostMiddleware', - function ($http, filterSuffixes, hostMiddleware) { - return function (fields, filters, apiName, additionnalFields) { - var filtersQuery = '', - additionnalQuery = ''; - - function createFiltersQuery(filters) { - var builtQuery = ''; - angular.forEach(filters, function (value, key) { - var filterType = filterSuffixes[key]; - angular.forEach(value, function (fieldValues, fieldName) { - var filter = fieldName + filterType; - angular.forEach(fieldValues, function (_value) { - var filterQuery = '&' + filter + '=' + _value; - builtQuery += filterQuery; - }); - }); - }); - - return builtQuery; - } - - function createAdditionnalQuery(additionnalFields) { - var query = ''; - angular.forEach(additionnalFields, function (value, key) { - query += '&' + key + '=' + value; - }); - - return query; - } - - filtersQuery = createFiltersQuery(filters); - additionnalQuery = createAdditionnalQuery(additionnalFields); - - 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); - }; - - - function transformations(data) { - if (apiName === 'hosts') { - hostMiddleware(data); - } - return data; - } - - return $http({ - url: '/adagios/rest/status/json/' + apiName + '/?fields=' + fields + filtersQuery + additionnalQuery, - method: 'GET', - transformResponse: appendTransform($http.defaults.transformResponse, transformations) - }).error(function () { - throw new Error('getObjects : GET Request failed'); - }); - }; - }]) - - .service('getService', ['$http', - function ($http) { - return function (hostName, description) { - return $http.get('/adagios/rest/status/json/services/?host_name=' + hostName + '&description=' + description) - .error(function () { - throw new Error('getService : GET 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', - additionnalQueryFields = {'acknowledged': 0, 'state': 1}; - - return getObjects(fields, filters, apiName, additionnalQueryFields) - .error(function () { - throw new Error('getHostOpenProblems : GET Request failed'); - }); - }; - }]) - - // This service is used to count the number of service open problems - .service('getServiceOpenProblems', ['$http', 'getObjects', - function ($http, getObjects) { - return function () { - var fields = ['state'], - filters = { "isnot": { "state": [ "0" ], "host_state": [ "2" ] }}, - apiName = 'services', - additionnalQueryFields = {'acknowledged': 0}; - - return getObjects(fields, filters, apiName, additionnalQueryFields) - .error(function () { - throw new Error('getServiceOpenProblems : GET Request failed'); - }); - }; - }]) - - // 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', - additionnalQueryFields = {}; - - return getObjects(fields, filters, apiName, additionnalQueryFields) - .error(function () { - throw new Error('getHostProblems : GET 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', - additionnalQueryFields = {}; - - return getObjects(fields, filters, apiName, additionnalQueryFields) - .error(function () { - throw new Error('getServiceOpenProblems : GET Request failed'); - }); - }; - }]) - - // This service is used to count the number of hosts - .service('getTotalHosts', ['$http', 'getObjects', - function ($http, getObjects) { - return function () { - var fields = ['name'], - filters = {}, - apiName = 'hosts', - additionnalQueryFields = {}; - - return getObjects(fields, filters, apiName, additionnalQueryFields) - .error(function () { - throw new Error('getTotalHosts : GET Request failed'); - }); - }; - }]) - - // This service is used to count the number of services - .service('getTotalServices', ['$http', 'getObjects', - function ($http, getObjects) { - return function () { - var fields = ['name'], - filters = {}, - apiName = 'services', - additionnalQueryFields = {}; - - return getObjects(fields, filters, apiName, additionnalQueryFields) - .error(function () { - throw new Error('getTotalServices : GET Request failed'); - }); - }; - }]) - - .service('getObjectId', ['$http', function ($http) { - return function (objectType, objectIdentifier) { - - var postString, req; - - postString = "with_fields=id&object_type=" + objectType; - angular.forEach(objectIdentifier, function (value, key) { - if (key === "description") { - key = "service_description"; - } - postString += "&" + key + "=" + value; - }); - - req = { - method: 'POST', - url: '/adagios/rest/pynag/json/get_objects', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - data: postString - }; - - return $http(req) - .error(function () { - throw new Error('getObjectId : POST Request failed'); - }); - }; - }]) - - .service('getObjectById', ['$http', function ($http) { - return function (objectId) { - - var postString, req; - - postString = "with_fields=&id=" + objectId; - - req = { - method: 'POST', - url: '/adagios/rest/pynag/json/get_object', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - data: postString - }; - - - return $http(req) - .error(function () { - throw new Error('getHostById : POST Request failed'); - }); - }; - }]) - - // Add object of specified type to $scope.data - .service('addObjectToScope', ['$http', 'getObjectId', 'getObjectById', function ($http, getObjectId, getObjectById) { - return function (objectType, objectIdentifier, scope) { - var objectData = {}, - url = "/adagios/rest/status/json/", - firstParameter = true, - endpoints = { - "host" : "hosts", - "service" : "services" - }; - - url += endpoints[objectType]; - url += "/?"; - - angular.forEach(objectIdentifier, function (value, key) { - if (!firstParameter) { - url += "&"; - } - url += key + "=" + value; - firstParameter = false; - - }); - - $http.get(url) - .success(function (data) { - objectData.live = data[0]; - getObjectId(objectType, objectIdentifier) - .success(function (data) { - var objectId = data[0].id; - scope.data.id = objectId; - getObjectById(objectId) - .success(function (data) { - objectData.config = data; - scope.data = objectData; - }); - }); - }); - }; - }]) - - // Modify response object to conform to web ui - .service('hostMiddleware', function() { - return function(data) { - var i = 0, - conversions = { - 'name': 'host_name', - '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]; - } - }); - } - }; - }); diff --git a/app/components/live/get_objects_test.js b/app/components/live/get_objects_test.js deleted file mode 100644 index ec54e8f..0000000 --- a/app/components/live/get_objects_test.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -describe('In Adagios Live', function () { - var $httpBackend; - - beforeEach(module('adagios.live')); - - beforeEach(inject(function (_$httpBackend_) { - $httpBackend = _$httpBackend_; - })); - - describe('getObjects', function () { - - it('should send the proper GET request', inject(function (getObjects) { - var fields = ['host_name', 'host_state', 'description'], - filters = { contains: { host_name: ['srv', 'a'], plugin_output: ['SWAP'] }, - startswith: { host_name: ['srv'] } }, - apiName = 'services'; - - getObjects(fields, filters, apiName); - $httpBackend.expectGET('/rest/status/json/services/?fields=host_name,host_state,description&host_name__contains=srv&host_name__contains=a&plugin_output__contains=SWAP&host_name__startswith=srv').respond(''); - $httpBackend.flush(); - })); - }); -}); diff --git a/app/components/table/table.js b/app/components/table/table.js index 24b86dd..5165826 100644 --- a/app/components/table/table.js +++ b/app/components/table/table.js @@ -8,7 +8,6 @@ angular.module('adagios.table', ['adagios.live', 'adagios.table.cell_duration', 'adagios.table.cell_service_check', 'adagios.table.cell_last_check', - 'adagios.table.cell_hosts_host', 'adagios.table.cell_host_address', 'adagios.table.cell_host_status' ]) diff --git a/readme.rst b/readme.rst index be53f14..c3024fd 100644 --- a/readme.rst +++ b/readme.rst @@ -31,11 +31,19 @@ To compile css files run : grunt sass -To compile js files run : +Adagios frontend now supports two backends : adagios and surveil. +To compile js for adagios run : :: - grunt uglify + grunt uglify:adagios + +To compile js for surveil run : + +:: + + grunt uglify:surveil + If you wish to develop in a docker container, here is how to proceed (assuming you already have docker installed) : @@ -48,6 +56,7 @@ you already have docker installed) : You must leave grunt running in the background to automatically compile css and minify/compress js files when source code changes +By default, grunt uses surveil backend ::