set-up:
    bash scripts/set_up.sh

clean:
    bash scripts/clean.sh

set-up-multipass:
    sh scripts/set_up_multipass.sh

set-up-k3d:
    sh scripts/set_up_k3d.sh

set-up-kind:
    sh scripts/set_up_kind.sh

set-up-minikube:
    sh scripts/set_up_minikube.sh

focus-opa-debug:
    sh scripts/utils/focus_opa_debug.sh

focus-pixie-debug:
    sh scripts/utils/focus_pixie_debug.sh

install-alpine:
    sh scripts/utils/install_hm_alpine.sh

# minikube
minikube-start-docker:
    minikube start --driver=docker --cpus=4 --memory=8g

minikube-start-hyperkit:
    minikube start --driver=hyperkit --cpus=4 --memory=8g

minikube-start-virtualbox:
    minikube start --driver=virtualbox --cpus=4 --memory=8g

minikube-enable-ingress:
    minikube addons enable ingress

minikube-mount:
    minikube mount ./data:/data

minikube-delete:
    minikube delete

minikube-dashboard:
    minikube dashboard

minikube-ip:
    minikube ip

# kind
kind-create:
    kind create cluster --name=west --config=kind/west-cluster-config.yaml
    kind create cluster --name=east --config=kind/east-cluster-config.yaml

kind-delete:
    kind delete cluster --name=west
    kind delete cluster --name=east

kind-list-clusters:
    kind get clusters

# k3d
k3d-cluster-create:
    k3d cluster create west --config=k3d/west-cluster-config.yaml
    k3d cluster create east --config=k3d/west-cluster-config.yaml
    k3d cluster create dev --config=k3d/dev-cluster-config.yaml

k3d-cluster-delete:
    k3d cluster delete west
    k3d cluster delete east
    k3d cluster delete dev

k3d-cluster-list:
    k3d cluster list

k3d-node-list:
    k3d node list

# Multipass
multipass-launch-node:
    multipass launch --name=west-master --cpus=6 --mem=24g --disk=256g

multipass-exec:
    multipass exec west-master -- bash

multipass-list:
    multipass list

multipass-mount:
    multipass mount "${PWD}/data" west-master:/data

multipass-info:
    multipass info west-master

multipass-start:
    multipass start west-master

multipass-stop:
    multipass stop west-master

multipass-delete:
    multipass delete west-master

multipass-purge:
    multipass purge

# nslookup
k8s-debug:
    nslookup graphql-server-service.hm.svc

# Kubernetes
kubectl-apply:
    kubectl apply --filename=manifests/west/hm-namespace.yaml
    kubectl apply --filename=manifests/west
    kubectl apply --filename=manifests/west/hm-limitrange.yaml
    kubectl apply --filename=manifests/west --selector=app.kubernetes.io/name=graphql-server

kubectl-apply-with-linkerd:
    linkerd inject - | kubectl apply --filename=manifests

kubectl-delete:
    kubectl delete --filename=manifests

kubectl-get-customer-resources:
    kubectl api-resources --api-group=gateway.networking.k8s.io

kubectl-delete-customer-resources:
    kubectl delete customresourcedefinition gatewayclasses.gateway.networking.k8s.io
    kubectl delete customresourcedefinition gateways.gateway.networking.k8s.io
    kubectl delete customresourcedefinition grpcroutes.gateway.networking.k8s.io
    kubectl delete customresourcedefinition httproutes.gateway.networking.k8s.io
    kubectl delete customresourcedefinition referencegrants.gateway.networking.k8s.io

kubectl-get-node:
    kubectl get node --output=wide

kubectl-get-pods-all:
    kubectl get pods --all-namespaces

kubectl-get-pods:
    kubectl get pods --namespace=hm

kubectl-get-services-all:
    kubectl get services --all-namespaces

kubectl-get-services:
    kubectl get services --namespace=hm

kubectl-get-services-yaml:
    kubectl get services graphql-server-service --namespace=hm --output=yaml

kubectl-get-deployments:
    kubectl get deployments --namespace=hm

kubectl-get-deployments-yaml:
    kubectl get deployments graphql-server-deployment --namespace=hm --output=yaml

kubectl-get-namespaces:
    kubectl get namespaces

kubectl-get-storage-classes:
    kubectl get storageclasses --all-namespaces

