From 4fcc49a79c1a36d003997d2a38b26a29118ba799 Mon Sep 17 00:00:00 2001 From: stevereis <stevereis93@gmail.com> Date: Wed, 26 Jan 2022 00:04:29 +0100 Subject: [PATCH] wip: handle exceptions experiment exareme --- .../engine/connectors/exareme/converters.ts | 32 +++++++++++++++---- .../experiment/experiment.interface.ts | 1 + .../connectors/exareme/main.connector.ts | 4 +-- .../connectors/exareme/transformations.ts | 7 ++-- api/src/engine/engine.module.ts | 3 +- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts index 3c32f75..517f6d5 100644 --- a/api/src/engine/connectors/exareme/converters.ts +++ b/api/src/engine/connectors/exareme/converters.ts @@ -220,8 +220,17 @@ export const dataToExperiment = ( return exp; } catch (e) { - //TODO : Add logger can't convert experiment - return undefined; + return { + id: data.uuid, + name: data.name, + status: 'error', + variables: [], + domain: data['domain'] ?? '', + datasets: [], + algorithm: { + id: 'unknown', + }, + }; } }; @@ -229,10 +238,19 @@ export const dataToAlgorithms = (data: string): Algorithm[] => { return transformToAlgorithms.evaluate(data); }; -export const dataToRaw = (result: ResultExperiment): RawResult[] => { +export const dataToRaw = ( + algo: string, + result: ResultExperiment, +): RawResult[] => { + let data = result; + + if (algo === 'CART') { + data = { ...data, type: 'application/binary-tree+json' }; + } + return [ { - rawdata: result, + rawdata: data, }, ]; }; @@ -247,7 +265,7 @@ export const dataToResult = ( case 'application/vnd.highcharts+json': return dataHighchartToResult(result as ResultChartExperiment, algo); default: - return dataToRaw(result); + return dataToRaw(algo, result); } }; @@ -259,7 +277,7 @@ export const dataJSONtoResult = ( case 'descriptive_stats': return descriptiveDataToTableResult(result); default: - return dataToRaw(result); + return dataToRaw(algo, result); } }; @@ -273,6 +291,6 @@ export const dataHighchartToResult = ( case 'area': return [dataROCToLineResult.evaluate(result) as LineChartResult]; default: - return dataToRaw(result); + return dataToRaw(algo, result); } }; diff --git a/api/src/engine/connectors/exareme/interfaces/experiment/experiment.interface.ts b/api/src/engine/connectors/exareme/interfaces/experiment/experiment.interface.ts index 7412cb0..cd5ceb4 100644 --- a/api/src/engine/connectors/exareme/interfaces/experiment/experiment.interface.ts +++ b/api/src/engine/connectors/exareme/interfaces/experiment/experiment.interface.ts @@ -5,6 +5,7 @@ export interface ExperimentData { uuid?: string; status?: string; createdBy?: string; + created: string; shared?: boolean; viewed?: boolean; result?: ResultExperiment[]; diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts index ffd1daf..5733366 100644 --- a/api/src/engine/connectors/exareme/main.connector.ts +++ b/api/src/engine/connectors/exareme/main.connector.ts @@ -74,9 +74,7 @@ export default class ExaremeService implements IEngineService { return { ...resultAPI.data, - experiments: - resultAPI.data.experiments?.map(dataToExperiment).filter((r) => r) ?? - [], + experiments: resultAPI.data.experiments?.map(dataToExperiment) ?? [], }; } diff --git a/api/src/engine/connectors/exareme/transformations.ts b/api/src/engine/connectors/exareme/transformations.ts index 439f256..2dcc462 100644 --- a/api/src/engine/connectors/exareme/transformations.ts +++ b/api/src/engine/connectors/exareme/transformations.ts @@ -31,10 +31,9 @@ export const transformToAlgorithms = jsonata(` export const transformToExperiment = jsonata(` ( $params := ["y", "pathology", "dataset", "filter", "x"]; - $toArray := function($x) { $type($x) = 'array' ? $x : [$x]}; - $convDate := function($v) { $type($v) = 'string' ? $toMillis($v) : $v }; + $rp := function($v) {$replace($v, /(\\+|\\*|-)/, ',')}; { "name": name, @@ -47,8 +46,8 @@ export const transformToExperiment = jsonata(` "shared": shared, "updateAt": $convDate(updated), "domain": algorithm.parameters[name = "pathology"].value, - "variables": $split(algorithm.parameters[name = "y"].value, ','), - "coVariables": $toArray($split(algorithm.parameters[name = "x"].value, ',')), + "variables": $split($rp(algorithm.parameters[name = "y"].value), ','), + "coVariables": $toArray($split($rp(algorithm.parameters[name = "x"].value), ',')), "filter": algorithm.parameters[name = "filter"].value, "datasets": $split(algorithm.parameters[name = "dataset"].value, ','), "algorithm": { diff --git a/api/src/engine/engine.module.ts b/api/src/engine/engine.module.ts index 4844258..6f8d33c 100644 --- a/api/src/engine/engine.module.ts +++ b/api/src/engine/engine.module.ts @@ -53,10 +53,11 @@ export class EngineModule { const engine = new service.default(options, httpService, req); return engine; - } catch { + } catch (e) { this.logger.error( `There is a problem with the connector '${options.type}'`, ); + this.logger.verbose(e); process.exit(); // We can't continue without an engine, shutdown the process... } } -- GitLab