# Maven
maven-install:
    mvn install

maven-compile:
    mvn compile

maven-test:
    mvn test

maven-verify:
    mvn verify

maven-package:
    mvn clean package

# Flink Local
flink-local-start:
    /usr/local/Cellar/apache-flink/1.13.1/libexec/bin/start-cluster.sh

flink-local-stop:
    /usr/local/Cellar/apache-flink/1.13.1/libexec/bin/stop-cluster.sh

# Flink Session Mode

# https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/deployment/config/
flink-session-start:
    /usr/local/Cellar/apache-flink/1.13.1/libexec/bin/kubernetes-session.sh \
        -Dkubernetes.namespace=hm-flink \
        -Dkubernetes.cluster-id=hm-flink-cluster \
        -Dkubernetes.container.image=flink:1.13.2-scala_2.12-java11 \
        -Dkubernetes.jobmanager.service-account=flink-serviceaccount \
        -Dkubernetes.taskmanager.cpu=2 \
        -Dtaskmanager.numberOfTaskSlots=4 \
        -Dtaskmanager.memory.process.size=4096m

flink-session-submit-job:
    flink run \
        --target kubernetes-session \
        -Dkubernetes.cluster-id=hm-flink-cluster \
        -Dkubernetes.jobmanager.service-account=flink-serviceaccount \
        ./target/streaming-0.1.jar

# Flink Application Mode
set-secret-base64-in-github:
    cd src/main/resources && \
    base64 --input=application-production.properties --output=application-production.properties.base64 && \
    gh secret set HM_STEAMING_APPLICATION_PROPERTIES_BASE64 < application-production.properties.base64 && \
    rm -f application-production.properties.base64

docker-build:
    cd ../../../.. && \
    docker build --file=data-processing/flink/applications/stream-tweetsDockerfile --tag=ghcr.io/hongbo-miao/hm-streaming:latest .

docker-push:
    docker push ghcr.io/hongbo-miao/hm-streaming:latest

flink-application-initialize:
    cd .. && \
    kubectl apply --filename=kubernetes/manifests/flink

flink-application-start:
    cd .. && \
    kubectl apply --filename=kubernetes/manifests/flink/hm-flink-namespace.yaml && \
    flink run-application \
        --target kubernetes-application \
        -Dkubernetes.namespace=hm-flink \
        -Dkubernetes.cluster-id=hm-flink-cluster \
        -Dkubernetes.container.image=ghcr.io/hongbo-miao/hm-streaming:latest \
        -Dkubernetes.container.image.pull-policy=Always \
        -Dkubernetes.jobmanager.service-account=flink-serviceaccount \
        local:///opt/flink/usrlib/streaming-0.1.jar

flink-application-delete:
    kubectl delete deployment/hm-flink-cluster --namespace=hm-flink

# TimescaleDB
timescaledb-start:
    docker run \
        --detach \
        --name=timescaledb \
        --publish=0.0.0.0:16863:5432 \
        --env=POSTGRES_DB=postgres \
        --env=POSTGRES_USER=admin \
        --env=POSTGRES_PASSWORD=passw0rd \
        timescale/timescaledb:latest-pg15

timescaledb-migrate:
    cd ../../../.. && \
    sh data-processing/flink/applications/stream-tweets/scripts/migrate_timescaledb_twitter_db.sh

# Redis
redis-cli:
    redis-cli -h localhost -p 6379 --pass passw0rd