kubectl-get-persistent-volumes:
    kubectl get persistentvolumes --all-namespaces

kubectl-get-persistent-volume-claims:
    kubectl get persistentvolumeclaims --all-namespaces

kubectl-get-endpoints:
    kubectl get endpoints graphql-server-service --namespace=hm

kubectl-get-configmaps-all:
    kubectl get configmaps --all-namespaces

kubectl-get-config-maps:
    kubectl get configmaps --namespace=hm

kubectl-get-config-maps-yaml:
    kubectl get configmaps ingress-nginx-controller --namespace=ingress-nginx --output=yaml

kubectl-get-service-accounts:
    kubectl get serviceaccounts

kubectl-get-api-services:
    kubectl get apiservices

kubectl-logs:
    kubectl logs --follow xxx --namespace=hm

kubectl-sh:
    kubectl exec --stdin --tty xxx --namespace=hm -- sh

kubectl-rollout-restart:
    kubectl rollout restart hasura-deployment --namespace=hm-hasura

kubectl-list-pod-containers:
    kubectl get pod xxx --namespace=xxx --output=jsonpath='{.spec.containers[*].name}'

kubectl-force-delete-pod:
    kubectl delete pod xxx --namespace=xxx --force --grace-period=0

kubectl-config-view:
    kubectl config view

kubectl-config-get-contexts:
    kubectl config get-contexts

kubectl-config-current-context:
    kubectl config current-context

kubectl-config-use-context:
    kubectl config use-context k3d-west

kubectl-cluster-info:
    kubectl cluster-info

kubectl-cluster-info-context:
    kubectl cluster-info --context k3d-west

kubectl-proxy:
    kubectl proxy

kubectl-port-forward-hasura:
    # hasura-graphql-engine
    kubectl port-forward service/hasura-service --namespace=hm-hasura 16020:16020
    # hasura-metric-adapter
    kubectl port-forward service/hasura-service --namespace=hm-hasura 16021:16021
    # traefik-hasura
    kubectl port-forward service/hasura-service --namespace=hm-hasura 16022:16022
    # traefik
    kubectl port-forward service/hasura-service --namespace=hm-hasura 16023:16023

kubectl-port-forward-graphql-server:
    # graphql-server
    kubectl port-forward service/graphql-server-service --namespace=hm 31800:31800
    # opa
    kubectl port-forward service/graphql-server-service --namespace=hm 8181:8181
    # opal-client
    kubectl port-forward service/graphql-server-service --namespace=hm 7000:7000

kubectl-port-forward-opal-server:
    kubectl port-forward service/opal-server-service --namespace=hm 7002:7002

kubectl-port-forward-config-loader:
    kubectl port-forward service/config-loader-service --namespace=hm 26660:26660

kubectl-port-forward-api-python:
    kubectl port-forward service/api-python-service --namespace=hm-api-python 35903:35903

kubectl-port-forward-clickhouse:
    kubectl port-forward service/chi-simple-01-simple-0-0 --namespace=hm-clickhouse 8123:8123
    kubectl port-forward service/chi-simple-01-simple-0-0 --namespace=hm-clickhouse 9000:9000

kubectl-port-forward-postgres-operator-ui:
    kubectl port-forward service/postgres-operator-ui --namespace=hm-postgres-operator 8081:80

kubectl-port-forward-postgres-cluster:
    kubectl port-forward service/hm-postgres-cluster-repl --namespace=hm-postgres 31270:5432

kubectl-port-forward-postgres:
    kubectl port-forward service/postgres-service --namespace=hm-postgres 5432:5432

kubectl-port-forward-hydra:
    kubectl port-forward service/hydra-service --namespace=hm-hydra 26958:5432

kubectl-port-forward-timescale:
    kubectl port-forward service/timescale --namespace=hm-timescale 25495:5432

kubectl-port-forward-influxdb:
    kubectl port-forward service/influxdb --namespace=hm-influxdb 20622:8086

kubectl-port-forward-redis:
    kubectl port-forward service/redis-headless --namespace=hm-redis 6379:6379

kubectl-port-forward-trino:
    kubectl port-forward service/trino --namespace=hm-trino 26869:8080

kubectl-port-forward-superset:
    kubectl port-forward service/superset --namespace=hm-superset 22357:8088

