diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts index 3c32f756990463f4e7256af71b4bfc9c424160b8..517f6d598a704d3e6de736c8653b58a56c00e4fc 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 7412cb0560c9eda88fe61dd4ebbf8128c94e2c62..cd5ceb45a4539812ec15cb94755f2302bb99de63 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 ffd1daf11b65456986db78aa5a7ed8d5d6d1bb20..5733366f9125337a555ff7f7df7faad52dae6627 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 439f2560f505f1ed4ad477a9f8fb688e7c6b77b9..2dcc462c495614b05cb763225ac75d1804a014c5 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 48442588a8d1a2c5120e99fa15d60e7da3c29739..6f8d33c6a63b40a9ac2c07a5bf3983ae0e148775 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... } }