* Get rid of installation token (for OSS installations) This is done by being required to supply the grafana API URL as an environment variable on the backend. Additionally, optionally an OnCall API URL environment variable can be passed in to the frontend (this basically allows completely skipping the need to configure anything). - deduplicated a lot of the sync logic on the frontend + made error message more useful and consistent - Split PluginConfigPage component into several subcomponents (making it easier to test each individual component) - Moved RootWithLoader (from plugin/GrafanaPluginRootPage) into its own subcomponent (making it easier to test) - Added tests for pre-existing components that were touched: - PluginConfigPage component (and its new subcomponents) - state/plugin and state/rootBaseStore functions - apps.grafana_plugin django app Helm changes: - add GRAFANA_API_URL to oncall.env - some yaml autoformatting changes - remove reference to python manage.py issue_invite_for_the_frontend --override Co-authored-by: Joey Orlando <joseph.t.orlando@gmail.com>
168 lines
5 KiB
Makefile
168 lines
5 KiB
Makefile
DOCKER_COMPOSE_FILE = docker-compose-developer.yml
|
|
DOCKER_COMPOSE_DEV_LABEL = com.grafana.oncall.env=dev
|
|
|
|
# compose profiles
|
|
MYSQL_PROFILE = mysql
|
|
POSTGRES_PROFILE = postgres
|
|
SQLITE_PROFILE = sqlite
|
|
ENGINE_PROFILE = engine
|
|
UI_PROFILE = oncall_ui
|
|
REDIS_PROFILE = redis
|
|
RABBITMQ_PROFILE = rabbitmq
|
|
GRAFANA_PROFILE = grafana
|
|
|
|
DEV_ENV_DIR = ./dev
|
|
DEV_ENV_FILE = $(DEV_ENV_DIR)/.env.dev
|
|
DEV_ENV_EXAMPLE_FILE = $(DEV_ENV_FILE).example
|
|
|
|
ENGINE_DIR = ./engine
|
|
REQUIREMENTS_TXT = $(ENGINE_DIR)/requirements.txt
|
|
REQUIREMENTS_ENTERPRISE_TXT = $(ENGINE_DIR)/requirements-enterprise.txt
|
|
SQLITE_DB_FILE = $(ENGINE_DIR)/oncall.db
|
|
|
|
# -n flag only copies DEV_ENV_EXAMPLE_FILE-> DEV_ENV_FILE if it doesn't already exist
|
|
$(shell cp -n $(DEV_ENV_EXAMPLE_FILE) $(DEV_ENV_FILE))
|
|
include $(DEV_ENV_FILE)
|
|
|
|
# if COMPOSE_PROFILES is set in DEV_ENV_FILE use it
|
|
# otherwise use a default (or what is passed in as an arg)
|
|
ifeq ($(COMPOSE_PROFILES),)
|
|
COMPOSE_PROFILES=$(ENGINE_PROFILE),$(UI_PROFILE),$(REDIS_PROFILE),$(GRAFANA_PROFILE)
|
|
endif
|
|
|
|
# conditionally assign DB based on what is present in COMPOSE_PROFILES
|
|
ifeq ($(findstring $(MYSQL_PROFILE),$(COMPOSE_PROFILES)),$(MYSQL_PROFILE))
|
|
DB=$(MYSQL_PROFILE)
|
|
else ifeq ($(findstring $(POSTGRES_PROFILE),$(COMPOSE_PROFILES)),$(POSTGRES_PROFILE))
|
|
DB=$(POSTGRES_PROFILE)
|
|
else
|
|
DB=$(SQLITE_PROFILE)
|
|
endif
|
|
|
|
# conditionally assign BROKER_TYPE based on what is present in COMPOSE_PROFILES
|
|
# if the user specifies both rabbitmq and redis, we'll make the assumption that rabbitmq is the broker
|
|
ifeq ($(findstring $(RABBITMQ_PROFILE),$(COMPOSE_PROFILES)),$(RABBITMQ_PROFILE))
|
|
BROKER_TYPE=$(RABBITMQ_PROFILE)
|
|
else
|
|
BROKER_TYPE=$(REDIS_PROFILE)
|
|
endif
|
|
|
|
# SQLITE_DB_FiLE is set to properly mount the sqlite db file
|
|
DOCKER_COMPOSE_ENV_VARS := COMPOSE_PROFILES=$(COMPOSE_PROFILES) DB=$(DB) BROKER_TYPE=$(BROKER_TYPE)
|
|
ifeq ($(DB),$(SQLITE_PROFILE))
|
|
DOCKER_COMPOSE_ENV_VARS += SQLITE_DB_FILE=$(SQLITE_DB_FILE)
|
|
endif
|
|
|
|
define run_docker_compose_command
|
|
$(DOCKER_COMPOSE_ENV_VARS) docker compose -f $(DOCKER_COMPOSE_FILE) $(1)
|
|
endef
|
|
|
|
define run_engine_docker_command
|
|
$(call run_docker_compose_command,run --rm oncall_engine_commands $(1))
|
|
endef
|
|
|
|
# touch SQLITE_DB_FILE if it does not exist and DB is eqaul to SQLITE_PROFILE
|
|
#
|
|
# hostess installation (crossplatform/idempotent modification of /etc/hosts file)
|
|
# see here (https://github.com/cbednarski/hostess#installation) for docs
|
|
# basically this is needed because oncall api has been configured locally to communicate w/ grafana @
|
|
# http://grafana:3000. This becomes a problem in certain parts of OnCall where we generate "public" URLs
|
|
# and the user tries to access them via their browser.
|
|
start:
|
|
ifeq ($(DB),$(SQLITE_PROFILE))
|
|
@if [ ! -f $(SQLITE_DB_FILE) ]; then \
|
|
touch $(SQLITE_DB_FILE); \
|
|
fi
|
|
endif
|
|
|
|
@if [ ! -x "$$(command -v hostess)" ]; then \
|
|
echo "installing hostess"; \
|
|
git clone https://github.com/cbednarski/hostess "${HOME}/hostess"; \
|
|
cd "${HOME}/hostess"; \
|
|
make install; \
|
|
fi
|
|
|
|
@if ! hostess has grafana; then \
|
|
sudo hostess add grafana 127.0.0.1; \
|
|
fi
|
|
|
|
$(call run_docker_compose_command,up --remove-orphans -d)
|
|
|
|
init:
|
|
# if the oncall UI is to be run in docker we should do an initial build of the frontend code
|
|
# this makes sure that it will be available when the grafana container starts up without the need to
|
|
# restart the grafana container initially
|
|
ifeq ($(findstring $(UI_PROFILE),$(COMPOSE_PROFILES)),$(UI_PROFILE))
|
|
cd grafana-plugin && yarn install && yarn build:dev
|
|
endif
|
|
|
|
stop:
|
|
$(call run_docker_compose_command,down)
|
|
|
|
restart:
|
|
$(call run_docker_compose_command,restart)
|
|
|
|
build:
|
|
$(call run_docker_compose_command,build)
|
|
|
|
cleanup: stop
|
|
docker system prune --filter label="$(DOCKER_COMPOSE_DEV_LABEL)" --all --volumes
|
|
|
|
install-pre-commit:
|
|
@if [ ! -x "$$(command -v pre-commit)" ]; then \
|
|
echo "installing pre-commit"; \
|
|
pip install $$(grep "pre-commit" $(ENGINE_DIR)/requirements.txt); \
|
|
else \
|
|
echo "pre-commit already installed"; \
|
|
fi
|
|
|
|
lint: install-pre-commit
|
|
pre-commit run --all-files
|
|
|
|
install-precommit-hook: install-pre-commit
|
|
pre-commit install
|
|
|
|
test:
|
|
$(call run_engine_docker_command,pytest)
|
|
|
|
start-celery-beat:
|
|
$(call run_engine_docker_command,celery -A engine beat -l info)
|
|
|
|
purge-queues:
|
|
$(call run_engine_docker_command,celery -A engine purge -f)
|
|
|
|
shell:
|
|
$(call run_engine_docker_command,python manage.py shell)
|
|
|
|
dbshell:
|
|
$(call run_engine_docker_command,python manage.py dbshell)
|
|
|
|
exec-engine:
|
|
docker exec -it oncall_engine bash
|
|
|
|
# The below commands are useful for running backend services outside of docker
|
|
define backend_command
|
|
export `grep -v '^#' $(DEV_ENV_FILE) | xargs -0` && \
|
|
export BROKER_TYPE=$(BROKER_TYPE) && \
|
|
cd engine && \
|
|
$(1)
|
|
endef
|
|
|
|
backend-bootstrap:
|
|
pip install -U pip wheel
|
|
pip install -r $(REQUIREMENTS_TXT)
|
|
@if [ -f $(REQUIREMENTS_ENTERPRISE_TXT) ]; then \
|
|
pip install -r $(REQUIREMENTS_ENTERPRISE_TXT); \
|
|
fi
|
|
|
|
backend-migrate:
|
|
$(call backend_command,python manage.py migrate)
|
|
|
|
run-backend-server:
|
|
$(call backend_command,python manage.py runserver 0.0.0.0:8080)
|
|
|
|
run-backend-celery:
|
|
$(call backend_command,python manage.py start_celery)
|
|
|
|
backend-command:
|
|
$(call backend_command,$(CMD))
|