kubectl-port-forward-dgraph:
    kubectl port-forward service/dgraph-dgraph-alpha --namespace=hm-dgraph 8080:8080
    kubectl port-forward service/dgraph-dgraph-zero --namespace=hm-dgraph 6080:6080

kubectl-port-forward-qdrant:
    kubectl port-forward service/qdrant --namespace=hm-qdrant 6333:6333

kubectl-port-forward-elastic:
    kubectl port-forward service/hm-kibana-kb-http --namespace=hm-elastic 5601:5601
    kubectl port-forward service/hm-elasticsearch-es-http --namespace=hm-elastic 9200:9200

kubectl-port-forward-kafka-broker:
    kubectl port-forward service/hm-kafka-kafka-bootstrap --namespace=hm-kafka 9092:9092

kubectl-port-forward-kafka-zookeeper:
    kubectl port-forward service/hm-kafka-zookeeper-client --namespace=hm-kafka 2181:2181

kubectl-port-forward-hm-kafka-iot-kafka-connect:
    kubectl port-forward service/hm-kafka-iot-kafka-connect-connect-api --namespace=hm-kafka 8083:8083

kubectl-port-forward-hm-kafka-logging-kafka-connect:
    kubectl port-forward service/hm-kafka-logging-kafka-connect-connect-api --namespace=hm-kafka 8083:8083

kubectl-port-forward-hm-kafka-opa-kafka-connect:
    kubectl port-forward service/hm-kafka-opa-kafka-connect-connect-api --namespace=hm-kafka 8083:8083

kubectl-port-forward-apicurio-registry:
    kubectl port-forward service/apicurio-registry-apicurio-registry --namespace=hm-apicurio-registry 35185:8080

kubectl-port-forward-ui-for-apache-kafka:
    kubectl port-forward service/ui-for-apache-kafka-kafka-ui --namespace=hm-ui-for-apache-kafka 26917:80

kubectl-port-forward-redpanda-console:
    kubectl port-forward service/redpanda-console --namespace=hm-redpanda-console 46270:8080

kubectl-port-forward-akhq:
    kubectl port-forward service/akhq --namespace=hm-akhq 34594:80

kubectl-port-forward-spark:
    kubectl port-forward service/spark-master-svc --namespace=hm-spark 4040:80
    kubectl port-forward service/spark-master-svc --namespace=hm-spark 7077:7077

kubectl-port-forward-flink:
    kubectl port-forward service/hm-flink-cluster-rest --namespace=hm-flink 8081:8081

kubectl-port-forward-prefect-server:
    kubectl port-forward service/prefect-server --namespace=hm-prefect 4200:4200

kubectl-port-forward-prefect-server-postgresql:
    kubectl port-forward service/prefect-server-postgresql --namespace=hm-prefect 21945:5432

kubectl-port-forward-airflow:
    kubectl port-forward service/airflow-webserver --namespace=hm-airflow 45808:8080

kubectl-port-forward-prometheus:
    kubectl port-forward service/monitoring-kube-prometheus-prometheus --namespace=hm-monitoring 9090:9090

kubectl-port-forward-grafana-by-loki:
    kubectl port-forward service/grafana --namespace=hm-grafana 18845:80

kubectl-port-forward-netdata:
    kubectl port-forward service/netdata --namespace=hm-netdata 55839:19999

kubectl-port-forward-ory-hydra:
    kubectl port-forward service/ory-hydra-public --namespace=hm-ory-hydra 4444:4444
    kubectl port-forward service/ory-hydra-admin --namespace=hm-ory-hydra 4445:4445

kubectl-port-forward-kubeflow:
    kubectl port-forward service/ml-pipeline-ui --namespace=kubeflow 38620:80

kubectl-port-forward-mlflow:
    kubectl port-forward service/mlflow --namespace=hm-mlflow 29858:5000

kubectl-port-forward-kubecost:
    kubectl port-forward service/kubecost-cost-analyzer --namespace=hm-kubecost 9090:9090

kubectl-port-forward-polaris:
    kubectl port-forward service/polaris-dashboard --namespace=hm-polaris 31450:80

kubectl-port-forward-sloop:
    kubectl port-forward service/sloop --namespace=hm-sloop 16850:16850

kubectl-port-forward-rancher:
    kubectl port-forward service/rancher --namespace=cattle-system 46271:443

