Skip to content

Commit

Permalink
#53 Update the analyzer service to use the cortex connector apis
Browse files Browse the repository at this point in the history
  • Loading branch information
nadouani committed Dec 7, 2016
1 parent 065ba3d commit b7c897a
Show file tree
Hide file tree
Showing 12 changed files with 255 additions and 136 deletions.
1 change: 1 addition & 0 deletions ui/app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@
<script src="scripts/services/CaseTaskSrv.js"></script>
<script src="scripts/services/ChartSrv.js"></script>
<script src="scripts/services/Constants.js"></script>
<script src="scripts/services/CortexSrv.js"></script>
<script src="scripts/services/EntitySrv.js"></script>
<script src="scripts/services/FileResource.js"></script>
<script src="scripts/services/JobSrv.js"></script>
Expand Down
12 changes: 4 additions & 8 deletions ui/app/scripts/controllers/admin/AdminReportTemplatesCtrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,12 @@
this.load = function() {
$q.all([
ReportTemplateSrv.list(),
AnalyzerSrv.query({
range: 'all'
}).$promise
AnalyzerSrv.query()
]).then(function (response) {
self.templates = response[0].data;
self.analyzers = response[1];

var map = _.indexBy(self.analyzers, 'id');

return $q.resolve(map);

return $q.resolve(self.analyzers);
}).then(function (analyzersMap) {
_.each(self.templates, function (tpl) {
_.each(tpl.analyzers, function (analyzerId) {
Expand Down Expand Up @@ -62,7 +58,7 @@
this.load();
};

function AdminReportTemplateDialogCtrl($modalInstance, reportTemplate, ReportTemplateSrv, analyzer) {
function AdminReportTemplateDialogCtrl($modalInstance, reportTemplate, ReportTemplateSrv, AlertSrv, analyzer) {
this.reportTemplate = reportTemplate;
this.analyzer = analyzer;
this.reportTypes = ['short', 'long'];
Expand Down
25 changes: 13 additions & 12 deletions ui/app/scripts/controllers/case/CaseObservablesCtrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,18 +151,19 @@
};

$scope.initAnalyzersList = function() {
$scope.analyzersList.analyzers = AnalyzerSrv.query({
range: 'all'
});
$scope.analyzersList.active = {};
$scope.analyzersList.datatypes = {};
angular.forEach($scope.analyzersList.analyzers, function(analyzer) {
$scope.analyzersList.active[analyzer.id] = false;
});
$scope.analyzersList.selected = {};
angular.forEach($scope.analyzersList.analyzers, function(analyzer) {
$scope.analyzersList.selected[analyzer.id] = false;
});
AnalyzerSrv.query()
.then(function(analyzers) {
$scope.analyzersList.analyzers = analyzers;
$scope.analyzersList.active = {};
$scope.analyzersList.datatypes = {};
angular.forEach($scope.analyzersList.analyzers, function(analyzer) {
$scope.analyzersList.active[analyzer.id] = false;
});
$scope.analyzersList.selected = {};
angular.forEach($scope.analyzersList.analyzers, function(analyzer) {
$scope.analyzersList.selected[analyzer.id] = false;
});
});
};

$scope.initSelection($scope.selection);
Expand Down
121 changes: 56 additions & 65 deletions ui/app/scripts/controllers/case/CaseObservablesItemCtrl.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
(function() {
(function () {
'use strict';
angular.module('theHiveControllers').controller('CaseObservablesItemCtrl',
function($scope, $state, $stateParams, CaseTabsSrv, CaseArtifactSrv, PSearchSrv, AnalyzerSrv, AnalyzerInfoSrv, JobSrv, AlertSrv) {
function ($scope, $state, $stateParams, CaseTabsSrv, CaseArtifactSrv, CortexSrv, PSearchSrv, AnalyzerSrv, JobSrv, AlertSrv) {
var observableId = $stateParams.itemId,
observableName = 'observable-' + observableId;

$scope.caseId = $stateParams.caseId;
$scope.getAnalyzerInfo = AnalyzerInfoSrv;
$scope.report = {};
$scope.analyzers = {};
$scope.analyzerJobs = {};
$scope.jobs = {};
$scope.state = {
'editing': false,
'isCollapsed': false,
Expand All @@ -30,7 +31,7 @@

CaseArtifactSrv.api().get({
'artifactId': observableId
}, function(observable) {
}, function (observable) {

// Add tab
CaseTabsSrv.addTab(observableName, {
Expand All @@ -49,104 +50,94 @@
// Prepare the scope data
$scope.initScope(observable);

// Prepare the jobs data
$scope.initJobs();

}, function(response) {
}, function (response) {
AlertSrv.error('artifactDetails', response.data, response.status);
CaseTabsSrv.activateTab('observables');
});

$scope.initScope = function(data) {
$scope.artifactAnalyzers = data.analyzers;
$scope.artifact = data.artifact;
$scope.initScope = function (artifact) {
$scope.artifact = artifact;

// Get analyzers available for the observable's datatype
AnalyzerSrv.forDataType(artifact.dataType)
.then(function (analyzers) {
return $scope.analyzers = analyzers;
})
.then(function (analyzers) {
console.log(analyzers);

$scope.jobs = CortexSrv.list($scope.caseId, observableId, $scope.onJobsChange);
});

};

$scope.onJobsChange = function () {
$scope.analyzerJobs = {};

angular.forEach($scope.artifactAnalyzers, function(analyzer) {
analyzer.active = true;
$scope.analyzers[analyzer.id] = analyzer;
angular.forEach($scope.analyzers, function (analyzer, analyzerId) {
$scope.analyzerJobs[analyzerId] = [];
});

angular.forEach($scope.jobs.values, function (job) {
if (job.analyzerId in $scope.analyzerJobs) {
$scope.analyzerJobs[job.analyzerId].push(job);
} else {
$scope.analyzerJobs[job.analyzerId] = [job];

AnalyzerSrv.get(job.analyzerId)
.then(function (data) {
$scope.analyzers[data.analyzerId] = {
active: false,
showRows: false
};
},
function (response) {
AlertSrv.error('artifactDetails', response.data, response.status);
});
}
});
};

$scope.similarArtifacts = CaseArtifactSrv.api().similar({
'artifactId': observableId
});

$scope.initJobs = function() {
var jobs = PSearchSrv($scope.caseId, 'case_artifact_job', {
'filter': {
'_parent': {
'_type': 'case_artifact',
'_query': {
'_id': $scope.id
}
}
},
'pageSize': 200,
'sort': '-startDate',
'onUpdate': function() {
$scope.analyzerJobs = {};
angular.forEach($scope.analyzers, function(analyzer, analyzerId) {
$scope.analyzerJobs[analyzerId] = [];
});
angular.forEach(jobs.values, function(job) {
if (job.analyzerId in $scope.analyzerJobs) {
$scope.analyzerJobs[job.analyzerId].push(job);
} else {
$scope.analyzerJobs[job.analyzerId] = [job];

console.log('AnalyzerSrv.get(' + job.analyzerId + ')');

AnalyzerSrv.get({
'analyzerId': job.analyzerId
}, function(data) {
$scope.analyzers[data.analyzerId] = {
active: false,
showRows: false
};
}, function(response) {
AlertSrv.error('artifactDetails', response.data, response.status);
});
}
});
}
});
};

$scope.openArtifact = function(a) {
$scope.openArtifact = function (a) {
$state.go('app.case.observables-item', {
caseId: a["case"].id,
itemId: a.id
});
};

$scope.getLabels = function(selection) {
$scope.getLabels = function (selection) {
var labels = [];

angular.forEach(selection, function(label) {
angular.forEach(selection, function (label) {
labels.push(label.text);
});

return labels;
};

$scope.updateField = function(fieldName, newValue) {
$scope.updateField = function (fieldName, newValue) {
var field = {};
field[fieldName] = newValue;
console.log('update artifact field ' + fieldName + ':' + field[fieldName]);
return CaseArtifactSrv.api().update({
artifactId: $scope.artifact.id
}, field, function() {}, function(response) {
}, field, function () {}, function (response) {
AlertSrv.error('artifactDetails', response.data, response.status);
});
};

$scope.runAnalyzer = function(analyzerId) {
$scope.runAnalyzer = function (analyzerId) {
console.log('running analyzer ' + analyzerId + ' on artifact ' + $scope.artifact.id);
return JobSrv.save({
'artifactId': $scope.artifact.id
}, {
'analyzerId': analyzerId
}, function() {}, function(response) {
return CortexSrv.createJob({
cortexId: 'local',
artifactId: $scope.artifact.id,
analyzerId: analyzerId
}, function () {}, function (response) {
AlertSrv.error('artifactDetails', response.data, response.status);
});
};
Expand Down
16 changes: 12 additions & 4 deletions ui/app/scripts/directives/report.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,27 @@
.directive('report', function($templateRequest, $compile) {
function updateReport(a, b, scope) {
console.log('update report ' + scope.name);

if (!angular.isDefined(scope.content) || !angular.isDefined(scope.name)) {
console.log('no data, don\'t show anything');
scope.element.html('');
return;
}

// find report template
$templateRequest(
'/api/analyzer/' + scope.name + '/report/' + scope.status.toLowerCase() + '_' + scope.flavor, true)
//$templateRequest('/api/analyzer/' + scope.name + '/report/' + scope.status.toLowerCase() + '_' + scope.flavor, true)
$templateRequest('/api/connector/cortex/report/template/content/' + scope.name + '/' + scope.flavor, true)
.then(function(tmpl) {
scope.element.html($compile(tmpl)(scope));
}, function() {
scope.element.html('Analyzer not found !');
}, function(response) {
if(response.status === 404) {
console.log('Use default template');
return $templateRequest('/views/reports/' + scope.flavor + '.html', true)
} else {
scope.element.html('Analyzer not found !');
}
}).then(null, function(tmpl) {
scope.element.html($compile(tmpl)(scope));
});
}
return {
Expand Down
90 changes: 80 additions & 10 deletions ui/app/scripts/services/AnalyzerSrv.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,86 @@
(function() {
(function () {
'use strict';
angular.module('theHiveServices')
.factory('AnalyzerSrv', function($resource) {
return $resource('/api/connector/cortex/analyzer/:analyzerId', {}, {
query: {
method: 'GET',
url: '/api/connector/cortex/analyzer',
isArray: true
.factory('AnalyzerSrv', function ($resource, $q) {
var analyzers = null,
resource = $resource('/api/connector/cortex/analyzer/:analyzerId', {}, {
query: {
method: 'GET',
url: '/api/connector/cortex/analyzer',
isArray: true
},
get: {
isArray: true
},
update: {
method: 'PATCH'
}
});

var factory = {
clearCache: function () {
analyzers = null;
},
update: {
method: 'PATCH'
query: function () {
var deferred = $q.defer();

if (analyzers === null) {

resource.query({
range: 'all'
}, {}, function (response) {
analyzers = _.indexBy(response, 'id');

deferred.resolve(analyzers);
}, function (rejection) {
deferred.reject(rejection);
})

} else {
deferred.resolve(analyzers);
}

return deferred.promise;
},

get: function(analyzerId) {
var deferred = $q.defer();

if(analyzers !== null && analyzers[analyzerId]) {
deferred.resolve(analyzers[analyzerId]);
} else {
resource.get({
'analyzerId': analyzerId
}, function (data) {
deferred.resolve(data);
}, function (rejection) {
deferred.reject(rejection);
});
}

return deferred.promise;
},

forDataType: function(dataType) {
var deferred = $q.defer();

factory.query()
.then(function(all) {
var filtered = {};
_.each(all, function(value, key) {
if(value.dataTypeList && value.dataTypeList.indexOf(dataType) !== -1) {
filtered[key] = angular.copy(value);
filtered[key].active = true;
}
});

deferred.resolve(filtered);
});

return deferred.promise;
}
});
};

return factory;
});
})();
Loading

0 comments on commit b7c897a

Please sign in to comment.