From 57d5a00b8571abf6f002ba1a355c84eba2379a5e Mon Sep 17 00:00:00 2001 From: Alfredo Oliviero Date: Thu, 10 Oct 2024 17:02:03 +0200 Subject: [PATCH] updated source --- .../input_ccpimage_bash.png | Bin .../input_ccpimage_python.png | Bin .../methods_development/input_checklist.png} | Bin .../input_credentials.png} | Bin .../input_enum_contenttype.png | Bin .../imgs/methods_development}/input_file.png | Bin .../methods_development}/input_repository.png | Bin .../input_secret_credentials.png | Bin .../imgs/methods_development/input_url.png | Bin 0 -> 9986 bytes .../workspace_input_file.png | Bin .../workspace_select_file.png | Bin .../imgs/quickstart}/analytics_engine_ccp.png | Bin .../quickstart}/analytics_engine_importer.png | Bin .../quickstart}/ccp_execution_monitor.png | Bin .../imgs/quickstart}/ccp_form_execution.png | Bin .../quickstart}/ccp_form_execution_empty.png | Bin .../quickstart}/cpp_execution_options.png | Bin .../_static/imgs/quickstart/credentials.png | Bin 0 -> 21400 bytes .../quickstart}/edit_button_annotation.png | Bin .../imgs/quickstart}/edit_button_plus.png | Bin .../imgs/quickstart}/edit_button_trash.png | Bin .../quickstart}/edit_input_enumerated.png | Bin .../imgs/quickstart}/edit_new_input.png | Bin .../imgs/quickstart}/edit_output.png | Bin .../imgs/quickstart}/edit_script.png | Bin .../quickstart}/method_button_archive.png | Bin .../quickstart}/method_button_download.png | Bin .../imgs/quickstart}/method_button_edit.png | Bin .../imgs/quickstart}/method_button_play.png | Bin .../imgs/quickstart}/method_button_share.png | Bin .../imgs/quickstart}/method_button_shared.png | Bin .../imgs/quickstart}/method_buttons.png | Bin .../imgs/quickstart}/method_example.png | Bin .../imgs/quickstart}/method_shared.png | Bin .../imgs/quickstart}/methods_list.png | Bin .../imgs/quickstart}/script_deploy_clone.png | Bin source/{introduction.rst => architecture.md} | 44 ++----- source/developermanual/.DS_Store | Bin 10244 -> 12292 bytes source/index.rst | 2 + source/introduction.md | 18 +++ .../ccp_methods => methods_ccp}/.DS_Store | Bin ...gy Named Entity Recognizer-1.0.0 copy.json | 0 ...aeology Named Entity Recognizer-1.0.0.json | 0 ...drochronology Entity Recognizer-1.0.0.json | 0 ...aeology Named Entity Recognizer-1.0.0.json | 0 ...drochronology Entity Recognizer-1.0.0.json | 0 ...aeology Named Entity Recognizer-1.0.0.json | 0 ...drochronology Entity Recognizer-1.0.0.json | 0 ...d Annie Named Entity Recognizer-1.0.0.json | 0 ...ate Cloud Brexit Tweet Analysis-1.0.0.json | 0 ...loud Chemical Entity Recognizer-1.0.0.json | 0 ...vid19 Misinformation Classifier-1.0.0.json | 0 ...ovid19 Vaccine Text Categoriser-1.0.0.json | 0 ... Cloud Hate And Abuse Detection-1.0.0.json | 0 ...d Hyperpartisan News Classifier-1.0.0.json | 0 ...easurement Expression Annotator-1.0.0.json | 0 ...te Cloud Multilingual Image Ocr-1.0.0.json | 0 ...lingual News Similarity Service-1.0.0.json | 0 ...d Offensive Language Classifier-1.0.0.json | 0 ...e Cloud Political Abuse Monitor-1.0.0.json | 0 ...loud Rumour Veracity Classifier-1.0.0.json | 0 ...d Stance Classification English-1.0.0.json | 0 ...nce Classification Multilingual-1.0.0.json | 0 ...Cloud Toxic Language Classifier-1.0.0.json | 0 ...ed Entity Recognizer For Tweets-1.0.0.json | 0 .../Gate Cloud Url Domain Analysis-1.0.0.json | 0 ...ian Automatic Speech Recognizer-1.0.0.json | 0 ...S get Species (Marco's version)-1.0.5.json | 0 .../SimpleImageClassifier-0.0.1.json | 0 .../index.rst | 0 .../02.1_basic_docker_image.md} | 19 ++- .../02.2_basic_python.md} | 17 +-- .../03_1_input_file.md} | 13 +- source/methods_development/03_2_input_urls.md | 62 +++++++++ .../03_3_input_file_workspace_public.md} | 8 +- .../03_4_credentials.md} | 6 +- .../03_5_input_file_workspace_private.md | 63 +++++++++ .../03_6_input_checklist.md} | 4 +- source/methods_development/index.rst | 8 ++ source/methods_examples/.DS_Store | Bin 0 -> 6148 bytes .../methods_examples/Bash Example-1.0.0.json | 0 .../Python example-1.0.0.json | 11 -- .../WordCloud Urls-1.0.0.json | 122 ++++++++++++++++++ source/methods_examples/WordCloud-1.0.0.json | 113 ++++++++++++++++ .../index.rst | 0 .../worldcloud/alice_mask.png | Bin 0 -> 7339 bytes source/methods_examples/worldcloud/parrot.jpg | Bin 0 -> 54877 bytes source/quickstart/.DS_Store | Bin 0 -> 8196 bytes source/quickstart/01.0_analytics_engine.md | 6 +- source/quickstart/01.1_methods_list.md | 18 +-- source/quickstart/01.2_engine_ccp.md | 88 ++----------- source/quickstart/01.3_method_execution.md | 38 ++++++ source/quickstart/01.4_execution_monitor.md | 33 +++++ ...1.3_engine_edit.md => 01.5_engine_edit.md} | 48 ++++--- ...{10_method_json.md => 01.6_method_json.md} | 0 source/quickstart/35_input_file_workspace.md | 6 - .../46_remote_api_auth_credentials.md | 47 ------- source/quickstart/index.rst | 2 +- source/usermanual/04_methods.md | 63 --------- source/usermanual/05_howtos.md | 63 +++++++++ .../{05_executions.md => 07_executions.md} | 0 .../{06_widgets.md => 07_widgets.md} | 0 .../{07_rest_api.md => 08_rest_api.md} | 0 103 files changed, 609 insertions(+), 313 deletions(-) rename source/{quickstart/imgs => _static/imgs/methods_development}/input_ccpimage_bash.png (100%) rename source/{quickstart/imgs => _static/imgs/methods_development}/input_ccpimage_python.png (100%) rename source/{quickstart/imgs/checklist.png => _static/imgs/methods_development/input_checklist.png} (100%) rename source/{quickstart/imgs/credentials.png => _static/imgs/methods_development/input_credentials.png} (100%) rename source/{quickstart/imgs => _static/imgs/methods_development}/input_enum_contenttype.png (100%) rename source/{quickstart/imgs => _static/imgs/methods_development}/input_file.png (100%) rename source/{quickstart/imgs => _static/imgs/methods_development}/input_repository.png (100%) rename source/{quickstart/imgs => _static/imgs/methods_development}/input_secret_credentials.png (100%) create mode 100644 source/_static/imgs/methods_development/input_url.png rename source/{quickstart/imgs => _static/imgs/methods_development}/workspace_input_file.png (100%) rename source/{quickstart/imgs => _static/imgs/methods_development}/workspace_select_file.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/analytics_engine_ccp.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/analytics_engine_importer.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/ccp_execution_monitor.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/ccp_form_execution.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/ccp_form_execution_empty.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/cpp_execution_options.png (100%) create mode 100644 source/_static/imgs/quickstart/credentials.png rename source/{quickstart/imgs => _static/imgs/quickstart}/edit_button_annotation.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/edit_button_plus.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/edit_button_trash.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/edit_input_enumerated.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/edit_new_input.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/edit_output.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/edit_script.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_button_archive.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_button_download.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_button_edit.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_button_play.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_button_share.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_button_shared.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_buttons.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_example.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/method_shared.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/methods_list.png (100%) rename source/{quickstart/imgs => _static/imgs/quickstart}/script_deploy_clone.png (100%) rename source/{introduction.rst => architecture.md} (59%) create mode 100644 source/introduction.md rename source/{quickstart/ccp_methods => methods_ccp}/.DS_Store (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0 copy.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Ariadne Dutch Dendrochronology Entity Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Ariadne English Archaeology Named Entity Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Ariadne English Dendrochronology Entity Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Ariadne Swedish Archaeology Named Entity Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Ariadne Swedish Dendrochronology Entity Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Annie Named Entity Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Brexit Tweet Analysis-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Chemical Entity Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Covid19 Misinformation Classifier-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Covid19 Vaccine Text Categoriser-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Hate And Abuse Detection-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Hyperpartisan News Classifier-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Measurement Expression Annotator-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Multilingual Image Ocr-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Multilingual News Similarity Service-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Offensive Language Classifier-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Political Abuse Monitor-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Rumour Veracity Classifier-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Stance Classification English-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Stance Classification Multilingual-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Toxic Language Classifier-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Twitie Named Entity Recognizer For Tweets-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Gate Cloud Url Domain Analysis-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/Kaldi Italian Automatic Speech Recognizer-1.0.0.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/OBIS get Species (Marco's version)-1.0.5.json (100%) rename source/{quickstart/ccp_methods => methods_ccp}/SimpleImageClassifier-0.0.1.json (100%) rename source/{developermanual/methods_examples => methods_ccp}/index.rst (100%) rename source/{quickstart/20_basic_docker_image.md => methods_development/02.1_basic_docker_image.md} (91%) rename source/{quickstart/21_basic_python.md => methods_development/02.2_basic_python.md} (95%) rename source/{quickstart/30_input_file.md => methods_development/03_1_input_file.md} (83%) create mode 100644 source/methods_development/03_2_input_urls.md rename source/{quickstart/workspace_file.md => methods_development/03_3_input_file_workspace_public.md} (86%) rename source/{quickstart/45_credentials.md => methods_development/03_4_credentials.md} (85%) create mode 100644 source/methods_development/03_5_input_file_workspace_private.md rename source/{quickstart/40_input_checklist.md => methods_development/03_6_input_checklist.md} (94%) create mode 100644 source/methods_development/index.rst create mode 100644 source/methods_examples/.DS_Store rename source/{developermanual => }/methods_examples/Bash Example-1.0.0.json (100%) rename source/{developermanual => }/methods_examples/Python example-1.0.0.json (83%) create mode 100644 source/methods_examples/WordCloud Urls-1.0.0.json create mode 100644 source/methods_examples/WordCloud-1.0.0.json rename source/{quickstart/ccp_methods => methods_examples}/index.rst (100%) create mode 100644 source/methods_examples/worldcloud/alice_mask.png create mode 100644 source/methods_examples/worldcloud/parrot.jpg create mode 100644 source/quickstart/.DS_Store create mode 100644 source/quickstart/01.3_method_execution.md create mode 100644 source/quickstart/01.4_execution_monitor.md rename source/quickstart/{01.3_engine_edit.md => 01.5_engine_edit.md} (85%) rename source/quickstart/{10_method_json.md => 01.6_method_json.md} (100%) delete mode 100644 source/quickstart/35_input_file_workspace.md delete mode 100644 source/quickstart/46_remote_api_auth_credentials.md create mode 100644 source/usermanual/05_howtos.md rename source/usermanual/{05_executions.md => 07_executions.md} (100%) rename source/usermanual/{06_widgets.md => 07_widgets.md} (100%) rename source/usermanual/{07_rest_api.md => 08_rest_api.md} (100%) diff --git a/source/quickstart/imgs/input_ccpimage_bash.png b/source/_static/imgs/methods_development/input_ccpimage_bash.png similarity index 100% rename from source/quickstart/imgs/input_ccpimage_bash.png rename to source/_static/imgs/methods_development/input_ccpimage_bash.png diff --git a/source/quickstart/imgs/input_ccpimage_python.png b/source/_static/imgs/methods_development/input_ccpimage_python.png similarity index 100% rename from source/quickstart/imgs/input_ccpimage_python.png rename to source/_static/imgs/methods_development/input_ccpimage_python.png diff --git a/source/quickstart/imgs/checklist.png b/source/_static/imgs/methods_development/input_checklist.png similarity index 100% rename from source/quickstart/imgs/checklist.png rename to source/_static/imgs/methods_development/input_checklist.png diff --git a/source/quickstart/imgs/credentials.png b/source/_static/imgs/methods_development/input_credentials.png similarity index 100% rename from source/quickstart/imgs/credentials.png rename to source/_static/imgs/methods_development/input_credentials.png diff --git a/source/quickstart/imgs/input_enum_contenttype.png b/source/_static/imgs/methods_development/input_enum_contenttype.png similarity index 100% rename from source/quickstart/imgs/input_enum_contenttype.png rename to source/_static/imgs/methods_development/input_enum_contenttype.png diff --git a/source/quickstart/imgs/input_file.png b/source/_static/imgs/methods_development/input_file.png similarity index 100% rename from source/quickstart/imgs/input_file.png rename to source/_static/imgs/methods_development/input_file.png diff --git a/source/quickstart/imgs/input_repository.png b/source/_static/imgs/methods_development/input_repository.png similarity index 100% rename from source/quickstart/imgs/input_repository.png rename to source/_static/imgs/methods_development/input_repository.png diff --git a/source/quickstart/imgs/input_secret_credentials.png b/source/_static/imgs/methods_development/input_secret_credentials.png similarity index 100% rename from source/quickstart/imgs/input_secret_credentials.png rename to source/_static/imgs/methods_development/input_secret_credentials.png diff --git a/source/_static/imgs/methods_development/input_url.png b/source/_static/imgs/methods_development/input_url.png new file mode 100644 index 0000000000000000000000000000000000000000..7603ae8a5928957c3961c61b73c6bbd674434d24 GIT binary patch literal 9986 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 literal 0 HcmV?d00001 diff --git a/source/quickstart/imgs/workspace_input_file.png b/source/_static/imgs/methods_development/workspace_input_file.png similarity index 100% rename from source/quickstart/imgs/workspace_input_file.png rename to source/_static/imgs/methods_development/workspace_input_file.png diff --git a/source/quickstart/imgs/workspace_select_file.png b/source/_static/imgs/methods_development/workspace_select_file.png similarity index 100% rename from source/quickstart/imgs/workspace_select_file.png rename to source/_static/imgs/methods_development/workspace_select_file.png diff --git a/source/quickstart/imgs/analytics_engine_ccp.png b/source/_static/imgs/quickstart/analytics_engine_ccp.png similarity index 100% rename from source/quickstart/imgs/analytics_engine_ccp.png rename to source/_static/imgs/quickstart/analytics_engine_ccp.png diff --git a/source/quickstart/imgs/analytics_engine_importer.png b/source/_static/imgs/quickstart/analytics_engine_importer.png similarity index 100% rename from source/quickstart/imgs/analytics_engine_importer.png rename to source/_static/imgs/quickstart/analytics_engine_importer.png diff --git a/source/quickstart/imgs/ccp_execution_monitor.png b/source/_static/imgs/quickstart/ccp_execution_monitor.png similarity index 100% rename from source/quickstart/imgs/ccp_execution_monitor.png rename to source/_static/imgs/quickstart/ccp_execution_monitor.png diff --git a/source/quickstart/imgs/ccp_form_execution.png b/source/_static/imgs/quickstart/ccp_form_execution.png similarity index 100% rename from source/quickstart/imgs/ccp_form_execution.png rename to source/_static/imgs/quickstart/ccp_form_execution.png diff --git a/source/quickstart/imgs/ccp_form_execution_empty.png b/source/_static/imgs/quickstart/ccp_form_execution_empty.png similarity index 100% rename from source/quickstart/imgs/ccp_form_execution_empty.png rename to source/_static/imgs/quickstart/ccp_form_execution_empty.png diff --git a/source/quickstart/imgs/cpp_execution_options.png b/source/_static/imgs/quickstart/cpp_execution_options.png similarity index 100% rename from source/quickstart/imgs/cpp_execution_options.png rename to source/_static/imgs/quickstart/cpp_execution_options.png diff --git a/source/_static/imgs/quickstart/credentials.png b/source/_static/imgs/quickstart/credentials.png new file mode 100644 index 0000000000000000000000000000000000000000..83b58a237ae102942fc53c18c2d1d4e814123abb GIT binary patch literal 21400 zcmeIaXH-+$7B-9^q97nDy(&#bh=72A6s33RAWfv#(0eg@0Ff%aBfW&)Yfw7Uq=t?Z z=?OIi2<6+Jd+s@Y*W5qvuXnuTGDfmjvi6#LuG!X{&srh)g|ZAWAq^o84i2%LtfU$a z4n7OeKDl}Yc&{^&3&6p-WMCyB@j^~Qg6V}5*xbt23~{Q6u90}VcN-F*dei#Cf4THl=8(d`Si(cs69Lo=_8gu4-q`>dSItC3eeieI6* z|A%h&4Jo=Qv11+P^md^qHO9uoR|p-}%-+(G-11zsiuwHL!z0JrWNM0Y$LO=CgH1SW z%8*03K|N2Lf$K~Y+n#Mp2eItm3%|N5T+|n;?N35YRO1^Th<8D5fcD?`U(MGJ@PJ-b z70W$#|7?c1B~xSC&QhmZ3&{I}nU0*fk`m4XpnVnR@+BG^e4up+c!^%3{ktuF=^hT= zpWox+-~?IWT>k4GW#IbrFA{kD9P_U$UQ{3s0r2T2@bdVC`|rE)Sw7+YyNz=K^x-^H zmynYKuIeUEW@h%zmSC5lPS_yu#We?6U1uB|3f7;mOLA%~I{ijd3o0psa*P*|3{pV0kXEP@WupRJB7tw$8_1EBEJO3K^6!dfIzlh>r za{lvMK+vLuPeFexO_XrW;?pspM>;D>6%F7DSlOR{zQFrE;Pvwgym(9A7jbI?S1&oq zXBr-twr1U{ZcDXxF5JC$^E%5VvM*)GB%Mbb6`Ng22B9IBD9N}X_wL@5lw@HiCws

eD3=a>9rD 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 i&h-C+=RqzAX8q>mK78z31h(^V and uses a novel approach based on containerization, REST APIs and Json. - -Several fields of ICT have experienced a major evolution during the last decade and many new advances, such as the widespread adoption of microservice development patterns. This resulted in substantial improvements in terms of interoperability and composability of software artefacts. -The vast landscape of new opportunities, in addition to the greatly increased requirements and expectations, have been the drivers for the design and development of a new Cloud Computing Platform that represents the result of a global rethink of the Data Miner. - -Architecture ------------- +# Architecture +## CCP logical vision of architecture A logical vision of the CCP architecutre is depicted in the following Figure. -.. figure:: images/logicalvisionarchitecture.png - :alt: Logical vision of architecture - - The CCP logical vision of architecture +![The CCP logical vision of architecture](images/logicalvisionarchitecture.png) In this vision, CCP is a layered set of components starting at the bottom with the **Infrastructure** layer, encompassing components such as hardware, Virtual Machines, container based clusters, storage facilities and networks. -The **Runtimes** layer offers a set of prebuilt, preconfigured execution environments such as containers or Virtual Machine images. +The **Runtimes** layer offers a set of prebuilt, preconfigured execution environments such as containers or Virtual Machine images. The **Method** layer contains specification of computational methods that can be anything, from social mining algorithms to AI classifiers and data harvesters. Data scientists with development skills are encouraged to develop new Methods or cloning existing ones, being their responsibility to choose compatible runtimes or propose new ones to be integrated. Tools for sharing the Methods with communities such as Virtual Research Environments are made available at this layer. The overall user community works at the **Workbench** layer, which is the abstraction of overarching tools that are able to directly use the available Methods, compose them into workflows and integrate them into visual tools, such as Jupyter Notebook, R scripts, Knime workflows. -**Experimentation** is the term that defines the activity of configuring new Runtimes, defining new Methods and using them in the Workbench. +**Experimentation** is the term that defines the activity of configuring new Runtimes, defining new Methods and using them in the Workbench. In the opposite direction, **Consolidation** represents the possibility to transform dynamic objects into more static ones in order to improve reusability, portability and overall performance. For instance, workflows or combinations of Methods could be transformed into Methods themselves or even Methods into Runtimes. +## CCP logical architecture + The logical architecture presented in Figure 9 shows the natively distributed nature of CCP. -.. figure:: images/logicalarchitecture.png - :alt: Logical architecture - - The CCP logical architecture +![The CCP logical architecture](images/logicalarchitecture.png) Starting from the top, **Infrastructures** (as computing resources that will host CCP method executions, i.e. anything from simple laptops up to clusters of server Hosts) can be connected as runtime execution environments by installing a Controller component. Within an infrastructure, Hosts are computational nodes like physical or virtual servers. They are delegated to execute methods. @@ -61,4 +35,4 @@ Because many of the operations involved are lengthy and asynchronous, CCP includ All complex processes involved in CCP are implemented as workflows inside a Workflow Orchestrator which, in addition to granting a high level of flexibility and customisation, allows for a centralised endpoint to monitor progress and check for errors that may occur. -At the basis of all interactions among external actors, such as users and Controllers, a strong authentication and authorisation mechanism is enforced by an Identity and Access Management software (IAM). This enables it to address security requirements as well as to implement ownership attribution and auditing. \ No newline at end of file +At the basis of all interactions among external actors, such as users and Controllers, a strong authentication and authorisation mechanism is enforced by an Identity and Access Management software (IAM). This enables it to address security requirements as well as to implement ownership attribution and auditing. diff --git a/source/developermanual/.DS_Store b/source/developermanual/.DS_Store index c0478935412f72f32adc033e81137e04c04101fe..64efb4bf6fe301401efbae9a5a074058113bd861 100644 GIT binary patch delta 1433 zcmbW1T}&KR6vxkhmW4Y5l*`xdPGMMR`6`7%sVzcLuoPNsEB)ZRjdYh8WpvqHc7~<3 zF`Fn4niOlD#Kf3Xtq+ZwsD$*P`ruPvG^vRp(Z*upgTDBnG0~L9MDOf?X`-fylia!Y zo^#K+cjo^)ck%e**=i!ffq8v5QKJ|#(cGRF5alRD)%lmJ8#JH0NVG!H#F!H$X^Lja zAe&~E=ic=>ZM8XmcSVj~8ODuHMtp>3qn01|Aq6v(kOhSRyLU=!+&}re(La zeFMptJ$;9c9$zioQpA-KrOZiI zhN>n_-H6-fQ>KxUi!mh+$0M`GY9JWm>Q=SVU6NsZI~$*mnsf7}ecp=>t2Hve&d%r& z+c=ic-EckYQNwB-W2aqvU&;_~&#W}6O)`(LVat5Z@KUrWtunXd;b+bGMrgb85aYT$ z5{pEQn3t_X>0}vxL>@~UDa%a6J!`k}C@V&@JU*S6ofW6IHn%>&*pu$oM95mGJCWM( zp2&K+8Bd#b#1iLTH!`iQR6XY@IJ zLAU5jTBSAmfqtUj=y$qH>yVI-0&GDMDp7}eG++<9@d$d*i+((TA)LTTjNvRIn1+sL zV8KQj3&`Llyo`%j%HVapg}3nzKE@4vf=_W1w{RQZ;ttmEBkp1y_avVbkb+W3Ql)KD zgVZKy7LVjo?LHG;xA~St!H7cGsDb}NS|FJeNLC3ZrOAI|Qaji`a6gk}CASM)42w%j z%gU>^H@39z?Q+)2Ml*^wB6u*)jVzeDJu?xprj596#-AQbo0b`k89dJwp1HEB;c7+W zenE^kt*sN&Tmg$W-O;3JToRCa(_O8a!hHfkIU6fCY0AcMUx%Xb9D$RB=2ev1tfsJ>eX{^d2=inC7S+v$0#}(fmb_sU vWCoc6G@KhqxPmO$EXeVlc{0C_=VX5#4h|-W-5Qe and uses a novel approach based on containerization, REST APIs and Json. + +Several fields of ICT have experienced a major evolution during the last decade and many new advances, such as the widespread adoption of microservice development patterns. This resulted in substantial improvements in terms of interoperability and composability of software artefacts. +The vast landscape of new opportunities, in addition to the greatly increased requirements and expectations, have been the drivers for the design and development of a new Cloud Computing Platform that represents the result of a global rethink of the Data Miner. diff --git a/source/quickstart/ccp_methods/.DS_Store b/source/methods_ccp/.DS_Store similarity index 100% rename from source/quickstart/ccp_methods/.DS_Store rename to source/methods_ccp/.DS_Store diff --git a/source/quickstart/ccp_methods/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0 copy.json b/source/methods_ccp/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0 copy.json similarity index 100% rename from source/quickstart/ccp_methods/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0 copy.json rename to source/methods_ccp/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0 copy.json diff --git a/source/quickstart/ccp_methods/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0.json b/source/methods_ccp/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0.json rename to source/methods_ccp/Ariadne Dutch Archaeology Named Entity Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/Ariadne Dutch Dendrochronology Entity Recognizer-1.0.0.json b/source/methods_ccp/Ariadne Dutch Dendrochronology Entity Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Ariadne Dutch Dendrochronology Entity Recognizer-1.0.0.json rename to source/methods_ccp/Ariadne Dutch Dendrochronology Entity Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/Ariadne English Archaeology Named Entity Recognizer-1.0.0.json b/source/methods_ccp/Ariadne English Archaeology Named Entity Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Ariadne English Archaeology Named Entity Recognizer-1.0.0.json rename to source/methods_ccp/Ariadne English Archaeology Named Entity Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/Ariadne English Dendrochronology Entity Recognizer-1.0.0.json b/source/methods_ccp/Ariadne English Dendrochronology Entity Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Ariadne English Dendrochronology Entity Recognizer-1.0.0.json rename to source/methods_ccp/Ariadne English Dendrochronology Entity Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/Ariadne Swedish Archaeology Named Entity Recognizer-1.0.0.json b/source/methods_ccp/Ariadne Swedish Archaeology Named Entity Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Ariadne Swedish Archaeology Named Entity Recognizer-1.0.0.json rename to source/methods_ccp/Ariadne Swedish Archaeology Named Entity Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/Ariadne Swedish Dendrochronology Entity Recognizer-1.0.0.json b/source/methods_ccp/Ariadne Swedish Dendrochronology Entity Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Ariadne Swedish Dendrochronology Entity Recognizer-1.0.0.json rename to source/methods_ccp/Ariadne Swedish Dendrochronology Entity Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Annie Named Entity Recognizer-1.0.0.json b/source/methods_ccp/Gate Cloud Annie Named Entity Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Annie Named Entity Recognizer-1.0.0.json rename to source/methods_ccp/Gate Cloud Annie Named Entity Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Brexit Tweet Analysis-1.0.0.json b/source/methods_ccp/Gate Cloud Brexit Tweet Analysis-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Brexit Tweet Analysis-1.0.0.json rename to source/methods_ccp/Gate Cloud Brexit Tweet Analysis-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Chemical Entity Recognizer-1.0.0.json b/source/methods_ccp/Gate Cloud Chemical Entity Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Chemical Entity Recognizer-1.0.0.json rename to source/methods_ccp/Gate Cloud Chemical Entity Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Covid19 Misinformation Classifier-1.0.0.json b/source/methods_ccp/Gate Cloud Covid19 Misinformation Classifier-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Covid19 Misinformation Classifier-1.0.0.json rename to source/methods_ccp/Gate Cloud Covid19 Misinformation Classifier-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Covid19 Vaccine Text Categoriser-1.0.0.json b/source/methods_ccp/Gate Cloud Covid19 Vaccine Text Categoriser-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Covid19 Vaccine Text Categoriser-1.0.0.json rename to source/methods_ccp/Gate Cloud Covid19 Vaccine Text Categoriser-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Hate And Abuse Detection-1.0.0.json b/source/methods_ccp/Gate Cloud Hate And Abuse Detection-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Hate And Abuse Detection-1.0.0.json rename to source/methods_ccp/Gate Cloud Hate And Abuse Detection-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Hyperpartisan News Classifier-1.0.0.json b/source/methods_ccp/Gate Cloud Hyperpartisan News Classifier-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Hyperpartisan News Classifier-1.0.0.json rename to source/methods_ccp/Gate Cloud Hyperpartisan News Classifier-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Measurement Expression Annotator-1.0.0.json b/source/methods_ccp/Gate Cloud Measurement Expression Annotator-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Measurement Expression Annotator-1.0.0.json rename to source/methods_ccp/Gate Cloud Measurement Expression Annotator-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Multilingual Image Ocr-1.0.0.json b/source/methods_ccp/Gate Cloud Multilingual Image Ocr-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Multilingual Image Ocr-1.0.0.json rename to source/methods_ccp/Gate Cloud Multilingual Image Ocr-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Multilingual News Similarity Service-1.0.0.json b/source/methods_ccp/Gate Cloud Multilingual News Similarity Service-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Multilingual News Similarity Service-1.0.0.json rename to source/methods_ccp/Gate Cloud Multilingual News Similarity Service-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Offensive Language Classifier-1.0.0.json b/source/methods_ccp/Gate Cloud Offensive Language Classifier-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Offensive Language Classifier-1.0.0.json rename to source/methods_ccp/Gate Cloud Offensive Language Classifier-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Political Abuse Monitor-1.0.0.json b/source/methods_ccp/Gate Cloud Political Abuse Monitor-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Political Abuse Monitor-1.0.0.json rename to source/methods_ccp/Gate Cloud Political Abuse Monitor-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Rumour Veracity Classifier-1.0.0.json b/source/methods_ccp/Gate Cloud Rumour Veracity Classifier-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Rumour Veracity Classifier-1.0.0.json rename to source/methods_ccp/Gate Cloud Rumour Veracity Classifier-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Stance Classification English-1.0.0.json b/source/methods_ccp/Gate Cloud Stance Classification English-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Stance Classification English-1.0.0.json rename to source/methods_ccp/Gate Cloud Stance Classification English-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Stance Classification Multilingual-1.0.0.json b/source/methods_ccp/Gate Cloud Stance Classification Multilingual-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Stance Classification Multilingual-1.0.0.json rename to source/methods_ccp/Gate Cloud Stance Classification Multilingual-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Toxic Language Classifier-1.0.0.json b/source/methods_ccp/Gate Cloud Toxic Language Classifier-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Toxic Language Classifier-1.0.0.json rename to source/methods_ccp/Gate Cloud Toxic Language Classifier-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Twitie Named Entity Recognizer For Tweets-1.0.0.json b/source/methods_ccp/Gate Cloud Twitie Named Entity Recognizer For Tweets-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Twitie Named Entity Recognizer For Tweets-1.0.0.json rename to source/methods_ccp/Gate Cloud Twitie Named Entity Recognizer For Tweets-1.0.0.json diff --git a/source/quickstart/ccp_methods/Gate Cloud Url Domain Analysis-1.0.0.json b/source/methods_ccp/Gate Cloud Url Domain Analysis-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Gate Cloud Url Domain Analysis-1.0.0.json rename to source/methods_ccp/Gate Cloud Url Domain Analysis-1.0.0.json diff --git a/source/quickstart/ccp_methods/Kaldi Italian Automatic Speech Recognizer-1.0.0.json b/source/methods_ccp/Kaldi Italian Automatic Speech Recognizer-1.0.0.json similarity index 100% rename from source/quickstart/ccp_methods/Kaldi Italian Automatic Speech Recognizer-1.0.0.json rename to source/methods_ccp/Kaldi Italian Automatic Speech Recognizer-1.0.0.json diff --git a/source/quickstart/ccp_methods/OBIS get Species (Marco's version)-1.0.5.json b/source/methods_ccp/OBIS get Species (Marco's version)-1.0.5.json similarity index 100% rename from source/quickstart/ccp_methods/OBIS get Species (Marco's version)-1.0.5.json rename to source/methods_ccp/OBIS get Species (Marco's version)-1.0.5.json diff --git a/source/quickstart/ccp_methods/SimpleImageClassifier-0.0.1.json b/source/methods_ccp/SimpleImageClassifier-0.0.1.json similarity index 100% rename from source/quickstart/ccp_methods/SimpleImageClassifier-0.0.1.json rename to source/methods_ccp/SimpleImageClassifier-0.0.1.json diff --git a/source/developermanual/methods_examples/index.rst b/source/methods_ccp/index.rst similarity index 100% rename from source/developermanual/methods_examples/index.rst rename to source/methods_ccp/index.rst diff --git a/source/quickstart/20_basic_docker_image.md b/source/methods_development/02.1_basic_docker_image.md similarity index 91% rename from source/quickstart/20_basic_docker_image.md rename to source/methods_development/02.1_basic_docker_image.md index 0e4fd0e..274dd48 100644 --- a/source/quickstart/20_basic_docker_image.md +++ b/source/methods_development/02.1_basic_docker_image.md @@ -4,11 +4,11 @@ Simple algorithms can be implemented using a generic unix docker image, and tota Examples of this algorithms are parametric `curl` or `wget` operations on external APIs, shell for file processing, etc -### Default ccpimage for simple algorithms +## Default ccpimage for simple algorithms To implement methods that doesn't need any particular library or configuration, we can leave empty the `ccpimage` value, to use a basic Linux Docker image. -![ccpimage bash](./imgs/input_ccpimage_bash.png) +![ccpimage bash](../_static/imgs/methods_development/input_ccpimage_bash.png) ```json { @@ -18,7 +18,7 @@ To implement methods that doesn't need any particular library or configuration, "title": "Runtime", "description": "`bash`, a basic unix docker image.", "minOccurs": 1, - "maxOccurs": 1,Bash + "maxOccurs": 1, "schema": { "type": "string", "format": "url", @@ -31,7 +31,7 @@ To implement methods that doesn't need any particular library or configuration, } ``` -### Execution Parameters +## Execution Parameters all the parameters and configurations needed for the execution of the algorithms are defined in the inputs section @@ -118,15 +118,15 @@ and what is parametric (readonly=false, or not defined in the input schema) the given example uses special input parameters that will be explained in next sections -* [credentials](./credentials.md) +* [credentials](./03_5_credentials.md) -![secret input credentials](./imgs/input_secret_credentials.png) +![secret input credentials](../_static/imgs/methods_development/input_secret_credentials.png) -* [file upload](./input_file.md) +* [file upload](./03_1_input_file.md -![secret file](./imgs/input_file.png) +![input file](../_static/imgs/methods_development/input_file.png) -### Execution +## Execution the implementation of the algorithms is totally defined in the deploy-script and in the execute-script ```json @@ -156,4 +156,3 @@ the implementation of the algorithms is totally defined in the deploy-script and example: [bash example ](../methods_examples/Bash%20Example-1.0.0.json) - diff --git a/source/quickstart/21_basic_python.md b/source/methods_development/02.2_basic_python.md similarity index 95% rename from source/quickstart/21_basic_python.md rename to source/methods_development/02.2_basic_python.md index 11ec45b..d3bee90 100644 --- a/source/quickstart/21_basic_python.md +++ b/source/methods_development/02.2_basic_python.md @@ -1,12 +1,12 @@ -### Running a Python implementation +# Python algoritms Python methods can be implemented compiling the *ccpimage* field with a standard python docker image (es `python:3.9.19`) -![python:3.9.19](./imgs/input_ccpimage_python.png) +![python:3.9.19](../_static/imgs/methods_development/input_ccpimage_python.png) We can then define an input `repository` field -![input repository](./imgs/input_repository.png) +![input repository](../_static/imgs/methods_development/input_repository.png) and configure the *deploy script* to git clone the repository and install the dependencies, using the placeholder `{{repository}}` to refer the input repository field @@ -39,7 +39,7 @@ then the *run script* will run it passing the required parameters } ``` -### Execution Parameters +## Execution Parameters all the parameters and configurations needed for the execution of the algorithms are defined in the input sections @@ -126,12 +126,13 @@ and what is parametric (readonly=false, or not defined in the input schema) the given example uses special input parameters that will be explained in next sections -* [credentials](./credentials.md) -* [file upload](./input_file.md) +* [credentials](./03_5_credentials.md) +* [file upload](./03_1_input_file.md) -### Execution +## Execution the implementation of the algorithms is totally defined in the deploy-script and in the execute-script + ```json { "additionalParameters": { @@ -256,4 +257,4 @@ full example } ``` -example: [Gate Cloud Hate And Abuse Detection ](../ccp_methods/Gate%20Cloud%20Toxic%20Language%20Classifier-1.0.0.json) \ No newline at end of file +example: [WordCloud ](../methods_examples/WordCloud-1.0.0.json) \ No newline at end of file diff --git a/source/quickstart/30_input_file.md b/source/methods_development/03_1_input_file.md similarity index 83% rename from source/quickstart/30_input_file.md rename to source/methods_development/03_1_input_file.md index 482b7d3..4367025 100644 --- a/source/quickstart/30_input_file.md +++ b/source/methods_development/03_1_input_file.md @@ -2,7 +2,7 @@ the input with format "file" allows the user to upload a file while executing the method -![input file](./imgs/input_file.png) +![input file](../_static/imgs/methods_development/input_file.png) file size is limited to 100Kb, because the content of the file is base64 encoded and passed as a variable @@ -22,8 +22,7 @@ file size is limited to 100Kb, because the content of the file is base64 encoded "default": "" } } - }, - ... + } } ``` @@ -33,12 +32,10 @@ to access the file content, it's possible to decode it in the deploy script, usi echo {{file}} | base64 -d > /ccp_data/input ``` -then simply read the file `/ccp_data/input` during the method execution +then simply read the file `/ccp_data/input` during the method execution ```json { - ... - "additionalParameters": { "parameters": [ { @@ -58,6 +55,6 @@ then simply read the file `/ccp_data/input` during the method execution } ``` -to work with bigger files, refer to the Input file workspace section +to work with bigger files, refer to the [Input file workspace section](./03_3_input_file_workspace_public.md) -example: [Gate Cloud Hate And Abuse Detection ](../ccp_methods/Gate%20Cloud%20Hate%20And%20Abuse%20Detection-1.0.0.json) +example: [Python example](../methods_examples/Python%20example-1.0.0.json) diff --git a/source/methods_development/03_2_input_urls.md b/source/methods_development/03_2_input_urls.md new file mode 100644 index 0000000..3622e28 --- /dev/null +++ b/source/methods_development/03_2_input_urls.md @@ -0,0 +1,62 @@ +# Input URL + +The input with format "url" allows the user to provide a direct link to a file or resource to be processed during the method execution. + +![input url](../_static/imgs/methods_development/input_url.png) + + + +```json +{ + "inputs": { + "file_url": { + "id": "file_url", + "title": "Input URL", + "description": "The URL of the file to be processed", + "minOccurs": 1, + "maxOccurs": 1, + "schema": { + "type": "string", + "format": "url", + "contentMediaType": "text/plain", + "default": "" + } + } + } +} + +The input URL must point to a publicly accessible resource, as the method execution will fetch the content from the URL during runtime. + +To process the file content, the provided URL has to be retrieved in the deploy script using a command like: + +`wget {{file_url}} -O /ccp_data/input` + +or + +`curl -L {{file_url}} -o /ccp_data/input` + +Once the file is retrieved, the method can read it from the /ccp_data/input path during execution. + +```json +{ + "additionalParameters": { + "parameters": [ + { + "name": "deploy-script", + "value": [ + "wget {{file_url}} -O /ccp_data/input" + ] + }, + { + "name": "execute-script", + "value": [ + "wget {{baseurl}}/{{service}} --post-file /ccp_data/input -O /ccp_data/annotated.json" + ] + } + ] + } +} +``` + +Example: [WorldCloud Urls](../methods_examples/WordCloud%20Urls-1.0.0.json) + diff --git a/source/quickstart/workspace_file.md b/source/methods_development/03_3_input_file_workspace_public.md similarity index 86% rename from source/quickstart/workspace_file.md rename to source/methods_development/03_3_input_file_workspace_public.md index dfac66c..cde5117 100644 --- a/source/quickstart/workspace_file.md +++ b/source/methods_development/03_3_input_file_workspace_public.md @@ -1,12 +1,12 @@ -# download file from workspace +# download public file from workspace Authenticate the service on Keycloak, retrieve a token then download the file using the authentication token -![](./imgs/workspace_input_file.png) +![](../_static/imgs/methods_development/input_file.png) The input form allows to select from the user workspace files -![](./imgs/workspace_select_file.png) +![](../_static/imgs/methods_development/workspace_select_file.png) method json @@ -60,4 +60,4 @@ curl $1 -o /ccp_data/inputFile.csv -H "Authorization: Bearer $TOKEN" echo "Downloaded" ``` -example: [Ariadne Dutch Archaeology Named Entity Recognizer](../ccp_methods/Ariadne%20Dutch%20Archaeology%20Named%20Entity%20Recognizer-1.0.0.json) \ No newline at end of file +example: [Ariadne Dutch Archaeology Named Entity Recognizer](../methods_ccp/Ariadne%20Dutch%20Archaeology%20Named%20Entity%20Recognizer-1.0.0.json) \ No newline at end of file diff --git a/source/quickstart/45_credentials.md b/source/methods_development/03_4_credentials.md similarity index 85% rename from source/quickstart/45_credentials.md rename to source/methods_development/03_4_credentials.md index 76679c3..3567002 100644 --- a/source/quickstart/45_credentials.md +++ b/source/methods_development/03_4_credentials.md @@ -1,9 +1,9 @@ -# Credentials +# Credentials and Remote authentication * Input of credentials in a secret input form * Definition of an execute-script that uses the provided credentials to authenticate on an external service -![credentials](./imgs/credentials.png) +![credentials](../_static/imgs/methods_development/input_credentials.png) ```json { @@ -35,4 +35,4 @@ } ``` -example: [Gate Cloud Hate And Abuse Detection ](../ccp_methods/Gate%20Cloud%20Hate%20And%20Abuse%20Detection-1.0.0.json) +example: [Bash Example](../methods_examples/Bash%20Example-1.0.0.json) diff --git a/source/methods_development/03_5_input_file_workspace_private.md b/source/methods_development/03_5_input_file_workspace_private.md new file mode 100644 index 0000000..5e4859e --- /dev/null +++ b/source/methods_development/03_5_input_file_workspace_private.md @@ -0,0 +1,63 @@ +# download private file from workspace + +Authenticate the service on Keycloak, retrieve a token +then download the file using the authentication token + +![](../_static/imgs/methods_development/input_file.png) + +The input form allows to select from the user workspace files +![](../_static/imgs/methods_development/workspace_select_file.png) + +method json + +```json +{ + "inputs": { + "inputFile": { + "id": "inputFile", + "title": "inputFile", + "description": "Input CSV file()", + "minOccurs": 1, + "maxOccurs": 1, + "schema": { + "type": "string", + "format": "remotefile", + "default": "", + "contentMediaType": "text/csv" + } + } + }, + "additionalParameters": { + "parameters": [ + { + "name": "deploy-script", + "value": [ + "./download.sh {{inputFile}}" + ] + }, + { + "name": "execute-script", + "value": [ + "python XXX.py /ccp_data/inputFile.csv [[ARGS]]", + "cp -f result.csv /ccp_data/" + ] + } + ] + } +} +``` + +download implementation: +the docker image contains the download script [download.sh](../support_files/download.sh]` + +```sh +echo "Getting token" +TOKEN=$(curl -X POST $ccpiamurl -d grant_type=refresh_token -d client_id=$ccpclientid -d refresh_token=$ccprefreshtoken -H "X-D4Science-Context: $ccpcontext" | jq -r '."access_token"') + +echo Downloading /ccp_data/inputFile.csv +curl $1 -o /ccp_data/inputFile.csv -H "Authorization: Bearer $TOKEN" + +echo "Downloaded" +``` + +example: [Ariadne Dutch Archaeology Named Entity Recognizer](../methods_ccp/Ariadne%20Dutch%20Archaeology%20Named%20Entity%20Recognizer-1.0.0.json) \ No newline at end of file diff --git a/source/quickstart/40_input_checklist.md b/source/methods_development/03_6_input_checklist.md similarity index 94% rename from source/quickstart/40_input_checklist.md rename to source/methods_development/03_6_input_checklist.md index f915d16..e1c7e32 100644 --- a/source/quickstart/40_input_checklist.md +++ b/source/methods_development/03_6_input_checklist.md @@ -3,7 +3,7 @@ * definition of a checklist with given string set * use of the checked params in the execute-script -![checklist](./imgs/checklist.png) +![checklist](../_static/imgs/methods_development/input_checklist.png ) ```json { @@ -74,4 +74,4 @@ } ``` -example: [Gate Cloud Hate And Abuse Detection ](../ccp_methods/Gate%20Cloud%20Hate%20And%20Abuse%20Detection-1.0.0.json) +example: [Gate Cloud Hate And Abuse Detection ](../methods_ccp/Gate%20Cloud%20Hate%20And%20Abuse%20Detection-1.0.0.json) diff --git a/source/methods_development/index.rst b/source/methods_development/index.rst new file mode 100644 index 0000000..528ff66 --- /dev/null +++ b/source/methods_development/index.rst @@ -0,0 +1,8 @@ +Methods development reference +============================= + +.. toctree:: + :glob: + :includehidden: + + * diff --git a/source/methods_examples/.DS_Store b/source/methods_examples/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 /ccp_data/input.txt", + "pip install --root-user-action=ignore wordcloud" + ] + }, + { + "name": "execute-script", + "value": [ + "wordcloud_cli --text /ccp_data/input.txt --imagefile /ccp_data/wordcloud.png" + ] + }, + { + "name": "undeploy-script", + "value": [] + } + ] + }, + "links": [ + { + "rel": "compatibleWith", + "title": "D4Science production Infrastructure", + "href": "infrastructures/d4science-prod-swarm" + } + ], + "keywords": [ + "python", + "wordcloud" + ], + "id": "2d415c9e-3aff-4b9b-b278-3a27d7f212df" +} \ No newline at end of file diff --git a/source/quickstart/ccp_methods/index.rst b/source/methods_examples/index.rst similarity index 100% rename from source/quickstart/ccp_methods/index.rst rename to source/methods_examples/index.rst diff --git a/source/methods_examples/worldcloud/alice_mask.png b/source/methods_examples/worldcloud/alice_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..1c773afb09af637278221773c346e9f70a426b71 GIT binary patch literal 7339 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 literal 0 HcmV?d00001 diff --git a/source/methods_examples/worldcloud/parrot.jpg b/source/methods_examples/worldcloud/parrot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..327d15763db0a9ec13cef3424eb302d67de358e0 GIT binary patch literal 54877 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 z zF%r;<3?d4nFwAO$h%jYP-zRc~GU_cZO+T5QJG{I^rk|@?&RdrPHbXB=vKlyNDGWn! zVFqFwgK1j1AqEVnC5g;iu`xp@?H6Qg$qgt$iV*3U0K+O6 zthhodV-CTL2)=8#Q2-V=Mm4RnzOB^3E<5uxjy~!ALJ*pR6c{iLF_3tiFQCFu(+k2$ zI}+!=F-~@6L_nm%eOf1B1Y6<*E@LsG=ftm2giv72fi{9Va}hy<2h$(Fo*8+F;^5)I zk7s{ZFO|3m2M{S44EZO@HROhwaA3k2#I<~SaD(g~&q7qf&&BTv85UK(W!f{>kE^d= zhtOC(&*>VezDShIiVPSr@L;sFdUFG zc_(BWBeJHM#V$TjiL?ANt_%5nT%wsFkJ#yjvrpnBH2g%lr!hf;GAH&D>mM?))Da#- z!^t;-m^9pUJ0{YOo|uB{{v+7ak@~sp<+1~usZyOsKIZ0JGfWtz2$GZ={wC+~8#=tM znNVpQz$_c|p_K$;5l|R=mjPLZB9X#2-}T`}A#KCXLtY=_)3kM3sA%)GJ)F|o&>Ua~G9iF(aJg9c(>-b;apx5SSmWCrs-$gE!x6;GvD zin}0C6f$;9AN)_%`4(2@WNct>sH*IgA}BFaWceEK%9|kG0LpOnDFTSnFbx=DBTnGc zFp}`J!6knK8J{1YtI)Cdi?w+nXidOKaK#Bg>WeOL4SrAC^HaRPLS{^(*NLLchbswKS~^)kvTDLQ=){VGXDpJ+^COgo6niv6u%CY^Rt?er)6_qPiR;g8Lwfb;+!kbA4 zxuE3txEfuP! zYFS=CJ9}?uS8KApyRCDsH96be(bk&m?CPAG)6{j1+jkwxo^U2z?^ziGqVE8!Sr*fo zs{?ZU>0WstQBhG2=$mptnqF-Tk7V>LUo%ZlJvbHEp6icTMW1Mvul6ar{RPiGShR#b zQ}CS9r0ZvSZ6W6rN=`1Y_Bc-3e$4Vm1M5^EM&rI$40=PuQJZ{)EX#Sxw+>n4U{70p z(3BbbXw1;s*9H+bRyv*k&*>mh%giYufJd z%(U&>dB+-ZbCXsrvYNI~vwlNeeZnwqWI9^P+b2tQaGE!&YB z|4^m-(Cm$y4dbxT^cF4Z&B&pt+0ci4ii77O!`5xOK6HX!Cilf7kZXH~ZVWrQyyb9H zlk;@#(2dNrOeP*jaXty~^HXAFz+u$Luq9iCt!2vITa9 z{lI=@dbxOU`pfoAbgDd6I z7+YEz3Z3`;UF%dD(OI1`e!bF2^!4xkk4od)Rk9dvU%PHoWAnBSDv?FdNR*XJ&bQhkTstx?(VO3Cil@6$vja~AT6mPC)La`m5M@(uP5 zd!J5SFA^rdX5X>z*{|$(LShwav4OBCkhlp=XhsXRVjH@!1Krq3sO-mH?8ANxV2Dte z!6?R2fC&pOJe))kL5R#J@f4oMb2y80gwPl83SP%s5@Cyo+qV>PczY=yb2n86#M)1- zPVE2tZ+!kA8pU0lfj9&I&kUflFWuKev6X)~EDuxcwUcxmrAstnH!o@ELS48WCmL?Y pi7x(ONaG}#3ZGO&=OrZxwSWB}fPP%cwbqE&|9JfmF?cI>e*tZ~_UQls literal 0 HcmV?d00001 diff --git a/source/quickstart/01.0_analytics_engine.md b/source/quickstart/01.0_analytics_engine.md index 6203020..860afd7 100644 --- a/source/quickstart/01.0_analytics_engine.md +++ b/source/quickstart/01.0_analytics_engine.md @@ -6,11 +6,11 @@ The *Analytics Engine* section consists of two main pages: 1. The **[Cloud Computing Platform (CCP)](01.2_engine_ccp.md)**: This page allows users to execute predefined methods and monitor their execution. - ![Cloud Computing Platform](./imgs/analytics_engine_ccp.png) + ![Cloud Computing Platform](../_static/imgs/quickstart/analytics_engine_ccp.png) -2. The **[Method/Algorithm Importer](01.3_engine_edit.md)**: This page is used to define new methods, as well as manage and edit existing ones. +2. The **[Method/Algorithm Importer](01.5_engine_edit.md)**: This page is used to define new methods, as well as manage and edit existing ones. - ![Method/Algorithm Importer](./imgs/analytics_engine_importer.png) + ![Method/Algorithm Importer](../_static/imgs/quickstart/analytics_engine_importer.png) --- diff --git a/source/quickstart/01.1_methods_list.md b/source/quickstart/01.1_methods_list.md index 705345f..57e3aca 100644 --- a/source/quickstart/01.1_methods_list.md +++ b/source/quickstart/01.1_methods_list.md @@ -2,7 +2,7 @@ Both the *Cloud Computing Platform (CCP)* and the *Analytics Engine* display the **Methods List** section in the left column, which contains all methods available in the current environment. These methods are grouped by category for easy navigation. -![Methods List](./imgs/methods_list.png) +![Methods List](../_static/imgs/quickstart/methods_list.png) --- @@ -16,7 +16,7 @@ Each method is described by the following attributes: - **Tags**: Relevant tags that classify the method. - **Infrastructures**: Indicates the infrastructures where the method can be executed (usually, *D4Science Production Infrastructure*). -![Method Detail](./imgs/method_shared.png) +![Method Detail](../_static/imgs/quickstart/method_shared.png) --- @@ -24,7 +24,7 @@ Each method is described by the following attributes: To the right of each method, a series of buttons allows you to execute, edit, or manage the method. -![Method Buttons](./imgs/method_buttons.png) +![Method Buttons](../_static/imgs/quickstart/method_buttons.png) The available actions for each method depend on several factors, including: @@ -38,32 +38,32 @@ Some buttons may be hidden based on these conditions. Below are the possible act ### Action Buttons -#### ![Play button](./imgs/method_button_play.png) **Play Button** +#### ![Play button](../_static/imgs/quickstart/method_button_play.png) **Play Button** Loads the method into the execution form, where users can configure the input and start the execution. > **Availability**: Shown only on the *Cloud Computing Platform (CCP)* page. The method must have at least one available infrastructure in the current VRE (Virtual Research Environment) to be executed; otherwise, the button will be hidden. -#### ![Edit button](./imgs/method_button_edit.png) **Edit Button** +#### ![Edit button](../_static/imgs/quickstart/method_button_edit.png) **Edit Button** Loads the method into the editing form, where users can manage and modify the method’s definition. > **Availability**: Shown only on the *Method/Algorithm Importer* page. -#### ![Download button](./imgs/method_button_download.png) **Download Button** +#### ![Download button](../_static/imgs/quickstart/method_button_download.png) **Download Button** Downloads the JSON file that defines the method. -#### ![Archive button](./imgs/method_button_archive.png) **Archive Button** +#### ![Archive button](../_static/imgs/quickstart/method_button_archive.png) **Archive Button** Similar to the download button, but saves the method’s JSON file to the user’s workspace instead of downloading it to the local machine -#### ![Share button](./imgs/method_button_share.png) **Share Button** +#### ![Share button](../_static/imgs/quickstart/method_button_share.png) **Share Button** Clicking this button shares the method with others in the environment. > **Availability**: Appears only for methods defined by the user that have not yet been shared with the community. Once shared, the method becomes visible to users across the relevant VREs, depending on the permissions set by the original creator. -#### ![Archived label](./imgs/method_button_shared.png) **Archived Label** +#### ![Archived label](../_static/imgs/quickstart/method_button_shared.png) **Archived Label** Indicates that the method has been shared with the community. diff --git a/source/quickstart/01.2_engine_ccp.md b/source/quickstart/01.2_engine_ccp.md index 8185789..2708c95 100644 --- a/source/quickstart/01.2_engine_ccp.md +++ b/source/quickstart/01.2_engine_ccp.md @@ -8,100 +8,32 @@ The page is composed of: - **Method Execution form** section, used to configure and start the execution of a selected method. - **Execution Monitor** section, which tracks scheduled, pending, and finished executions. -![Cloud Computing Platform (CCP)](./imgs/analytics_engine_ccp.png) +![Cloud Computing Platform (CCP)](../_static/imgs/quickstart/analytics_engine_ccp.png) --- -## **Methods List** +## Methods List section When the **Cloud Computing Platform (CCP)** page is first opened, the execution form will be empty. To select a method for execution, use the **Methods List** section on the left. Methods can be selected by: -- Clicking the **Play** button ( ![play button](./imgs/method_button_play.png) ) next to a method to load it into the execution form. +- Clicking the **Play** button ( ![play button](../_static/imgs/quickstart/method_button_play.png) ) next to a method to load it into the execution form. - Dragging the method from the list and dropping it into the execution form. +--- ---- - -## **Method Execution form** Section +## Method Execution section Once a method is selected, the **Method Execution form** is populated with the inputs and options specific to the selected method. -Each method has its own predefined inputs, runtime, and parameters, which are defined during the method's configuration. +The widget will shot method's predefined inputs, runtime, and parameters defined during its configuration. -The *runtime* environment is defined by the `ccpimage` input, which specifies the Docker image to be used. This runtime is **usually immutable**, meaning users typically cannot modify it during execution, but in certain cases, flexibility may be allowed depending on the method's configuration. +The user can populate the methods's parameters and start the execution, as it will explained in section [Method execution](./01.3_method_execution.md) -### **Input Parameters** +--- -The input parameters required for execution vary based on the method's definition. Common types of inputs include: - -- **`ccpimage` (Runtime)**: Specifies the Docker image or environment in which the method will run. This is predefined via the `ccpimage` input and is *usually immutable*. -- **Input Files/URLs**: Paths to input files or URLs, such as CSV files or other required data formats, depending on the method's needs. -- **Input Parameters**: These include specific configuration values such as probabilities, number of iterations, or other settings required by the algorithm. -- **Annotations**: Metadata or tags associated with the execution, which can also appear in the output results, providing traceability across executions. - -### **Options** - -In the **Options** section, users can select the automatic archiving behavior for their execution results. The following options are available: - -- **Automatically archive whole execution provenance**: This option will add to the archive the entire execution context, including inputs, parameters, and results. -- **Automatically archive uncompressed outputs only**: This option will archive only the final outputs in an uncompressed format, without including additional details. -- **Do not archive anything automatically**: No automatic archiving of the execution results will be done. - -### **Outputs** - -You can configure what type of logs to capture during the method execution: - -- **Standard output**: Enable this option to capture all normal output messages generated by the method. -- **Standard error**: Enable this option to capture any error or warning messages encountered during execution. - - -![options](./imgs/cpp_execution_options.png) - ---- - -## **Executing a Method** - -Once the method is selected and configured, you can execute it by clicking the **Execute** button. Here's how the execution process works: - -1. **Scheduling of execution**: After clicking *Execute*, CCP will process the method and parameters and scheduel an execution - -2. **Start of Execution**: begin by pulling the necessary Docker image (as specified by `ccpimage`), installing any dependencies, and running the method. - -3. **Monitoring Progress**: The execution can be monitored in real time via the **Execution Monitor** (described below), where status updates and logs will be displayed. - -4. **Outputs**: When the method completes, a link to download the output files, such as processed data, logs, or visualizations, will be provided. If provenance tracking is enabled, all execution details will be saved automatically. - ---- -## **Execution Monitor** Section +## Execution Monitor section The **Execution Monitor** provides a detailed view of method executions, tracking their status from the moment they are initiated until they complete. It is composed of two main sections: **Live Executions** and **Archived Executions**. -![Execution Monitor](./imgs/ccp_execution_monitor.png) +![Execution Monitor](../_static/imgs/quickstart/ccp_execution_monitor.png) -### **Live Executions** - -This tab displays the current status of running or recently finished executions. Each running execution shows: - -- **Method Name and Version**: Identifies the method being executed. -- **Status**: The execution's current phase, which may include: - - Accepted: The method has been accepted and is queued for execution. - - Running: The method is currently being executed. - - Successful: The execution has completed successfully. - - Failed: An error occurred during execution. -- **Timestamp**: Indicates the time the execution was accepted and the time of the last update. -- **Infrastructure**: The infrastructure used to run the method (e.g., D4Science Production Infrastructure). -- **Runtime**: The Docker image used (e.g., python:3.9.19). - -Additional features in this tab include: - -- **Output Files**: When the execution completes, a link (`outputs/output.zip`) will appear, allowing users to download the execution results. -- **Generate Code for...**: Generates a file in the selected programming language (e.g., Python, R, Julia) that authenticates the user and programmatically starts the execution. -- **Direct Link**: Provides a direct link that opens the CCP page directly to the specific execution instance. -- **Logs**: Real-time logs showing progress and any warnings or errors. -- **Cancel Execution**: Allows you to stop an ongoing execution if needed. -- **Re-submit**: Restarts a previously executed method with the same configuration. -- **Delete button**: To delete the current execution from the list of executions - -### **Archived Executions** - -From the **Live Executions panel**, you can archive completed executions. Once archived, the execution will be moved to the **Archived Executions panel**, where you can review the history of past executions. diff --git a/source/quickstart/01.3_method_execution.md b/source/quickstart/01.3_method_execution.md new file mode 100644 index 0000000..8520515 --- /dev/null +++ b/source/quickstart/01.3_method_execution.md @@ -0,0 +1,38 @@ + +# Method Execution + +Once a method is selected, the **Method Execution form** is populated with the inputs and options specific to the selected method. + +Each method has its own predefined inputs, runtime, and parameters, which are defined during the method's configuration. + +## Runtime + +The *runtime* environment is defined by the `ccpimage` input, which specifies the Docker image to be used. This runtime is **usually immutable**, meaning users typically cannot modify it during execution, but in certain cases, flexibility may be allowed depending on the method's configuration. + +## Input Parameters + +The input parameters required for execution vary based on the method's definition. Common types of inputs include: + +- **`ccpimage` (Runtime)**: Specifies the Docker image or environment in which the method will run. This is predefined via the `ccpimage` input and is *usually immutable*. +- **Input Files/URLs**: Paths to input files or URLs, such as CSV files or other required data formats, depending on the method's needs. +- **Input Parameters**: These include specific configuration values such as probabilities, number of iterations, or other settings required by the algorithm. +- **Annotations**: Metadata or tags associated with the execution, which can also appear in the output results, providing traceability across executions. + +## Options + +In the **Options** section, users can select the automatic archiving behavior for their execution results. The following options are available: + +- **Automatically archive whole execution provenance**: This option will add to the archive the entire execution context, including inputs, parameters, and results. +- **Automatically archive uncompressed outputs only**: This option will archive only the final outputs in an uncompressed format, without including additional details. +- **Do not archive anything automatically**: No automatic archiving of the execution results will be done. + +## Outputs + +You can configure what type of logs to capture during the method execution: + +- **Standard output**: Enable this option to capture all normal output messages generated by the method. +- **Standard error**: Enable this option to capture any error or warning messages encountered during execution. + + +![options](../_static/imgs/quickstart/cpp_execution_options.png) + diff --git a/source/quickstart/01.4_execution_monitor.md b/source/quickstart/01.4_execution_monitor.md new file mode 100644 index 0000000..8a30c56 --- /dev/null +++ b/source/quickstart/01.4_execution_monitor.md @@ -0,0 +1,33 @@ +# Execution Monitor Section + +The **Execution Monitor** provides a detailed view of method executions, tracking their status from the moment they are initiated until they complete. It is composed of two main sections: **Live Executions** and **Archived Executions**. + +![Execution Monitor](../_static/imgs/quickstart/ccp_execution_monitor.png) + +## Live Executions + +This tab displays the current status of running or recently finished executions. Each running execution shows: + +- **Method Name and Version**: Identifies the method being executed. +- **Status**: The execution's current phase, which may include: + - Accepted: The method has been accepted and is queued for execution. + - Running: The method is currently being executed. + - Successful: The execution has completed successfully. + - Failed: An error occurred during execution. +- **Timestamp**: Indicates the time the execution was accepted and the time of the last update. +- **Infrastructure**: The infrastructure used to run the method (e.g., D4Science Production Infrastructure). +- **Runtime**: The Docker image used (e.g., python:3.9.19). + +Additional features in this tab include: + +- **Output Files**: When the execution completes, a link (`outputs/output.zip`) will appear, allowing users to download the execution results. +- **Generate Code for...**: Generates a file in the selected programming language (e.g., Python, R, Julia) that authenticates the user and programmatically starts the execution. +- **Direct Link**: Provides a direct link that opens the CCP page directly to the specific execution instance. +- **Logs**: Real-time logs showing progress and any warnings or errors. +- **Cancel Execution**: Allows you to stop an ongoing execution if needed. +- **Re-submit**: Restarts a previously executed method with the same configuration. +- **Delete button**: To delete the current execution from the list of executions + +## Archived Executions + +From the **Live Executions panel**, you can archive completed executions. Once archived, the execution will be moved to the **Archived Executions panel**, where you can review the history of past executions. diff --git a/source/quickstart/01.3_engine_edit.md b/source/quickstart/01.5_engine_edit.md similarity index 85% rename from source/quickstart/01.3_engine_edit.md rename to source/quickstart/01.5_engine_edit.md index ea221f4..aa98ee2 100644 --- a/source/quickstart/01.3_engine_edit.md +++ b/source/quickstart/01.5_engine_edit.md @@ -1,4 +1,4 @@ -# Method/Algorithm Importer +# Method/Algorithm Importer page The **Method/Algorithm Importer** page allows users to create new computational methods or edit existing ones. When the page is opened, the form will be empty, providing the opportunity to define a new method. Alternatively, users can select an existing method from the **Methods List** to modify it. @@ -7,27 +7,27 @@ The page is composed of several sections: - **Methods List**: Displays all available methods categorized for easy navigation. - **Method Editor**: The section where users can create or edit methods, define inputs, outputs, and specify execution scripts. -![Method Importer Overview](./imgs/analytics_engine_importer.png) +![Method Importer Overview](../_static/imgs/quickstart/analytics_engine_importer.png) --- -## **Methods List** +## Methods List -When the **Method/Algorithm Importer (CCP)** page is opened, the edit form will be empty by default, allowing users to create a new method. To edit an existing method, use the **Methods List** section on the left. Methods can be selected by: +When the **Method/Algorithm Importer (CCP)** page is opened, the edit form will be empty by default, allowing users to create a new method. To edit an existing method, use the [**Methods List**](./01.1_methods_list.md) section on the left. Methods can be selected by: -- Clicking the **Edit** button ( ![edit button](./imgs/method_button_edit.png) ) next to a method to load it into the execution form. +- Clicking the **Edit** button ( ![edit button](../_static/imgs/quickstart/method_button_edit.png) ) next to a method to load it into the execution form. - Dragging the method from the list and dropping it into the execution form. --- -## **Method Editor** +## Method Editor The **Method Editor** is where users can create new methods or edit existing ones. It consists of the following components: -### **Basic Information** +### Basic Information - **Title**: The name of the method. - **Version**: The version number of the method. - **Description**: A brief description of the method's purpose. @@ -35,7 +35,7 @@ The **Method Editor** is where users can create new methods or edit existing one - **Categories**: The broader category the method belongs to. - **Compatible Infrastructures**: Lists the infrastructures where the method can be executed. -## **Saving and Managing Methods** +## Saving and Managing Methods Once the method is defined, users can: @@ -46,7 +46,7 @@ Once the method is defined, users can: Saved methods will appear in the **Methods List** . --- -### **Inputs** +### Inputs Users can define the inputs required by the method. Each input is configurable, including: @@ -57,11 +57,11 @@ Users can define the inputs required by the method. Each input is configurable, Each input can be added or removed using the **Add** (+) and **Remove** (Trash) buttons. -### **Defining a New Input** +### Defining a New Input -By pressing the **Plus** button ![Plus Button](./imgs/edit_button_plus.png) in the **Inputs** section, the interface for defining a new input field is created. +By pressing the **Plus** button ![Plus Button](../_static/imgs/quickstart/edit_button_plus.png) in the **Inputs** section, the interface for defining a new input field is created. -![New Input Form](./imgs/edit_new_input.png) +![New Input Form](../_static/imgs/quickstart/edit_new_input.png) The following fields can be configured for the new input: @@ -76,7 +76,7 @@ The following fields can be configured for the new input: - **Default Value**: The value that will be used as default if no input is provided during execution. -#### **String Inputs** +#### String Inputs selecting *String* as type , The available options fo **Format** for enumerated types include: @@ -93,7 +93,7 @@ selecting *String* as type , The available options fo **Format** for enumerated - **Mime Type**: Defines the expected media type for the input, such as `text/plain` or `application/json`. -#### **Enumeration Inputs** +#### Enumeration Inputs When **Enumerated** is selected as the type, users must define a comma-separated list of options. The execution interface will then display these options as a list or a set of checkboxes for selection. @@ -101,15 +101,15 @@ When **Enumerated** is selected as the type, users must define a comma-separated - **single_choice**: Allows the user to select one option from the list. - **multi_choice**: Allows the user to select multiple options from the list. -![Input enumerated](./imgs/edit_input_enumerated.png) +![Input enumerated](../_static/imgs/quickstart/edit_input_enumerated.png) --- -### **Outputs** +### Outputs The **Outputs** section allows users to define the outputs that will be generated by the method. By default, this section is empty, but users can add standard or custom outputs by using the buttons available. -![Outputs Section](./imgs/edit_output.png) +![Outputs Section](../_static/imgs/quickstart/edit_output.png) - **Green Button**: Adds `stdout` (standard output) to capture all standard messages generated by the method during execution. - **Red Button**: Adds `stderr` (standard error) to capture warnings and error messages generated during execution. @@ -119,7 +119,7 @@ Each output can be removed by clicking the **Trash** icon next to the correspond --- -### **Scripts** +### Scripts The **Scripts** section allows users to define the commands necessary for deploying and executing the method. The inputs provided in the form must be pre-processed based on their format before being used in these scripts. @@ -135,15 +135,15 @@ In the upcoming sections, we will discuss how to handle and process inputs in bo By using placeholders, the scripts dynamically incorporate the values provided during the execution configuration, allowing for flexible and reusable methods. -![Method Editor](./imgs/edit_script.png) +![Method Editor](../_static/imgs/quickstart/edit_script.png) --- -### **Outputs** +### Outputs The **Outputs** section allows users to define the outputs that will be generated by the method. By default, this section is empty, but users can add standard or custom outputs by using the buttons available. -![Outputs Section](./imgs/output_section.png) +![Outputs Section](../_static/imgs/quickstart/edit_output.png) - **Green Button**: Adds `stdout` (standard output) to capture all standard messages generated by the method during execution. - **Red Button**: Adds `stderr` (standard error) to capture warnings and error messages generated during execution. @@ -153,7 +153,7 @@ Each output can be removed by clicking the **Trash** icon next to the correspond -## **Deploy and Execute Scripts** +## Deploy and Execute Scripts The **Deploy and Execute Scripts** allow users to configure method-specific scripts for deployment and execution. @@ -162,6 +162,4 @@ The **Deploy and Execute Scripts** allow users to configure method-specific scri These scripts ensure that the method is correctly initialized and executed on the selected infrastructure. -![Scripts Section](./imgs/scripts_section.png) - ---- +![Scripts Section](../_static/imgs/quickstart/edit_script.png) \ No newline at end of file diff --git a/source/quickstart/10_method_json.md b/source/quickstart/01.6_method_json.md similarity index 100% rename from source/quickstart/10_method_json.md rename to source/quickstart/01.6_method_json.md diff --git a/source/quickstart/35_input_file_workspace.md b/source/quickstart/35_input_file_workspace.md deleted file mode 100644 index 2c4a463..0000000 --- a/source/quickstart/35_input_file_workspace.md +++ /dev/null @@ -1,6 +0,0 @@ -# Input file workspace - -Gate Cloud Annie Named Entity Recognizer 1.0.0 Marco Lettere - -[Gate Cloud Annie Named Entity Recognizer](../ccp_methods/Gate%20Cloud%20Annie%20Named%20Entity%20Recognizer-1.0.0.json) - diff --git a/source/quickstart/46_remote_api_auth_credentials.md b/source/quickstart/46_remote_api_auth_credentials.md deleted file mode 100644 index 4d07e8b..0000000 --- a/source/quickstart/46_remote_api_auth_credentials.md +++ /dev/null @@ -1,47 +0,0 @@ -# Client for External Api, with Basic Auth Credentials: - - -![input credentials ](./imgs/credentials.png) -```json -{ - "inputs": { - "credentials": { - "id": "credentials", - "title": "Credentials", - "description": "The Basic auth credentials", - "minOccurs": 1, - "maxOccurs": 1, - "schema": { - "type": "string", - "format": "secret", - "contentMediaType": "text/plain", - "default": "..." - } - } - }, - "additionalParameters": { - "parameters": [ - { - "name": "deploy-script", - "value": [ - "echo {{file}} | base64 -d > /ccp_data/input" - ] - }, - { - "name": "execute-script", - "value": [ - "wget {{baseurl}}/{{service}}?annotations={{annotations}} --post-file /ccp_data/input --header \"Authorization: Basic {{credentials}}\" --header \"Content-Type: {{contenttype}}\" --header \"Accept: application/json\" -O /ccp_data/annotated.json" - ] - }, - { - "name": "undeploy-script", - "value": [] - } - ] - } - -} -``` - -example [Gate Cloud Hate And Abuse Detection ](../ccp_methods/Gate%20Cloud%20Hate%20And%20Abuse%20Detection-1.0.0.json) - diff --git a/source/quickstart/index.rst b/source/quickstart/index.rst index 569226d..5307a91 100644 --- a/source/quickstart/index.rst +++ b/source/quickstart/index.rst @@ -1,5 +1,5 @@ Quickstart -========= +========== .. toctree:: :glob: diff --git a/source/usermanual/04_methods.md b/source/usermanual/04_methods.md index 81c3c4a..5aaec3e 100644 --- a/source/usermanual/04_methods.md +++ b/source/usermanual/04_methods.md @@ -265,66 +265,3 @@ The following two environmental valuables provide context for the execution. * **ccptaskid** is the index of the replica (1-based) when multiple replicas are requested with the input parameter ccpreplicas. This can be used to customise the behavior of a replica like accessing a slice of a dataset or writing output to different files. The following variables are related to the authentication and authorization context of the Method execution. They can be used to access D4Science services in a secure and convenient way also for very long lasting executions. - - -## How To - -### How to use `ccptaskid` to separate output of different replicas to different files in `execute-script`. - -``` bash - mkdir -p /ccp_data/output && echo $RANDOM >> /ccp_data/output/`printenv ccptaskid`.txt -``` - -* **ccpiamurl** is the URL of the Identity management service. -* **ccpclientid** is the client_id to be used for requesting token renewal. -* **ccprefreshtoken** is a refresh token by which new access tokens can be requested. -* **ccpcontext** represents the context (VO or VRE) in which the Method execution has been requested. - -As an example the following Python code shows how to use the variables to request a token renewal. - -*How to request a login token and an UMA token for accessing D4Science service from inside Method code* -```python -#Get auth info from env variables -refreshtoken = os.environ["ccprefreshtoken"] -context = os.environ["ccpcontext"] -clientid = os.environ["ccpclientid"] -iam = os.environ["ccpiamurl"] - -#Auth related functions -logindata = { 'grant_type' : 'refresh_token', 'client_id' : clientid, 'refresh_token' : refreshtoken} -loginheaders = { "Accept" : "application/json", "Content-Type" : "application/x-www-form-urlencoded"} - -umadata = { 'grant_type' : 'urn:ietf:params:oauth:grant-type:uma-ticket', 'audience' : context} -umaheaders = { "Accept" : "application/json", "Content-Type" : "application/x-www-form-urlencoded"} - -def getToken(): - # login with offline_token - resp1 = requests.post(iam, data=logindata, headers=loginheaders) - jwt = resp1.json() - #get UMA token for context - umaheaders["Authorization"] = "Bearer " + jwt["access_token"] - resp2 = requests.post(iam, data=umadata, headers=umaheaders) - return resp2.json()["access_token"] - -# Get valid token for context -tok = getToken() - -# List VRE fodler content -vrefolder = requests.get(workspace + "/vrefolder", headers={"Accept" : "application/json", "Authorization" : "Bearer " + tok}).json()s -``` - -A similar example in bash could have the following form: - -### How to download a file from the D4Science workspace from a private URL passed as input parameter - -```bash -echo "Getting token" -TOKEN=$(curl -X POST $ccpiamurl -d grant_type=refresh_token -d client_id=$ccpclientid -d refresh_token=$ccprefreshtoken -H "X-D4Science-Context: $ccpcontext" | jq -r '."access_token"') - -echo Downloading $wslink to $inputfile -curl -L $wslink -o $inputfile -H "Authorization: Bearer $TOKEN" - -echo "Downloaded" -``` - -A special folder is provided in the Runtime to a Method execution for storing output files. Files are currently the only way for a Method to output results by value. The folder is named **/ccp_data** and all the files written to this folder are returned in the context of the Execution as a zip archive. diff --git a/source/usermanual/05_howtos.md b/source/usermanual/05_howtos.md new file mode 100644 index 0000000..59b33a7 --- /dev/null +++ b/source/usermanual/05_howtos.md @@ -0,0 +1,63 @@ + + +# How To + +## How to use `ccptaskid` to separate output of different replicas to different files in `execute-script`. + +``` bash + mkdir -p /ccp_data/output && echo $RANDOM >> /ccp_data/output/`printenv ccptaskid`.txt +``` + +* **ccpiamurl** is the URL of the Identity management service. +* **ccpclientid** is the client_id to be used for requesting token renewal. +* **ccprefreshtoken** is a refresh token by which new access tokens can be requested. +* **ccpcontext** represents the context (VO or VRE) in which the Method execution has been requested. + +As an example the following Python code shows how to use the variables to request a token renewal. + +*How to request a login token and an UMA token for accessing D4Science service from inside Method code* +```python +#Get auth info from env variables +refreshtoken = os.environ["ccprefreshtoken"] +context = os.environ["ccpcontext"] +clientid = os.environ["ccpclientid"] +iam = os.environ["ccpiamurl"] + +#Auth related functions +logindata = { 'grant_type' : 'refresh_token', 'client_id' : clientid, 'refresh_token' : refreshtoken} +loginheaders = { "Accept" : "application/json", "Content-Type" : "application/x-www-form-urlencoded"} + +umadata = { 'grant_type' : 'urn:ietf:params:oauth:grant-type:uma-ticket', 'audience' : context} +umaheaders = { "Accept" : "application/json", "Content-Type" : "application/x-www-form-urlencoded"} + +def getToken(): + # login with offline_token + resp1 = requests.post(iam, data=logindata, headers=loginheaders) + jwt = resp1.json() + #get UMA token for context + umaheaders["Authorization"] = "Bearer " + jwt["access_token"] + resp2 = requests.post(iam, data=umadata, headers=umaheaders) + return resp2.json()["access_token"] + +# Get valid token for context +tok = getToken() + +# List VRE fodler content +vrefolder = requests.get(workspace + "/vrefolder", headers={"Accept" : "application/json", "Authorization" : "Bearer " + tok}).json()s +``` + +A similar example in bash could have the following form: + +### How to download a file from the D4Science workspace from a private URL passed as input parameter + +```bash +echo "Getting token" +TOKEN=$(curl -X POST $ccpiamurl -d grant_type=refresh_token -d client_id=$ccpclientid -d refresh_token=$ccprefreshtoken -H "X-D4Science-Context: $ccpcontext" | jq -r '."access_token"') + +echo Downloading $wslink to $inputfile +curl -L $wslink -o $inputfile -H "Authorization: Bearer $TOKEN" + +echo "Downloaded" +``` + +A special folder is provided in the Runtime to a Method execution for storing output files. Files are currently the only way for a Method to output results by value. The folder is named **/ccp_data** and all the files written to this folder are returned in the context of the Execution as a zip archive. diff --git a/source/usermanual/05_executions.md b/source/usermanual/07_executions.md similarity index 100% rename from source/usermanual/05_executions.md rename to source/usermanual/07_executions.md diff --git a/source/usermanual/06_widgets.md b/source/usermanual/07_widgets.md similarity index 100% rename from source/usermanual/06_widgets.md rename to source/usermanual/07_widgets.md diff --git a/source/usermanual/07_rest_api.md b/source/usermanual/08_rest_api.md similarity index 100% rename from source/usermanual/07_rest_api.md rename to source/usermanual/08_rest_api.md