kubectl-port-forward-temporal:
    kubectl port-forward service/temporal-web --namespace=hm-temporal 48780:8080

kubectl-port-forward-metabase:
    kubectl port-forward service/metabase --namespace=hm-metabase 50399:80

kubectl-port-forward-pgadmin:
    kubectl port-forward service/pgadmin-pgadmin4 --namespace=hm-pgadmin 40594:80

kubectl-label-add:
    kubectl label namespace production-hm-goldilocks goldilocks.fairwinds.com/enabled=true

kubectl-label-remove:
    kubectl label namespace production-hm-goldilocks goldilocks.fairwinds.com/enabled-

# K9s
k9s-install:
    brew install k9s

k9s:
    k9s

# kubectl-plugins

# https://github.com/luksa/kubectl-plugins
kubectl-ssh:
    kubectl ssh node lima-rancher-desktop

# Linkerd
linkerd-install-control-plane:
    linkerd install --values=linkerd/config.yaml --disable-heartbeat | kubectl apply --filename=-

linkerd-install-control-plane-prod:
    linkerd install --values=linkerd/config.yaml --disable-heartbeat --ha | kubectl apply --filename=-

linkerd-install-viz:
    linkerd viz install --set=jaegerUrl=jaeger.linkerd-jaeger:16686 | kubectl apply --filename=-

linkerd-install-jaeger:
    linkerd jaeger install | kubectl apply --filename=-

linkerd-viz-dashboard:
    linkerd viz dashboard &

linkerd-jaeger-dashboard:
    linkerd jaeger dashboard &

linkerd-get-yaml:
    linkerd install --disable-heartbeat > linkerd.yaml

linkerd-inject:
    kubectl get deployments --namespace=hm --output=yaml | linkerd inject - | kubectl apply --filename=-

linkerd-inject-nginx-controller:
    kubectl get deployment ingress-nginx-controller --namespace=ingress-nginx --output=yaml | linkerd inject --ingress - | kubectl apply --filename=-

linkerd-verify-inject-nginx-controller:
    kubectl describe pods/ingress-nginx-controller-xxx --namespace=ingress-nginx | grep "linkerd.io/inject: ingress"

linkerd-check:
    linkerd check

linkerd-check-pre:
    linkerd check --pre

linkerd-check-proxy:
    linkerd check --proxy

linkerd-viz-tap:
    linkerd viz tap deployments/graphql-server-deployment --namespace=hm

linkerd-viz-tap-json:
    linkerd viz tap deployments/graphql-server-deployment --namespace=hm --output=json

linkerd-viz-tap-to:
    linkerd viz tap deployments/graphql-server-deployment --namespace=hm --to=deployment/grpc-server-deployment

linkerd-viz-tap-to-path:
    linkerd viz tap deployments/graphql-server-deployment --namespace=hm --to=deployment/grpc-server-deployment --path=/api.proto.greet.v1.GreetService/Greet

linkerd-viz-top:
    linkerd viz top deployments/graphql-server-deployment --namespace=hm

linkerd-viz-stat-deployments:
    linkerd viz stat deployments --namespace=hm

linkerd-viz-stat-trafficsplit:
    linkerd viz stat trafficsplit --context=k3d-west --namespace=hm

linkerd-viz-stat-wide:
    linkerd viz stat deployments --namespace=hm --output=wide

linkerd-viz-stat-from-to:
    linkerd viz stat --namespace=hm deployments/graphql-server-deployment --to deployments/grpc-server-deployment

linkerd-viz-stat-all-from:
    linkerd viz stat --namespace=hm deployments --from deployments/graphql-server-deployment

linkerd-viz-edges-deployments:
    linkerd viz edges deployments --namespace=hm

linkerd-viz-edges-deployments-json:
    linkerd viz edges deployments --namespace=hm --output=json

linkerd-viz-edges-pods:
    linkerd viz edges pods --namespace=hm

linkerd-viz-edges-pods-json:
    linkerd viz edges pods --namespace=hm --output=json

linkerd-viz-routes:
    linkerd viz routes deployments/graphql-server-deployment --namespace=hm

linkerd-viz-routes-wide:
    linkerd viz routes deployments/graphql-server-deployment --namespace=hm --to deployments/grpc-server-deployment --output=wide

