Package: ocean-brizo
BrizoHelping publishers provide extended data services (e.g. storage and compute).oceanprotocol.com"🏄‍♀️🌊 Brizo is an ancient Greek goddess who was known as the protector of mariners, sailors, and fishermen.
She was worshipped primarily by the women of Delos, who set out food offerings in small boats. Brizo was also known as a prophet specializing in the interpretation of dreams."🐲🦑 THERE BE DRAGONS AND SQUIDS. This is in alpha state and you can expect running into problems. If you run into them, please open upa new issue. 🦑🐲Table of ContentsFeaturesRunning Locally, for Dev and TestAPI documentationConfigurationDependenciesCode StyleTestingDebuggingNew VersionLicenseFeaturesIn the Ocean ecosystem, Brizo is the technical component executed by the Publishers
allowing them to provide extended data services (e.g. storage and compute).
Brizo, as part of the Publisher ecosystem, includes the credentials to interact
with the infrastructure (initially cloud, but could be on-premise).The main features available in Brizo:Data access - using the/services/consumeendpoint. The data set file(s) are streamed
back to the user without exposing the actual URLCompute-to-data - using the/services/computeendpoint. The compute algorithm
is executed remotely use the compute provider's Service Operator endpoint.Details of the main features can be found in theBrizo API documentationRunning Locally, for Dev and TestIf you want to contribute to the development of Brizo, then you could do the following. (If you want to run a Brizo in production, then you will have to do something else.)First, clone this repository:gitclonegit@github.com:oceanprotocol/brizo.gitcdbrizo/Before running it locally we recommend to set up virtual environment:virtualenvvenv-ppython3.6sourcevenv/bin/activateAnd install all the requirements:pip install -r requirements_dev.txtThen run some things that Brizo expects to be running:gitclonegit@github.com:oceanprotocol/barge.gitcdbarge
bashstart_ocean.sh--no-brizo--no-commonsBarge is the repository where all the Ocean Docker Compose files are located.
We are running the scriptstart_ocean.sh --no-brizo: the easy way to have Ocean projects
up and running. We run without a Brizo instance.To learn more about Barge, visitthe Barge repository.Note that it runs an Aquarius instance and an Elasticsearch instance but Aquarius can
also work with BigchainDB or MongoDB.The most simple way to start is:pipinstall-rrequirements_dev.txtexportFLASK_APP=brizo/run.pyexportCONFIG_FILE=config.ini
./scripts/wait_for_migration_and_extract_keeper_artifacts.shexportPROVIDER_ADDRESS="your ethereum address goes here"# Set one of the followingexportPROVIDER_KEY="the private key"exportPROVIDER_ENCRYPTED_KEY="The encrypted key json from the keyfile"exportPROVIDER_KEYFILE="your ethereum address goes here"# and set the password if using either PROVIDER_KEYFILE or PROVIDER_ENCRYPTED_KEYexportPROVIDER_PASSWORD="password to allow decrypting the encrypted key"flaskrun--port=8030That will use HTTP (i.e. not SSL/TLS).The proper way to run the Flask application is using an application
server such as Gunicorn. This allow you to run using SSL/TLS. You
can generate some certificates for testing by doing:opensslreq-x509-newkeyrsa:4096-nodes-outcert.pem-keyoutkey.pem-days365and when it asks for the Common Name (CN), answerlocalhostThen edit the config fileconfig.iniso that:brizo.url = https://localhost:8030Then execute this command:gunicorn--certfilecert.pem--keyfilekey.pem-b0.0.0.0:8030-w1brizo.run:appAPI documentationOnce you have Brizo running you can get access to the API documentation at:https://127.0.0.1:8030/api/v1/docsThere is also someBrizo API documentation in the official Ocean docs.ConfigurationTo get configuration settings, Brizo first checks to see if there is a non-empty
environment variable named CONFIG_FILE. It there is, it will look in a config file
at that path. Otherwise it will look in a config file namedconfig.ini. Note
that some settings in the config file can be overridden by setting certain
environment variables; there are more details below.See theexample config.ini file in this repo. You will see that
there are three sections:[keeper-contracts],[resources]and[osmosis].The [keeper-contracts] and [resources] SectionsThe[keeper-contracts]section is used to setup connection to the keeper nodes
and load keeper-contracts artifacts.The[resources]sections is used to configure:Default Metadata store (Aquarius) URIDefault Brizo URIOperator Service URI for for requesting compute servicesThe [osmosis] SectionThe[osmosis]section of the config file is where a provider puts their own
credentials for various third-party services, such as Azure Storage.
Brizo could support files with the following kinds of URLs:files in Azure Storage: files with "core.windows.net" in their URLsfiles in Amazon S3 storage: files with "s3://" in their URLsfiles on ipfs: files URLs starting with "ipfs://"files in on-premise storage: all other files with resolvable URLsA publisher can choose to support any of the above or build their own custom driver. It depends
on which cloud providers they use.If a publisher wants to store some files in Azure Storage (and make them available
from there), then they must get and set the following config settings in the [osmosis]
section of the config file. There is
anOcean tutorial about how to get all those credentials from Azure.[osmosis]azure.account.name=<Azure Storage Account Name (for storing files)>azure.account.key=<Azure Storage Account key>azure.resource_group=<Azure resource group>azure.location=<Azure Region>azure.client.id=<Azure Application ID>azure.client.secret=<Azure Application Secret>azure.tenant.id=<Azure Tenant ID>azure.subscription.id=<Azure Subscription>; azure.share.input and azure.share.output are only used; for Azure Compute data assets (not for Azure Storage data assets).; If you're not supporting Azure Compute, just leave their values; as compute and output, respectively.azure.share.input=computeazure.share.output=outputYou can override any of those config file settings by setting one or more of the
following environment variables. You will want to do that if you're running Brizo
in a container.AZURE_ACCOUNT_NAME
AZURE_ACCOUNT_KEY
AZURE_RESOURCE_GROUP
AZURE_LOCATION
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
AZURE_TENANT_ID
AZURE_SUBSCRIPTION_ID
# Just always set AZURE_SHARE_INPUT='compute' for now
AZURE_SHARE_INPUT='compute'
# Just always set AZURE_SHARE_OUTPUT='output' for now
AZURE_SHARE_OUTPUT='output'If a publisher wants to store some files in Amazon S3 storage (and make them
available from there), then there are no AWS-related config settings to set
in the config file. AWS credentials actually get stored elsewhere. Seethe Ocean tutorial about how to set up Amazon S3 storage.If a publisher wants to support files on IPFS storage, the only requirement is to
set the environment variableIPFS_GATEWAYwhich defaults to "https://gateway.ipfs.io"
in theosmosis-ipfs-driver.If a publisher wants to store some files on-premise (and make them available
from there), then there are no special config settings to set in the config
file. The only requirement is that the file URLs must be resolvable by Brizo.
Seethe Ocean tutorial about how to set up on-premise storage.Compute-to-Data setupDo the following to support the Compute to data feature:Set the Operator Service URI using one of the following:In config.ini underoperator_service.urlin theresourcessectionEnvironment variableOPERATOR_SERVICE_URLAdd the Provider ethereum address to the Operator Service list of providers. The
Operator Service only accepts requests signed by known providersSetup the Operator Service, Operator Engine and the Kubernetes infrastructure,
more details hereOperator ServiceDependenciesBrizo relies on the following Ocean libraries:ocean-utilsprovides common functions and datastructures for interaction with the Ocean Protocol componentsocean-keeperhandles all of thekeeperinteractionsocean-secret-store-clientto encrypt/decrypt the dataset urlsosmosis-azure-drivermediates access to assets in Azureosmosis-aws-drivermediates access to assets in AWSosmosis-on-premise-drivermediates access to on-premise assetsCode StyleInformation about our Python code style is documented in thepython-developer-guideand thepython-style-guide.TestingAutomatic tests are setup via Travis (in .travis.yaml config file),
executingtox(see the tox.ini file).
Our tests use the pytest framework.DebuggingTo debug Brizo using PyCharm, follow the next instructions:Clonebargerepository.Run barge omittingbrizo. (i.e.:bash start_ocean.sh --no-brizo --no-commons --local-nile-node)In PyCharm, go toSettings > Project Settings > Python Debugger, and select the optionGevent CompatibleConfigure a new debugger configuration:Run > Edit Configurations..., there click onAdd New ConfigurationConfigure as shown in the next image:Set the following environment variables:PYTHONUNBUFFERED=1
CONFIG_FILE=config.ini
AZURE_ACCOUNT_NAME=<COMPLETE_WITH_YOUR_DATA>
AZURE_TENANT_ID=<COMPLETE_WITH_YOUR_DATA>
AZURE_SUBSCRIPTION_ID=<COMPLETE_WITH_YOUR_DATA>
AZURE_LOCATION=<COMPLETE_WITH_YOUR_DATA>
AZURE_CLIENT_SECRET=<COMPLETE_WITH_YOUR_DATA>
AZURE_CLIENT_ID=<COMPLETE_WITH_YOUR_DATA>
AZURE_ACCOUNT_KEY=<COMPLETE_WITH_YOUR_DATA>
AZURE_RESOURCE_GROUP=<COMPLETE_WITH_YOUR_DATA>
OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YESThe optionOBJC_DISABLE_INITIALIZE_FORK_SAFETYis needed if you run in last versions of MacOS.Now you can configure your breakpoints and debug brizo.New VersionThebumpversion.shscript helps to bump the project version. You can execute
the script using as first argument {major|minor|patch} to bump the version accordingly.LicenseCopyright 2018 Ocean Protocol Foundation Ltd.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.