-
Notifications
You must be signed in to change notification settings - Fork 0
/
blueprint.json
1 lines (1 loc) · 15.5 KB
/
blueprint.json
1
{"INTERNAL_STRUCTURE": {"Overview": {"name": "osr_hospital_vdc", "description": "This VDC provides information about biographical data and blood tests of the patients of Ospedale San Raffaele in Milan", "tags": [{"method_id": "getBloodTestComponentAverage", "tags": ["OSR", "patient", "hospital", "blood", "test", "component", "age-range", "research", "pseudonymization", "anonymization", "GDPR-compliance"]}, {"method_id": "getNutritionalData", "tags": ["OSR", "patient", "hospital", "nutritional", "data", "research"]}]}, "Data_Sources": [{"id": "patientBiographicalData", "description": "Relational database containing biographical data for the hospital patients", "class": "relational database", "type": "MySQL", "parameters": {"ip": "BIO_HOST", "port": "3306", "user": "BIO_USER", "password": "BIO_PASSWORD"}, "schema": {"type": "object", "properties": {"addressCity": {"type": "string"}, "addressRoad": {"type": "string"}, "addressRoadNumber": {"type": "integer"}, "addressPostalCode": {"type": "integer"}, "addressTelephoneNumber": {"type": "integer"}, "birthCity": {"type": "string"}, "nationality": {"type": "string"}, "job": {"type": "string"}, "schoolYears": {"type": "integer"}, "birthDate": {"type": "date"}, "gender": {"type": "string"}, "name": {"type": "string"}, "patientId": {"type": "string"}, "socialId": {"type": "string"}, "surname": {"type": "string"}, "familyDoctorId": {"type": "string"}}}}, {"id": "bloodTestSource", "description": "Minio source containing blood tests for the hospital patients", "class": "object storage", "type": "Minio", "parameters": {"spark_hadoop_fs_s3a_endpoint": "http://MINIO:9000", "spark_hadoop_fs_s3a_access_key": "ACCESS_KEY", "spark_hadoop_fs_s3a_secret_key": "SECRET_KEY", "spark_hadoop_fs_s3a_path_style_access": "true", "spark_hadoop_fs_s3a_impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "s3_filename": "s3a://ditas.ehealth-sample/ditas-blood-tests.parquet"}, "schema": {}}, {"id": "bmiTestSource", "description": "Minio source containing bmi tests for the hospital patients", "class": "object storage", "type": "Minio", "parameters": {"spark_hadoop_fs_s3a_endpoint": "http://MINIO:9000", "spark_hadoop_fs_s3a_access_key": "ACCESS_KEY", "spark_hadoop_fs_s3a_secret_key": "SECRET_KEY", "spark_hadoop_fs_s3a_path_style_access": "true", "spark_hadoop_fs_s3a_impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "s3_filename": "<<TODO>>"}, "schema": {}}, {"id": "strokeTestSource", "description": "Minio source containing stroke tests for the hospital patients", "class": "object storage", "type": "Minio", "parameters": {"spark_hadoop_fs_s3a_endpoint": "http://MINIO:9000", "spark_hadoop_fs_s3a_access_key": "ACCESS_KEY", "spark_hadoop_fs_s3a_secret_key": "SECRET_KEY", "spark_hadoop_fs_s3a_path_style_access": "true", "spark_hadoop_fs_s3a_impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "s3_filename": "<<TODO>>"}, "schema": {}}], "Methods_Input": {"Methods": [{"method_id": "getBloodTestComponentAverage", "dataSources": [{"dataSource_id": "patientBiographicalData", "dataSource_type": "relational", "database": [{"database_id": "patient_db", "tables": [{"table_id": "Patient", "columns": [{"column_id": "patientId", "computeDataUtility": true}, {"column_id": "birthDate", "computeDataUtility": true}]}]}]}, {"dataSource_id": "bloodTestSource", "dataSource_type": "object storage", "database": [{"database_id": "TO BE INVESTIGATED", "tables": [{"table_id": "BloodTest", "columns": [{"column_id": "patientId", "computeDataUtility": true}, {"column_id": "date", "computeDataUtility": true}, {"column_id": "haemoglobin", "computeDataUtility": true}, {"column_id": "totalWhiteCellCount", "computeDataUtility": true}, {"column_id": "plateletCount", "computeDataUtility": true}, {"column_id": "prothrombinTime", "computeDataUtility": true}, {"column_id": "antiThrombin", "computeDataUtility": true}, {"column_id": "fibrinogen", "computeDataUtility": true}, {"column_id": "cholesterolTriglycerides", "computeDataUtility": true}, {"column_id": "cholesterolHdl", "computeDataUtility": true}, {"column_id": "cholesterolLdl", "computeDataUtility": true}, {"column_id": "cholesterolTotal", "computeDataUtility": true}]}]}]}]}, {"method_id": "getNutritionalData", "dataSources": [{"dataSource_id": "patientBiographicalData", "dataSource_type": "relational", "database": [{"database_id": "patient_db", "tables": [{"table_id": "Patient", "columns": [{"column_id": "patientId", "computeDataUtility": true}, {"column_id": "birthDate", "computeDataUtility": true}, {"column_id": "gender", "computeDataUtility": true}]}]}]}, {"dataSource_id": "bloodTestSource", "dataSource_type": "object storage", "database": [{"database_id": "TO BE INVESTIGATED", "tables": [{"table_id": "BloodTest", "columns": [{"column_id": "patientId", "computeDataUtility": true}, {"column_id": "date", "computeDataUtility": true}, {"column_id": "cholesterolTotal", "computeDataUtility": true}]}]}]}, {"dataSource_id": "bmiTestSource", "dataSource_type": "object storage", "database": [{"database_id": "TO BE INVESTIGATED", "tables": [{"table_id": "BMITest", "columns": [{"column_id": "patientId", "computeDataUtility": true}, {"column_id": "date", "computeDataUtility": true}, {"column_id": "Bmi", "computeDataUtility": true}]}]}]}, {"dataSource_id": "strokeTestSource", "dataSource_type": "object storage", "database": [{"database_id": "TO BE INVESTIGATED", "tables": [{"table_id": "BMITest", "columns": [{"column_id": "patientId", "computeDataUtility": true}, {"column_id": "hadStroke", "computeDataUtility": true}]}]}]}]}]}, "Flow": {"platform": "Spark", "parameters": {"spark_master": "spark://SPARK:7077", "spark_app_name": "PatientBloodTestsVDC", "spark_jars": "mysql-connector-java-5.1.45/mysql-connector-java-5.1.45-bin.jar,hadoop-aws-3.0.0.jar,aws-java-sdk-bundle-1.11.271.jar"}}, "DAL_Images": {"osr-dal": {"images": {"default": {"internal_port": 30052, "external_port": 30052, "image": "153.92.30.225:5050/ehealth-dal", "environment": {"FTP_URL": "${shared_space_url}", "FTP_USERNAME": "${shared_space_username}", "FTP_PASSWORD": "${shared_space_password}", "MINIO_URI": "http://${bloodTestSource.name}:${bloodTestSource.port}", "MINIO_ACCESS_KEY": "${bloodTestSource.access_key}", "MINIO_SECRET_KEY": "${bloodTestSource.secret_key}", "MYSQL_URI": "jdbc:mysql://${patientBiographicalData.name}:${patientBiographicalData.port}/ditas_dummy_example?autoReconnect=true&useSSL=false", "MYSQL_USERNAME": "${patientBiographicalData.username}", "MYSQL_PASSWORD": "${patientBiographicalData.password}", "POLICY_ENFORCEMENT_URI": "http://localhost:8083/rewrite-sql-query", "KEYCLOAK_PUBLIC_KEY_URI": "${keycloack_url}/auth/realms/${keycloack_realm}/protocol/openid-connect/certs"}}}, "original_ip": "178.22.71.88"}}, "VDC_Images": {"caf": {"internal_port": 9000, "image": "153.92.30.225:5050/ehealth-vdc", "environment": {"PLAY_HTTP_SECRET": "${random}", "DAL_URI": "osr-dal", "DAL_PORT": "${dal.osr-dal.default.port}"}}}, "Identity_Access_Management": {"jwks_uri": "https://keycloak.service/protocol/openid-connect/certs", "iam_endpoint": "https://keycloak.service/", "roles": ["InternalResearcher", "ExternalResearcher"]}, "Testing_Output_Data": [{"method_id": "getBloodTestComponentAverage", "zip_data": "http://localhost:8080"}, {"method_id": "getNutritionalData", "zip_data": "https://github.com/DITAS-Project/data-utility-evaluator/blob/master/dataset/getNutritionalData.zip?raw=true"}]}, "DATA_MANAGEMENT": [{"method_id": "getNutritionalData", "attributes": {"dataUtility": [{"id": "volume_8000", "description": "volume 8000", "type": "Volume", "properties": {"volume": {"value": 2000, "unit": "tuple"}}}, {"id": "accuracy_08", "description": "Accuracy", "type": "Accuracy", "properties": {"accuracy": {"minimum": 80, "unit": "percentage"}}}, {"id": "processCompleteness_8", "description": "Process completeness 8", "type": "Process completeness", "properties": {"completeness": {"minimum": 80, "unit": "percentage"}}}, {"id": "timeliness", "description": "Timeliness", "type": "Timeliness", "properties": {"timeliness": {"minimum": 90, "unit": "percentage"}}}, {"id": "responseTime", "description": "ResponseTime", "type": "ResponseTime", "properties": {"responseTime": {"maximum": 0.5, "unit": "second"}}}, {"id": "availability", "description": "Availability", "type": "Availability", "properties": {"availability": {"unit": "percentage", "minimum": 95}}}], "security": [{"id": "encryption_AES128", "description": "Encryption AES 128", "type": "TransportEncryption", "properties": {"protocol": {"unit": "enum", "value": "TLS"}, "algorithm": {"unit": "list", "value": ["TLS_AES_256_GCM_SHA384", "TLS_AES_128_GCM_SHA256", "TLS_AES_128_CCM_8_SHA256", "TLS_AES_128_CCM_SHA256"]}, "keyLength": {"unit": "number", "value": 128}}}, {"id": "tracing_1", "description": "Tracing 1", "type": "Tracing", "properties": {"level": {"unit": "enum", "value": "datasource"}, "sampleRate": {"unit": "percentage", "value": 1}, "instrumentation": {"unit": "enum", "value": "VDC"}}}, {"id": "acl_userPW_researcher", "description": "ACL username/password researcher_id", "type": "Protocol", "properties": {"required": {"value": "true"}, "protocol": {"unit": "enum", "value": "username/password"}, "credentials": {"unit": "list", "value": ["researcher_id"]}}}], "privacy": [{"id": "purposeControl_research", "description": "PurposeControl research", "type": "PurposeControl", "properties": {"availablePurpose": {"unit": "list", "value": ["research", "medical research", "nutritional research"]}, "allowedGuarantor": {"unit": "list", "value": ["d63d0e21fdc05f618d55ef306c54af82"]}}}]}}, {"method_id": "getBloodTestComponentAverage", "attributes": {"dataUtility": [{"id": "volume_8000", "description": "volume 8000", "type": "Volume", "properties": {"volume": {"minimum": 8000, "unit": "tuple"}}}, {"id": "accuracy_08", "description": "Accuracy", "type": "Accuracy", "properties": {"accuracy": {"minimum": 80, "unit": "percentage"}}}, {"id": "processCompleteness_8", "description": "Process completeness 8", "type": "Process completeness", "properties": {"completeness": {"minimum": 80, "unit": "percentage"}}}, {"id": "timeliness", "description": "Timeliness", "type": "Timeliness", "properties": {"timeliness": {"minimum": 90, "unit": "percentage"}}}, {"id": "responseTime", "description": "ResponseTime", "type": "ResponseTime", "properties": {"responseTime": {"maximum": 0.5, "unit": "second"}}}, {"id": "availability", "description": "Availability", "type": "Availability", "properties": {"availability": {"unit": "percentage", "minimum": 95}}}], "security": [{"id": "encryption_AES128", "description": "Encryption AES 128", "type": "TransportEncryption", "properties": {"protocol": {"unit": "enum", "value": "TLS"}, "algorithm": {"unit": "list", "value": ["TLS_AES_256_GCM_SHA384", "TLS_AES_128_GCM_SHA256", "TLS_AES_128_CCM_8_SHA256", "TLS_AES_128_CCM_SHA256"]}, "keyLength": {"unit": "number", "value": 128}}}, {"id": "tracing_1", "description": "Tracing 1", "type": "Tracing", "properties": {"level": {"unit": "enum", "value": "datasource"}, "sampleRate": {"unit": "percentage", "value": 1}, "instrumentation": {"unit": "enum", "value": "VDC"}}}, {"id": "acl_userPW_researcher", "description": "ACL username/password researcher_id", "type": "Protocol", "properties": {"required": {"value": "true"}, "protocol": {"unit": "enum", "value": "username/password"}, "credentials": {"unit": "list", "value": ["researcher_id"]}}}], "privacy": [{"id": "purposeControl_research", "description": "PurposeControl research", "type": "PurposeControl", "properties": {"availablePurpose": {"unit": "list", "value": ["research", "medical research", "nutritional research"]}, "allowedGuarantor": {"unit": "list", "value": ["d63d0e21fdc05f618d55ef306c54af82"]}}}]}}], "ABSTRACT_PROPERTIES": {}, "COOKBOOK_APPENDIX": {"Resources": {"name": "osr-resources-cloudsigma", "description": "OSR resources at Cloudsigma available to our clients", "infrastructures": [{"name": "infr-cloudsigma", "type": "cloud", "provider": {"api_endpoint": "https://fra.cloudsigma.com/api/2.0", "api_type": "cloudsigma", "credentials": {"username": "ditas@eservices4life.org", "password": "ASK-FOR-IT"}, "secret_id": ""}, "extra_properties": {"kubeadm_preinstalled_image": "true", "owner": "DataAdministrator", "ditas_default": "true"}, "resources": [{"name": "osr-c1", "cpu": 4000, "ram": 4096, "disk": 40960, "drives": [{"name": "osr-c1-d1", "size": 10000, "type": "SSD"}], "image_id": "d681bc39-df58-4301-8aa5-0b61b2d4de17", "role": "master", "extra_properties": {"cloudsigma_boot_drive_type": "custom"}}, {"name": "osr-c2", "cpu": 4000, "ram": 4096, "disk": 40960, "drives": [{"name": "osr-c2-d1", "size": 10000, "type": "SSD"}], "image_id": "d681bc39-df58-4301-8aa5-0b61b2d4de17", "role": "slave", "extra_properties": {"cloudsigma_boot_drive_type": "custom"}}]}]}}, "EXPOSED_API": {"openapi": "3.0.1", "info": {"title": "CAF API", "version": "0.0.2"}, "paths": {"/nutritional-data/{filter}": {"get": {"summary": "Get patients nutritional data given some filters", "description": "This method returns gender, age, BMI, cholesterol of patients that have / do not have a specified pathology", "operationId": "getNutritionalData", "parameters": [{"name": "Authorization", "in": "header", "description": "Authorization token", "required": true, "schema": {"type": "string"}}, {"name": "filter", "in": "path", "description": "Filter for selecting patients that have / do not have a specified pathology", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Average value for the specified component in the selected age range", "content": {"application/json": {"schema": {"type": "object", "properties": {"data": {"type": "array", "items": {"type": "object", "properties": {"gender": {"type": "string"}, "age": {"type": "integer"}, "bmi": {"type": "number"}, "cholesterol": {"type": "number"}}, "required": ["gender", "age", "bmi", "cholesterol"]}, "minItems": 1}, "_links": {"type": "object", "properties": {"self": {"type": "object", "properties": {"href": {"type": "string"}}, "required": ["href"]}}, "required": ["self"]}}, "required": ["data", "_links"]}}}}, "404": {"description": "No patient matching the specified filter"}}, "x-data-sources": ["patientBiographicalData", "bmiTestSource"]}}, "/blood-test/component/{component}/average/{startAgeRange}-{endAgeRange}": {"get": {"summary": "Get average of component over an age range", "description": "This method returns the average value for a specific blood test component in a specific age range, to be used by researchers. Since data are for researchers, patients' identifiers and quasi-identifiers won't be returned, making the output of this method anonymized.", "operationId": "getBloodTestComponentAverage", "parameters": [{"name": "Authorization", "in": "header", "description": "Authorization token", "required": true, "schema": {"type": "string"}}, {"name": "component", "in": "path", "description": "Blood test component for which the last value is requested", "required": true, "schema": {"type": "string"}}, {"name": "startAgeRange", "in": "path", "description": "Start age in age range", "required": true, "schema": {"type": "number"}}, {"name": "endAgeRange", "in": "path", "description": "End age in age range", "required": true, "schema": {"type": "number"}}], "responses": {"200": {"description": "Average value for the specified component in the selected age range", "content": {"application/json": {"schema": {"type": "object", "properties": {"value": {"type": "number"}, "_links": {"type": "object", "properties": {"self": {"type": "object", "properties": {"href": {"type": "string"}}, "required": ["href"]}}, "required": ["self"]}}, "required": ["value", "_links"]}}}}, "404": {"description": "Component never measured"}}, "x-data-sources": ["bloodTestSource"]}}}}}