linkerd-viz-routes-json:
    linkerd viz routes deployments/graphql-server-deployment --namespace=hm --output=json

linkerd-get-secrets:
    kubectl get secrets --namespace=linkerd

linkerd-get-secret-yaml:
    kubectl get secrets --namespace=linkerd linkerd-identity-issuer --output=yaml

# Pixie
pixie-sign-in:
    px auth login

pixie-deploy:
    px deploy --y

pixie-delete:
    px delete

# Kibana
kibana-ui:
    kubectl port-forward service/hm-kb-http --namespace=hm-elastic 5601:5601 &

kibana-get-password:
    kubectl get secret hm-elasticsearch-es-elastic-user --namespace=hm-elastic --output=jsonpath="{.data.elastic}" | base64 --decode; echo

kubectl-get-pods-argocd:
    kubectl get pods --namespace=argocd

kubectl-get-rolebindings-argocd:
    kubectl get rolebindings --namespace=argocd

kubectl-describe-rolebinding-argocd:
    kubectl describe rolebinding argocd-application-controller --namespace=argocd

kubectl-get-roles-argocd:
    kubectl get roles --namespace=argocd

kubectl-describe-role-argocd:
    kubectl describe role argocd-application-controller --namespace=argocd

# Dgraph
dgraph-install-standalone:
    mkdir -p ~/dgraph
    docker run \
        --interactive \
        --tty \
        --name=dgraph \
        --publish=0.0.0.0:5080:5080 \
        --publish=0.0.0.0:6080:6080 \
        --publish=0.0.0.0:8080:8080 \
        --publish=0.0.0.0:9080:9080 \
        --publish=0.0.0.0:8000:8000 \
        --volume=~/dgraph:/dgraph \
        dgraph/standalone

dgraph-install:
    kubectl apply --namespace=hm --filename=https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/dgraph-single/dgraph-single.yaml

dgraph-delete:
    kubectl delete --namespace=hm --filename=https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/dgraph-single/dgraph-single.yaml
    kubectl delete persistentvolumeclaims --namespace=hm --selector=app=dgraph

dgraph-install-ha:
    kubectl apply --namespace=hm --filename=https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/dgraph-ha/dgraph-ha.yaml

dgraph-delete-ha:
    kubectl delete --namespace=hm --filename=https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/dgraph-ha/dgraph-ha.yaml
    kubectl delete persistentvolumeclaims --namespace=hm --selector=app=dgraph-zero
    kubectl delete persistentvolumeclaims --namespace=hm --selector=app=dgraph-alpha

# PostgreSQL
postgres-connect:
    psql postgresql://admin@localhost:5432/postgres

migrate-up:
    migrate \
        -database "postgresql://admin:passw0rd@localhost:5432/opa_db?sslmode=disable&search_path=public" \
        -path data/postgres/opa_db/migrations up

migrate-down:
    migrate \
        -database "postgresql://admin:passw0rd@localhost:5432/opa_db?sslmode=disable&search_path=public" \
        -path data/postgres/opa_db/migrations down

# TorchServe
torchserve-start:
    torchserve --start --model-store=data/model-server/model-store --models=densenet161=densenet161.mar

torchserve-stop:
    torchserve --stop

curl-list-models:
    curl http://localhost:8081/models

curl-download-cat:
    curl https://raw.githubusercontent.com/pytorch/serve/master/docs/images/kitten_small.jpg > kitten_small.jpg

curl-cat:
    curl http://127.0.0.1:8080/predictions/densenet161 --upload-file kitten_small.jpg

# Cloudflare
cloudflared-install:
    brew install cloudflared

cloudflare-tunnel-sign-in:
    cloudflared tunnel login

cloudflare-tunnel-list:
    cloudflared tunnel list

cloudflare-tunnel-create:
    cloudflared tunnel create hm-tunnel

cloudflare-tunnel-delete:
    cloudflared tunnel delete hm-tunnel

cloudflare-k8s-create-secret:
    kubectl create secret generic tunnel-credentials \
        --from-file=credentials.json=/Users/hongbo-miao/.cloudflared/c9aa4140-fee8-4862-a479-3c1faacbd816.json \
        --namespace=hm-cloudflared

cloudflare-tunnel-dns:
    cloudflared tunnel route dns hm-tunnel prefect.hongbomiao.com
