wazuh-kibana-app/public/controllers/agents.js
malbarral 6cd92a3bec Merge branch '2.1' into loading-icon-17
Conflicts:
	package.json
2017-07-04 12:10:22 +02:00

297 lines
9.7 KiB
JavaScript

import rison from 'rison-node';
// Require config
var app = require('ui/modules').get('app/wazuh', []);
app.controller('agentsController', function ($scope, $q, DataFactory, Notifier, appState, errlog, $window, genericReq, $routeParams, $route, $location, $http, $rootScope) {
//Initialization
$scope.state = appState;
$scope.load = true;
$scope.search = '';
$scope.submenuNavItem = 'preview';
$scope.tabView = "panels";
$scope.state = appState;
$scope._status = 'all';
$scope._os = 'all';
$scope.defaultManager = $scope.state.getDefaultManager().name;
$scope.extensions = $scope.state.getExtensions().extensions;
$scope.results = true;
$scope.loading = true;
$scope.hideRing = function(items){
if($(".vis-editor-content" ).length >= items)
return true;
return false;
}
var objectsArray = [];
const notify = new Notifier({location: 'Agents'});
var agentId = "";
// Object for matching nav items and Wazuh groups
var tabGroups = {
"overview": {"group": "*"},
"fim": {"group": "syscheck"},
"policy_monitoring": {"group": "rootcheck"},
"oscap": {"group": "oscap"},
"audit": {"group": "audit"},
"pci": {"group": "*"}
};
if($routeParams.id)
agentId = $routeParams.id;
if($routeParams.tab)
$scope.submenuNavItem = $routeParams.tab;
if($routeParams.view)
$scope.tabView = $routeParams.view;
//Functions
// Switch tab: Refresh or change location and check for present data
$scope.switchTab = function (tab) {
$scope.loading=true;
// Detecting refresh or location
if($scope.submenuNavItem != tab){
$scope.submenuNavItem = tab;
$location.search('tab', $scope.submenuNavItem);
if($scope.submenuNavItem != "preview"){
$scope.presentData($scope._agent.name).then(function (data) {$scope.results = data; $scope.loading = false;}, function() { $scope.results = false; $scope.loading = false;});
}
}else{
$rootScope.$broadcast('fetchVisualization');
$scope.presentData($scope._agent.name).then(function (data) {$scope.results = data; $scope.loading = false;}, function() { $scope.results = false; $scope.loading = false;});
}
};
//Print Error
var printError = function (error) {
notify.error(error.message);
};
// Checking for alerts count
// Decode and set time filter
if($route.current.params._g){
var decodedTimeFilter;
if($route.current.params._g.startsWith("h@")){
decodedTimeFilter = JSON.parse(sessionStorage.getItem($route.current.params._g));
}else{
decodedTimeFilter = rison.decode($route.current.params._g);
}
if(decodedTimeFilter.time){
$scope.timeGTE = decodedTimeFilter.time.from;
$scope.timeLT = decodedTimeFilter.time.to;
}else{
$scope.timeGTE = "now-1d";
$scope.timeLT = "now";
}
}else{
$scope.timeGTE = "now-1d";
$scope.timeLT = "now";
}
// Check if there are any alert.
$scope.presentData = function (agentName) {
var group = tabGroups[$scope.submenuNavItem].group;
var payload = {};
var fields = {"fields" : [{"field": "rule.groups", "value": group},{"field": "agent.name", "value": agentName}]};
// No filter needed for general/pci
if(group == "*")
fields = {"fields" : [{"field": "agent.name", "value": agentName}]};
var managerName = {"manager" : $scope.defaultManager};
var timeInterval = {"timeinterval": {"gte" : $scope.timeGTE, "lt": $scope.timeLT}};
angular.extend(payload, fields, managerName, timeInterval);
var deferred = $q.defer();
genericReq.request('POST', '/api/wazuh-elastic/alerts-count/', payload).then(function (data) {
if(data.data != 0)
deferred.resolve(true);
else
deferred.resolve(false);
});
return deferred.promise;
};
$scope.getAgentStatusClass = function (agentStatus) {
if (agentStatus == "Active")
return "green"
else
return "red";
};
$scope.formatAgentStatus = function (agentStatus) {
if (agentStatus == "Active")
return "Active"
else if (agentStatus == "Disconnected")
return "Disconnected";
else
return "Never connected";
};
$scope.agentsSearch = function (search) {
var defered = $q.defer();
var promise = defered.promise;
if (search) {
DataFactory.filters.set(objectsArray['/agents'], 'search', search);
} else {
DataFactory.filters.unset(objectsArray['/agents'], 'search');
}
DataFactory.get(objectsArray['/agents'])
.then(function (data) {
defered.resolve(data.data.items);
}, function (data) {
printError(data);
defered.reject();
});
return promise;
};
$scope.extensionStatus = function (extension) {
return $scope.extensions[extension];
};
$scope.applyAgent = function (agent) {
if (agent) {
if($scope.submenuNavItem == 'preview'){
$scope.submenuNavItem = 'overview';
$location.search('tab', $scope.submenuNavItem);
}
$scope.agentInfo = {};
// Get Agent Info
DataFactory.getAndClean('get', '/agents/' + agent.id, {}).then(function (data) {
$scope.agentInfo = data.data;
if(angular.isUndefined($scope.agentInfo.version))
$scope.agentInfo.version = "Unknown";
if(angular.isUndefined($scope.agentInfo.os))
$scope.agentInfo.os = "Unknown";
if(angular.isUndefined($scope.agentInfo.lastKeepAlive))
$scope.agentInfo.lastKeepAlive = "Unknown";
$scope._agent = data.data;
$scope.search = data.data.name;
$location.search('id', $scope._agent.id);
$scope.presentData($scope._agent.name).then(function (data) {
$scope.results = data;
$scope.load = false;
});
// Get syscheck info
DataFactory.getAndClean('get', '/syscheck/' + agent.id + '/last_scan', {}).then(function (data) {
$scope.agentInfo.syscheck = data.data;
$scope.agentInfo.syscheck.duration = "Unknown";
if($scope.agentInfo.syscheck.syscheckEndTime != null && $scope.agentInfo.syscheck.syscheckTime != null){
var syscheckTime = new Date($scope.agentInfo.syscheck.syscheckTime);
var syscheckEndTime = new Date($scope.agentInfo.syscheck.syscheckEndTime);
var minutes = ((syscheckEndTime-syscheckTime)/1000)/60;
$scope.agentInfo.syscheck.duration = window.Math.round(minutes);
}else if($scope.agentInfo.syscheck.syscheckEndTime == null){
$scope.agentInfo.syscheck.syscheckEndTime = "Unknown";
}else{
$scope.agentInfo.syscheck.syscheckTime = "Unknown";
}
}, printError);
// Get rootcheck info
DataFactory.getAndClean('get', '/rootcheck/' + agent.id + '/last_scan', {}).then(function (data) {
$scope.agentInfo.rootcheck = data.data;
$scope.agentInfo.rootcheck.duration = "Unknown";
if($scope.agentInfo.rootcheck.rootcheckEndTime != null && $scope.agentInfo.rootcheck.rootcheckTime != null){
var rootcheckTime = new Date($scope.agentInfo.rootcheck.rootcheckTime);
var rootcheckEndTime = new Date($scope.agentInfo.rootcheck.rootcheckEndTime);
var minutes = ((rootcheckEndTime-rootcheckTime)/1000)/60;
$scope.agentInfo.rootcheck.duration = window.Math.round(minutes);
}else if($scope.agentInfo.rootcheck.rootcheckEndTime == null){
$scope.agentInfo.rootcheck.rootcheckEndTime = "Unknown";
}else{
$scope.agentInfo.rootcheck.rootcheckTime = "Unknown";
}
}, printError);
}, printError);
}
};
$scope.restartAgent = function () {
var path = '/agents/' + $scope._agent.id + '/restart';
DataFactory.getAndClean('put', path, {})
.then(function (data) {
if(data.error != 0)
var alert = data.message;
else
var alert = data.data;
notify.info(alert);
}, printError);
};
// Watchers
$scope.$watch('tabView', function() {
$location.search('view', $scope.tabView);
});
// Watch for timefilter changes
$scope.$on('$routeUpdate', function(){
if($location.search()._g && $location.search()._g != "()"){
var currentTimeFilter = rison.decode($location.search()._g);
// Check if timefilter has changed and update values
var gParameter;
if($route.current.params._g.startsWith("h@")){
gParameter = sessionStorage.getItem($route.current.params._g);
}else{
gParameter = $route.current.params._g;
}
if(gParameter != "()" && gParametercurrentTimeFilter.time && ($scope.timeGTE != currentTimeFilter.time.from || $scope.timeLT != currentTimeFilter.time.to)){
$scope.timeGTE = currentTimeFilter.time.from;
$scope.timeLT = currentTimeFilter.time.to;
//Check for present data for the selected tab
if($scope.submenuNavItem != "preview"){
$scope.presentData($scope._agent.name).then(function (data) {$scope.results = data;}, function() { $scope.results = false; });
}
}
}
// Check if tab is empty, then reset to preview
if(angular.isUndefined($location.search().tab) && angular.isUndefined($location.search().id)){
$scope.submenuNavItem = "preview";
delete $scope._agent;
$scope.search = "";
}
});
var load = function () {
DataFactory.initialize('get', '/agents', {}, 5, 0)
.then(function (data) {
objectsArray['/agents'] = data;
DataFactory.filters.register(objectsArray['/agents'], 'search', 'string');
if(agentId != ""){
$scope.applyAgent({"id": agentId});
}
else
$scope.load = false;
}, printError);
};
//Load
try {
load();
$scope.loading=false;
} catch (e) {
notify.error('Unexpected exception loading controller');
errlog.log('Unexpected exception loading controller', e);
}
//Destroy
$scope.$on("$destroy", function () {
angular.forEach(objectsArray, function (value) {
DataFactory.clean(value)
});
});
});