From cac2cf9a9a64dc7ffb8dc478498ae663d09309ca Mon Sep 17 00:00:00 2001 From: Victor Rocheleau Date: Mon, 16 Sep 2024 13:39:57 -0400 Subject: [PATCH] chore(docs): discovery documentation details --- docs/deployment.md | 8 ++++ docs/img/discovery_proj_creation.png | Bin 0 -> 27158 bytes docs/img/discovery_proj_edit.png | Bin 0 -> 20573 bytes docs/public_discovery.md | 64 ++++++++++++++++++++++----- 4 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 docs/img/discovery_proj_creation.png create mode 100644 docs/img/discovery_proj_edit.png diff --git a/docs/deployment.md b/docs/deployment.md index 1f3e2d6a..41e869f5 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -99,3 +99,11 @@ ls certs/gateway/letsencrypt/live/ ``` If all went well, the `old-bento.example.com` domain should be redirected to `bento.example.com` in a browser. + +## Discovery configuration + +Bento can serve censored data publicly if configured to do so, this allows anonymous users to take a glimpse into the +data hosted by a Bento node. + +When deploying a Bento instance, make sure that the discovery settings are configured properly at the necessary levels. +Consult the [public discovery](./public_discovery.md) documentation for more details. diff --git a/docs/img/discovery_proj_creation.png b/docs/img/discovery_proj_creation.png new file mode 100644 index 0000000000000000000000000000000000000000..f2508f9f8117e58b72ee6c76d385c2f04d16648c GIT binary patch literal 27158 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°6tjF(BOjFN(o@Ea5fHMTF}a!AmbW#3!Kdgac8 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 -Q%-KsZkM@ncnf;t0so?N_5Mj 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 Tj}n0BzZ2%hHb%8Ky`KFGjSr~g literal 0 HcmV?d00001 diff --git a/docs/public_discovery.md b/docs/public_discovery.md index 5665b937..90246066 100644 --- a/docs/public_discovery.md +++ b/docs/public_discovery.md @@ -2,37 +2,79 @@ New in Bento v17. -Previously, the public data configuration given to Katsu was applied on all the metadata contained in the service. -This configuration declares which fields can be queried publicly for discovery purposes, which charts to display -and which censorship rules to apply on the results. +Previously, the public data configuration given to Katsu (`lib/katsu/config.json`) was applied on all the metadata +contained in the service. This configuration declares which fields can be queried publicly for discovery purposes, +which charts to display and which censorship rules to apply on the results. Katsu can hold multiple projects/datasets that may use different fields, require specific charts or custom `extra_properties` schemas at the project level. -Therefore, there is a need to tailor the discovery configuration at different levels. +Therefore, there is a need to tailor the discovery configuration at different levels to properly represent the +particularities in the information of a project or dataset. Bento v17 gives the ability to specify a scoped Discovery configuration at the following levels: - Dataset - Optional at dataset creation - For scoped queries on public endpoints targeting a project and dataset: - - Katsu will use the dataset's discovery configuration + - Katsu will use the dataset's discovery configuration, if one exists. - If no configuration is found, fallsback on the parent project's discovery - Project - Optional at project creation - For scoped queries on public endpoints targeting a project only: - - Katsu will use the project's discovery configuration + - Katsu will use the project's discovery configuration, if one exists. - If no configuration is found, fallsback on the node's config - Node - Optional during Katsu deployment - Uses the legacy `lib/katsu/config.json` file mount - For non-scoped queries on public endpoints: - - Katsu will use the node's discovery, if there is one. + - Katsu will use the node's discovery, if one exists. - If no node configuration is found, Katsu will respond with a 404 status. - For scoped queries on public endpoints: - Katsu will fallback on the node's discovery if the project and/or dataset in the scope don't have one - If no node configuration is found, Katsu will respond with a 404 status. -In previous versions of Bento, the bento_public web application could only show the aggregated data of all projects and datasets. -Now, bento_public users can select a project/dataset scope in order to only retrieve the data contained in it. -Given that projects/datasets use different fields or may have custom extra properties, depending on the study, you can now -declare the fields and charts of interest at the relevant level. +## Creating a discovery configuration file. + +Follow these steps in order to add public discovery for a given scope. + +1. Decide at which level the discovery configuration will be applied. +2. Create a copy of `etc/katsu.config.example.json`, use it as a base template +3. Modify the `fields` section so that it includes the fields of interest. +4. Modify the `search` section, include the fields from the previous section to make them searchable +5. Modify the `overview` section in order to specify which fields should be rendered as charts and how. +6. Set the desired censorship rules in the `rules` section. + +The resulting JSON file needs to respect the JSON-schema defined in Katsu [here](https://github.com/bento-platform/katsu/blob/develop/chord_metadata_service/discovery/schemas.py). + +## Using a discovery configuration file. + +With the valid discovery configuration file in hand, you can now add it to Katsu. + +### Apply the discovery configuration at the node level: + +This operation must be done by a Bento node administrator. +```bash +# Move the file to Katsu's config volume +cp ./lib/katsu/config.json + +# restart Katsu to load the config. +./bentoctl.bash restart katsu +``` + +### Apply the discovery configuration at the project or dataset level + +These operations must be performed in `bento_web` by an authenticated user +with the `edit:dataset`, `create:dataset`, `edit:project`, `create:project` permissions. + +Before creating/editing a project/dataset to specify a discovery configuration, +make sure that the JSON file is in Bento's dropbox. + +At project/dataset creation, leaving the discovery field empty is permitted. +Specify a discovery config by selecting the desired file from the drop-down options. + +![Specifying a discovery at project creation.](./img/discovery_proj_creation.png) + +During project/dataset editing, three radio buttons are shown, allowing the user to pick the existing value, +a new value from file, or none. The 'none' option is equivalent to leaving the field empty at creation. + +![Modifying the discovery when editing a project](./img/discovery_proj_edit.png)