chg: [module] Better error handling

pull/6411/head
Jakub Onderka 2020-10-18 15:36:03 +02:00
parent 2130aa2c6f
commit c346066cf9
3 changed files with 42 additions and 48 deletions

View File

@ -350,11 +350,7 @@ class AttachmentScan extends AppModel
'config' => $moduleConfig,
];
$exception = null;
$results = $this->moduleModel()->queryModuleServer('/query', $data, false, 'Enrichment', $exception);
if (!is_array($results)) {
throw new Exception($results, 0, $exception);
}
$results = $this->moduleModel()->queryModuleServer('/query', $data, false, 'Enrichment', true);
if (isset($results['error'])) {
throw new Exception("{$this->attachmentScanModuleName} module returns error: " . $results['error']);
}
@ -409,22 +405,18 @@ class AttachmentScan extends AppModel
*/
private function loadModuleInfo($moduleName)
{
$exception = null;
$modules = $this->moduleModel()->getModules(false, 'Enrichment', $exception);
if (!is_array($modules)) {
throw new Exception($modules, 0, $exception);
}
$modules = $this->moduleModel()->getModules('Enrichment', true);
$module = null;
foreach ($modules['modules'] as $temp) {
if ($temp['name'] === $moduleName) {
foreach ($modules as $temp) {
if (strtolower($temp['name']) === strtolower($moduleName)) {
$module = $temp;
break;
}
}
if (!$module) {
throw new Exception("Module $moduleName doesn't exists.");
throw new Exception("Module $moduleName not found.");
}
if (!in_array('expansion', $module['meta']['module-type'])) {

View File

@ -82,27 +82,28 @@ class Module extends AppModel
return true;
}
public function getModules($moduleFamily = 'Enrichment', &$exception = false)
/**
* @param string $moduleFamily
* @param bool $throwException
* @return array[]|string
* @throws JsonException
*/
public function getModules($moduleFamily = 'Enrichment', $throwException = false)
{
$modules = $this->queryModuleServer('/modules', false, false, $moduleFamily, $exception);
if (!$modules) {
$modules = $this->queryModuleServer('/modules', false, false, $moduleFamily, $throwException);
if ($modules === false) { // not possible when $throwException is true
return 'Module service not reachable.';
}
if (!empty($modules)) {
$result = array('modules' => $modules);
return $result;
} else {
return 'The module service reports that it found no modules.';
}
return $modules;
}
public function getEnabledModules($user, $type = false, $moduleFamily = 'Enrichment')
{
$modules = $this->getModules($moduleFamily);
if (is_array($modules)) {
foreach ($modules['modules'] as $k => $module) {
foreach ($modules as $k => $module) {
if (!Configure::read('Plugin.' . $moduleFamily . '_' . $module['name'] . '_enabled') || ($type && !in_array(strtolower($type), $module['meta']['module-type']))) {
unset($modules['modules'][$k]);
unset($modules[$k]);
continue;
}
if (
@ -110,38 +111,33 @@ class Module extends AppModel
Configure::read('Plugin.' . $moduleFamily . '_' . $module['name'] . '_restrict') &&
Configure::read('Plugin.' . $moduleFamily . '_' . $module['name'] . '_restrict') != $user['org_id']
) {
unset($modules['modules'][$k]);
unset($modules[$k]);
}
}
} else {
return 'The modules system reports that it found no suitable modules.';
}
if (!isset($modules) || empty($modules)) {
$modules = array();
if (empty($modules)) {
return [];
}
if (isset($modules['modules']) && !empty($modules['modules'])) {
$modules['modules'] = array_values($modules['modules']);
}
if (!is_array($modules)) {
return array();
}
foreach ($modules['modules'] as $temp) {
$output = ['modules' => array_values($modules)];
foreach ($modules as $temp) {
if (isset($temp['meta']['module-type']) && in_array('import', $temp['meta']['module-type'])) {
$modules['Import'] = $temp['name'];
$output['Import'] = $temp['name'];
} elseif (isset($temp['meta']['module-type']) && in_array('export', $temp['meta']['module-type'])) {
$modules['Export'] = $temp['name'];
$output['Export'] = $temp['name'];
} else {
foreach ($temp['mispattributes']['input'] as $input) {
if (!isset($temp['meta']['module-type']) || (in_array('expansion', $temp['meta']['module-type']) || in_array('cortex', $temp['meta']['module-type']))) {
$modules['types'][$input][] = $temp['name'];
$output['types'][$input][] = $temp['name'];
}
if (isset($temp['meta']['module-type']) && in_array('hover', $temp['meta']['module-type'])) {
$modules['hover_type'][$input][] = $temp['name'];
$output['hover_type'][$input][] = $temp['name'];
}
}
}
}
return $modules;
return $output;
}
/**
@ -203,13 +199,17 @@ class Module extends AppModel
* @param array|false $post
* @param bool $hover
* @param string $moduleFamily
* @param Exception|false $exception
* @param bool $throwException
* @return array|false
* @throws JsonException
*/
public function queryModuleServer($uri, $post = false, $hover = false, $moduleFamily = 'Enrichment', &$exception = false)
public function queryModuleServer($uri, $post = false, $hover = false, $moduleFamily = 'Enrichment', $throwException = false)
{
$url = $this->__getModuleServer($moduleFamily);
if (!$url) {
if ($throwException) {
throw new Exception("Module type $moduleFamily is not enabled.");
}
return false;
}
App::uses('HttpSocket', 'Network/Http');
@ -264,8 +264,10 @@ class Module extends AppModel
}
return $this->jsonDecode($response->body);
} catch (Exception $e) {
if ($throwException) {
throw $e;
}
$this->logException('Failed to query module ' . $moduleFamily, $e);
$exception = $e;
return false;
}
}
@ -278,8 +280,8 @@ class Module extends AppModel
{
$modules = $this->getModules($moduleFamily);
$result = array();
if (!empty($modules['modules'])) {
foreach ($modules['modules'] as $module) {
if (!empty($modules)) {
foreach ($modules as $module) {
if (array_intersect($this->__validTypes[$moduleFamily], $module['meta']['module-type'])) {
$moduleSettings = [
array('name' => 'enabled', 'type' => 'boolean'),

View File

@ -5230,10 +5230,10 @@ class Server extends AppModel
$this->Module = ClassRegistry::init('Module');
$diagnostic_errors++;
if (Configure::read('Plugin.' . $type . '_services_enable')) {
$exception = false;
$result = $this->Module->getModules($type, $exception);
if ($exception) {
return $exception->getMessage();
try {
$result = $this->Module->getModules($type, true);
} catch (Exception $e) {
return $e->getMessage();
}
if (empty($result)) {
return 2;