System drift analysis service
This is a flask app that provides an API for drift-frontend. It listens on port 8080 by default with gunicorn. Prometheus stats will be stored in a temp directory.
- All python code must be python 3.8 compatible
- The code should follow linting from pylint
- The code should follow formatter from black
- The code should follow imports order from isort
- pipenv
- pre-commit
# installs pre-commit hooks into the repo
pre-commit install --install-hooks
# run pre-commit hooks for staged files
pre-commit run
# run pre-commit hooks for all files in repo
pre-commit run --all-files
# bump versions of the pre-commit hooks automatically
pre-commit autoupdate
# bypass pre-commit check
git commit --no-verify
yum install -y pipenv
pipenv install # will pull in deps and create virtualenv, and will print next steps to run
With your pipenv shell
activated.
Run: ./run_unit_tests.sh
to run all unit test. Since we use pytest
we can pass all pytest args to this script, for example:
- Run with verbose
./run_unit_tests.sh -vv
- Run only one test
./run_unit_tests.sh -k TEST_NAME
you can aggregate pytest args in same command, eg: ./run_unit_tests.sh -k TEST_NAME -vv
mktemp -d
prometheus_multiproc_dir=
mktemp -d INVENTORY_SVC_URL=<inventory service url> ./run_app.sh
LOG_LEVEL=debug prometheus_multiproc_dir=/tmp/tempdir INVENTORY_SVC_URL=<inventory service url> ./run_app.sh
The prometheus_multiproc_dir should be a path to a directory for sharing info between app processes. If the dir does not already exist, the app will create one.
The same info as above, but in handy table form:
env var name | required? | expected values | description |
---|---|---|---|
INVENTORY_SVC_URL | yes | URL | URL for inventory service (do not include path) |
LOG_LEVEL | no | string | lowercase log level (info by default) |
prometheus_multiproc_dir | yes | string | path to dir for sharing stats between processes |
PATH_PREFIX | no | string | API path prefix (default: /api ) |
APP_NAME | no | string | API app name (default: drift ) |
If you would like to use this service with insights-proxy, you can use the
included local-drift-backend.js
like so:
SPANDX_CONFIG=drift-backend/local-drift-backend.js bash insights-proxy/scripts/run.sh
If you use run_app.sh
, drift app will be invoked via gunicorn. This should be
OK in most cases; even pdb
runs fine inside of gunicorn.
However, if you want to use flask's server, use python3 standalone_flask_server.py
with the aforementioned environment vars.
- Make sure that you have SonarQube scanner installed.
- Duplicate the
sonar-scanner.properties.sample
config file.
cp sonar-scanner.properties.sample sonar-scanner.properties
- Update
sonar.host.url
,sonar.login
insonar-scanner.properties
. - Run the following command
java -jar /path/to/sonar-scanner-cli-4.6.0.2311.jar -D project.settings=sonar-scanner.properties
- Review the results in your SonarQube web instance.