-
Notifications
You must be signed in to change notification settings - Fork 298
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #557 from grafana/dev
Merge dev to main
- Loading branch information
Showing
66 changed files
with
1,215 additions
and
1,337 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,7 @@ | |
*/db.sqlite3 | ||
*.pyc | ||
venv | ||
.python-version | ||
.env | ||
.env_hobby | ||
.vscode | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,22 @@ | ||
* [Developer quickstart](#developer-quickstart) | ||
* [Code style](#code-style) | ||
* [Backend setup](#backend-setup) | ||
* [Frontend setup](#frontend-setup) | ||
* [Slack application setup](#slack-application-setup) | ||
* [Update drone build](#update-drone-build) | ||
* [Troubleshooting](#troubleshooting) | ||
* [ld: library not found for -lssl](#ld-library-not-found-for--lssl) | ||
* [Could not build wheels for cryptography which use PEP 517 and cannot be installed directly](#could-not-build-wheels-for-cryptography-which-use-pep-517-and-cannot-be-installed-directly) | ||
* [django.db.utils.OperationalError: (1366, "Incorrect string value ...")](#djangodbutilsoperationalerror-1366-incorrect-string-value-) | ||
* [Empty queryset when filtering against datetime field](#empty-queryset-when-filtering-against-datetime-field) | ||
* [Hints](#hints) | ||
* [Building the all-in-one docker container](#building-the-all-in-one-docker-container) | ||
* [Running Grafana with plugin (frontend) folder mounted for dev purposes](#running-grafana-with-plugin-frontend-folder-mounted-for-dev-purposes) | ||
* [How to recreate the local database](#recreating-the-local-database) | ||
* [Running tests locally](#running-tests-locally) | ||
* [IDE Specific Instructions](#ide-specific-instructions) | ||
* [PyCharm](#pycharm) | ||
- [Developer quickstart](#developer-quickstart) | ||
- [Code style](#code-style) | ||
- [Backend setup](#backend-setup) | ||
- [Frontend setup](#frontend-setup) | ||
- [Slack application setup](#slack-application-setup) | ||
- [Update drone build](#update-drone-build) | ||
- [Troubleshooting](#troubleshooting) | ||
- [ld: library not found for -lssl](#ld-library-not-found-for--lssl) | ||
- [Could not build wheels for cryptography which use PEP 517 and cannot be installed directly](#could-not-build-wheels-for-cryptography-which-use-pep-517-and-cannot-be-installed-directly) | ||
- [django.db.utils.OperationalError: (1366, "Incorrect string value ...")](#djangodbutilsoperationalerror-1366-incorrect-string-value-) | ||
- [Empty queryset when filtering against datetime field](#empty-queryset-when-filtering-against-datetime-field) | ||
- [Hints](#hints) | ||
- [Building the all-in-one docker container](#building-the-all-in-one-docker-container) | ||
- [Running Grafana with plugin (frontend) folder mounted for dev purposes](#running-grafana-with-plugin-frontend-folder-mounted-for-dev-purposes) | ||
- [How to recreate the local database](#recreating-the-local-database) | ||
- [Running tests locally](#running-tests-locally) | ||
- [IDE Specific Instructions](#ide-specific-instructions) | ||
- [PyCharm](#pycharm) | ||
|
||
## Developer quickstart | ||
|
||
### Code style | ||
|
@@ -29,13 +29,23 @@ | |
### Backend setup | ||
|
||
1. Start stateful services (RabbitMQ, Redis, Grafana with mounted plugin folder) | ||
|
||
```bash | ||
docker-compose -f docker-compose-developer.yml up -d | ||
``` | ||
|
||
NOTE: to use a PostgreSQL db backend, use the `docker-compose-developer-pg.yml` file instead. | ||
|
||
2. Prepare a python environment: | ||
2. `postgres` is a dependency on some of our Python dependencies (notably `psycopg2` ([docs](https://www.psycopg.org/docs/install.html#prerequisites))). To install this on Mac you can simply run: | ||
|
||
```bash | ||
brew install postgresql@14 | ||
``` | ||
|
||
For non Mac installation please visit [here](https://www.postgresql.org/download/) for more information on how to install. | ||
|
||
3. Prepare a python environment: | ||
|
||
```bash | ||
# Create and activate the virtual environment | ||
python3.9 -m venv venv && source venv/bin/activate | ||
|
@@ -67,8 +77,8 @@ python manage.py migrate | |
python manage.py createsuperuser | ||
``` | ||
|
||
4. Launch the backend: | ||
|
||
3. Launch the backend: | ||
```bash | ||
# Http server: | ||
python manage.py runserver 0.0.0.0:8080 | ||
|
@@ -80,14 +90,14 @@ python manage.py start_celery | |
celery -A engine beat -l info | ||
``` | ||
|
||
4. All set! Check out internal API endpoints at http://localhost:8080/. | ||
|
||
5. All set! Check out internal API endpoints at http://localhost:8000/. | ||
|
||
### Frontend setup | ||
|
||
1. Make sure you have [NodeJS v.14+ < 17](https://nodejs.org/) and [yarn](https://yarnpkg.com/) installed. | ||
1. Make sure you have [NodeJS v.14+ < 17](https://nodejs.org/) and [yarn](https://yarnpkg.com/) installed. **Note**: If you are using [`nvm`](https://github.com/nvm-sh/nvm) feel free to simply run `cd grafana-plugin && nvm install` to install the proper Node version. | ||
|
||
2. Install the dependencies with `yarn` and launch the frontend server (on port `3000` by default) | ||
|
||
```bash | ||
cd grafana-plugin | ||
yarn install | ||
|
@@ -96,19 +106,21 @@ yarn watch | |
``` | ||
|
||
3. Ensure /grafana-plugin/provisioning has no grafana-plugin.yml | ||
|
||
4. Generate an invitation token: | ||
|
||
```bash | ||
cd engine; | ||
python manage.py issue_invite_for_the_frontend --override | ||
``` | ||
|
||
... or use output of all-in-one docker container described in the README.md. | ||
|
||
5. Open Grafana in the browser http://localhost:3000 (login: oncall, password: oncall) notice OnCall Plugin is not enabled, navigate to Configuration->Plugins and click Grafana OnCall | ||
|
||
6. Some configuration fields will appear be available. Fill them out and click Initialize OnCall | ||
|
||
``` | ||
OnCall API URL: | ||
OnCall API URL: | ||
http://host.docker.internal:8080 | ||
Invitation Token (Single use token to connect Grafana instance): | ||
|
@@ -120,6 +132,7 @@ http://localhost:3000 | |
|
||
NOTE: you may not have `host.docker.internal` available, in that case you can get the | ||
host IP from inside the container by running: | ||
|
||
```bash | ||
/sbin/ip route|awk '/default/ { print $3 }' | ||
|
||
|
@@ -133,13 +146,14 @@ extra_hosts: | |
|
||
For Slack app configuration check our docs: https://grafana.com/docs/grafana-cloud/oncall/open-source/#slack-setup | ||
|
||
|
||
### Update drone build | ||
The .drone.yml build file must be signed when changes are made to it. Follow these steps: | ||
|
||
The .drone.yml build file must be signed when changes are made to it. Follow these steps: | ||
|
||
If you have not installed drone CLI follow [these instructions](https://docs.drone.io/cli/install/) | ||
|
||
To sign the .drone.yml file: | ||
|
||
```bash | ||
export DRONE_SERVER=https://drone.grafana.net | ||
|
||
|
@@ -154,6 +168,7 @@ drone sign --save grafana/oncall .drone.yml | |
### ld: library not found for -lssl | ||
|
||
**Problem:** | ||
|
||
``` | ||
pip install -r requirements.txt | ||
... | ||
|
@@ -162,6 +177,7 @@ pip install -r requirements.txt | |
error: command 'gcc' failed with exit status 1 | ||
... | ||
``` | ||
|
||
**Solution:** | ||
|
||
``` | ||
|
@@ -174,6 +190,7 @@ pip install -r requirements.txt | |
Happens on Apple Silicon | ||
|
||
**Problem:** | ||
|
||
``` | ||
build/temp.macosx-12-arm64-3.9/_openssl.c:575:10: fatal error: 'openssl/opensslv.h' file not found | ||
#include <openssl/opensslv.h> | ||
|
@@ -183,30 +200,33 @@ Happens on Apple Silicon | |
---------------------------------------- | ||
ERROR: Failed building wheel for cryptography | ||
``` | ||
|
||
**Solution:** | ||
|
||
``` | ||
LDFLAGS="-L$(brew --prefix [email protected])/lib" CFLAGS="-I$(brew --prefix [email protected])/include" pip install `cat requirements.txt | grep cryptography` | ||
``` | ||
|
||
### django.db.utils.OperationalError: (1366, "Incorrect string value ...") | ||
|
||
**Problem:** | ||
|
||
``` | ||
django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x98\\x8A\\xF0\\x9F...' for column 'cached_name' at row 1") | ||
``` | ||
|
||
**Solution:** | ||
|
||
Recreate the database with the correct encoding. | ||
### Grafana OnCall plugin does not show up in plugin list | ||
|
||
### Grafana OnCall plugin does not show up in plugin list | ||
|
||
**Problem:** | ||
I've run `yarn watch` in `grafana_plugin` but I do not see Grafana OnCall in the list of plugins | ||
|
||
**Solution:** | ||
If it is the first time you have run `yarn watch` and it was run after starting Grafana in docker-compose; Grafana will not have detected a plugin to fix: `docker-compose -f developer-docker-compose.yml restart grafana` | ||
|
||
## Hints: | ||
|
||
### Building the all-in-one docker container | ||
|
@@ -219,9 +239,11 @@ docker build -t grafana/oncall-all-in-one -f Dockerfile.all-in-one . | |
### Running Grafana with plugin (frontend) folder mounted for dev purposes | ||
|
||
Do it only after you built frontend at least once! Also developer-docker-compose.yml has similar Grafana included. | ||
|
||
```bash | ||
docker run --rm -it -p 3000:3000 -v "$(pwd)"/grafana-plugin:/var/lib/grafana/plugins/grafana-plugin -e GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=grafana-oncall-app --name=grafana grafana/grafana:8.3.2 | ||
``` | ||
|
||
Credentials: admin/admin | ||
|
||
### Running tests locally | ||
|
@@ -239,10 +261,10 @@ pip install pytest.xdist | |
pytest -n4 | ||
``` | ||
|
||
|
||
## IDE Specific Instructions | ||
|
||
### PyCharm | ||
|
||
1. Create venv and copy .env file | ||
```bash | ||
python3.9 -m venv venv | ||
|
@@ -252,7 +274,7 @@ pytest -n4 | |
3. Settings → Project OnCall | ||
- In Python Interpreter click the gear and create a new Virtualenv from existing environment selecting the venv created in Step 1. | ||
- In Project Structure make sure the project root is the content root and add /engine to Sources | ||
4. Under Settings → Languages & Frameworks → Django | ||
4. Under Settings → Languages & Frameworks → Django | ||
- Enable Django support | ||
- Set Django project root to /engine | ||
- Set Settings to settings/dev.py | ||
|
Oops, something went wrong.