mirror of https://github.com/MISP/MISP
chg: [internal] Faster loading od Distribution graph
parent
c89df1d39d
commit
6770ba8222
|
@ -4357,16 +4357,17 @@ class EventsController extends AppController
|
|||
return new CakeResponse(array('body' => json_encode($json), 'status' => 200, 'type' => 'json'));
|
||||
}
|
||||
|
||||
private function genDistributionGraph($id, $type = 'event', $extended = 0) {
|
||||
private function genDistributionGraph($id, $type = 'event', $extended = 0)
|
||||
{
|
||||
$validTools = array('event');
|
||||
if (!in_array($type, $validTools)) {
|
||||
throw new MethodNotAllowedException(__('Invalid type.'));
|
||||
}
|
||||
$this->loadModel('Server');
|
||||
$this->loadModel('Organisation');
|
||||
|
||||
App::uses('DistributionGraphTool', 'Tools');
|
||||
$grapher = new DistributionGraphTool();
|
||||
|
||||
$this->loadModel('Server');
|
||||
$servers = $this->Server->find('list', array(
|
||||
'fields' => array('name'),
|
||||
));
|
||||
|
|
|
@ -3,9 +3,12 @@
|
|||
{
|
||||
private $__user = false;
|
||||
private $__json = array();
|
||||
private $__eventModel = false;
|
||||
/** @var Event */
|
||||
private $__eventModel;
|
||||
/** @var Organisation */
|
||||
private $__organisationModel;
|
||||
|
||||
public function construct($eventModel, $servers, $user, $extended_view=0)
|
||||
public function construct(Event $eventModel, array $servers, array $user, $extended_view=0)
|
||||
{
|
||||
$this->__eventModel = $eventModel;
|
||||
$this->__serverList = $servers;
|
||||
|
@ -27,11 +30,6 @@
|
|||
return true;
|
||||
}
|
||||
|
||||
private function __extract_sharing_groups_names($sharingArray)
|
||||
{
|
||||
return $sharingArray['name'];
|
||||
}
|
||||
|
||||
private function __fetchAndAddDistributionInfo($elem)
|
||||
{
|
||||
$distributionLevel = $elem['distribution'];
|
||||
|
@ -41,7 +39,7 @@
|
|||
$this->__fetchAndAddDistributionInfo($elem);
|
||||
} elseif ($distributionLevel == 4) { // sharing group
|
||||
if (isset($elem['SharingGroup'])) {
|
||||
$sg_name = $this->__extract_sharing_groups_names($elem['SharingGroup']);
|
||||
$sg_name = $elem['SharingGroup']['name'];
|
||||
$this->__addAdditionalDistributionInfo($distributionLevel, $sg_name);
|
||||
} elseif ($this->__eventDistribution == 4) { // event is distributed for sg
|
||||
$sg_name = $this->__eventSharingGroupName;
|
||||
|
@ -98,22 +96,35 @@
|
|||
$this->__addAdditionalDistributionInfo(0, $thisOrg); // add current community
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch event containing just 'Attribute', 'Object', 'SharingGroup' and 'distribution'
|
||||
* @param int $id
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
private function __get_event($id)
|
||||
{
|
||||
$fullevent = $this->__eventModel->fetchEvent($this->__user, array('eventid' => $id, 'flatten' => 0, 'includeTagRelations' => 1, 'extended' => $this->__extended_view));
|
||||
$fullevent = $this->__eventModel->fetchEvent($this->__user, array(
|
||||
'eventid' => $id,
|
||||
'flatten' => 0,
|
||||
'noShadowAttributes' => true,
|
||||
'noEventReports' => true,
|
||||
'noSightings' => true,
|
||||
'extended' => $this->__extended_view,
|
||||
));
|
||||
$event = array();
|
||||
if (empty($fullevent)) {
|
||||
return $event;
|
||||
}
|
||||
|
||||
$fullevent = $fullevent[0];
|
||||
if (!empty($fullevent['Object'])) {
|
||||
if (isset($fullevent['Object'])) {
|
||||
$event['Object'] = $fullevent['Object'];
|
||||
} else {
|
||||
$event['Object'] = array();
|
||||
}
|
||||
|
||||
if (!empty($fullevent['Attribute'])) {
|
||||
if (isset($fullevent['Attribute'])) {
|
||||
$event['Attribute'] = $fullevent['Attribute'];
|
||||
} else {
|
||||
$event['Attribute'] = array();
|
||||
|
@ -149,42 +160,29 @@
|
|||
return $this->__json;
|
||||
}
|
||||
$event = $this->__get_event($id);
|
||||
if (empty($event)) {
|
||||
return $this->__json;
|
||||
}
|
||||
|
||||
$eventDist = $event['distribution'];
|
||||
$eventSGName = $event['SharingGroupName'];
|
||||
$this->__eventDistribution = $eventDist;
|
||||
$this->__eventSharingGroupName = $eventSGName;
|
||||
|
||||
if (empty($event)) {
|
||||
return $this->__json;
|
||||
}
|
||||
|
||||
if (!empty($event['Object'])) {
|
||||
$object = $event['Object'];
|
||||
} else {
|
||||
$object = array();
|
||||
}
|
||||
|
||||
if (!empty($event['Attribute'])) {
|
||||
$attribute = $event['Attribute'];
|
||||
} else {
|
||||
$attribute = array();
|
||||
}
|
||||
|
||||
// extract distribution
|
||||
foreach ($attribute as $attr) {
|
||||
foreach ($event['Attribute'] as $attr) {
|
||||
$distri = $attr['distribution'];
|
||||
$this->__json['event'][$distri] += 1;
|
||||
$this->__json['attribute'][$distri] += 1;
|
||||
$this->__fetchAndAddDistributionInfo($attr);
|
||||
}
|
||||
|
||||
foreach ($object as $obj) {
|
||||
foreach ($event['Object'] as $obj) {
|
||||
$distri = $obj['distribution'];
|
||||
$this->__json['event'][$distri] += 1;
|
||||
$this->__json['object'][$distri] += 1;
|
||||
$this->__fetchAndAddDistributionInfo($obj);
|
||||
|
||||
$added_value = array();
|
||||
if (!empty($obj['Attribute'])) {
|
||||
foreach ($obj['Attribute'] as $objAttr) {
|
||||
$distri = $objAttr['distribution'];
|
||||
|
|
Loading…
Reference in New Issue