#!/bin/bash echo 'Content-Type: text/plain' echo '' # echo "PROJECT: $PROJECT" object () { # e.g account kind=$1 # e.g leandroAccount self=$2 shift shift # iterates over the remaining args for arg in "$@"; do # e.g name=Leandro becomes ARG_KEY=name ARG_VALUE=Leandro read ARG_KEY ARG_VALUE <<< $(echo "$arg" | sed -E "s/(\w+)=(.*?)/\1 \2/") if [[ ! -z "$ARG_KEY" ]] && [[ ! -z "$ARG_VALUE" ]]; then # declare the object's state!!!! # e.g export leandroAccount_balance=100 export ${self}_$ARG_KEY="$ARG_VALUE" fi done } notify () { for i in `seq 1 30`; do local RESPONSE_HTTP_CODE=$(curl --max-time 5 -s -o /dev/null -i -w "%{http_code}" -X POST -H "Authorization: Bearer ${1}" -d "message=${3}" "https://notify-api.line.me/api/notify") [[ "${RESPONSE_HTTP_CODE}" == "200" ]] && break sleep 2 done curl -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data "{\"content\": \"$(echo ${3}| sed 's/%0A/\\n/g')\"}" https://discord.com/api/webhooks/${2} } cicd () { local LINE_TOKEN=$1 local DISCORD_TOKEN=$2 local repoNameOrigin=$4 local branchName=$5 local BUILD_NUMBER=$6 local buildVersion=$7 local GIT_COMMIT=$8 local JOB_URL=$9 local BUILD_URL=${10} case "$3" in "success") local MESSAGE_OPTION="✅✅✅✅✅%0A*CI DONE*" ;; "unstable") local MESSAGE_OPTION="💥💥💥💥💥💥%0A*CI Unstable*" ;; "failure") local MESSAGE_OPTION="🔥🔥🔥🔥🔥🔥%0A*CI Fail*" ;; esac notify ${LINE_TOKEN} ${DISCORD_TOKEN} "${MESSAGE_OPTION}%0ARepositories: ${repoNameOrigin}%0ABranch: ${branchName}%0ABuild Number: ${BUILD_NUMBER}%0AImage Tag: ${buildVersion}%0ACommit ID: ${GIT_COMMIT}%0AJob URL: ${JOB_URL}%0ABuild Log: ${BUILD_URL}console" } pod () { local LINE_TOKEN=$1 local DISCORD_TOKEN=$2 local POD_NAME=$4 local POD_IP=$5 local IMAGE_TAG=$6 local NODE=$7 case "$3" in "start") local MESSAGE_OPTION="🔆🟢🔆🟢🔆🟢🔆 Service UP" ;; "stop") local MESSAGE_OPTION="☠️🔴☠️🔴☠️🔴☠️ Service DOWN" ;; esac notify ${LINE_TOKEN} ${DISCORD_TOKEN} "${MESSAGE_OPTION}%0APod NAME: ${POD_NAME}%0APod IP: ${POD_IP}%0AImage Tag: ${IMAGE_TAG}%0ANode: ${NODE}" } networkOutbound () { local LINE_TOKEN=$1 local DISCORD_TOKEN=$2 local DURATION_MIN=$3 local DURATION_SEC=$4 local NOTIFY_RESPONSE=$(echo $5 | sed 's/-ONLINE/ ✅✅✅✅✅✅/g;s/-OFFLINE/ 🔥🔥🔥🔥🔥🔥/g;s/-:-/ : /g;s/-/ /g;') notify ${LINE_TOKEN} ${DISCORD_TOKEN} "${DURATION_MIN} min ${DURATION_SEC} sec${NOTIFY_RESPONSE}" } action () { local LINE_TOKEN=$(eval echo \${${PROJECT}_line_${HTTP_ACTION}}) local DISCORD_TOKEN=$(eval echo \${${PROJECT}_discord_${HTTP_ACTION}}) case "${HTTP_ACTION}" in "cicd") cicd ${LINE_TOKEN} ${DISCORD_TOKEN} ${HTTP_ACTIONVAL} ${HTTP_REPO} ${HTTP_BRANCH} ${HTTP_BUILDNUM} ${HTTP_BUILDVER} ${HTTP_COMMIT} ${HTTP_JOBURL} ${HTTP_BUILDURL} ;; "pod") pod ${LINE_TOKEN} ${DISCORD_TOKEN} ${HTTP_ACTIONVAL} ${HTTP_PODNAME} ${HTTP_PODIP} ${HTTP_IMAGETAG} ${HTTP_NODE} ;; "networkOutbound") networkOutbound ${LINE_TOKEN} ${DISCORD_TOKEN} ${HTTP_DURATIONMIN} ${HTTP_DURATIONSEC} ${HTTP_NOTIFYRESPONSE} ;; *) echo '{"status":404,"message":"action type not found"}' exit 0 ;; esac } case "${PROJECT}" in "clm") object lineToken \ ${PROJECT}_line \ cicd=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da \ pod=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da \ networkOutbound=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da object discordToken \ ${PROJECT}_discord \ cicd=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta \ pod=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta \ networkOutbound=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta action ;; "ncs") object lineToken \ ${PROJECT}_line \ cicd=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da \ pod=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da \ networkOutbound=ZcjlGQUzDqJXHSuh1GQACy6dDGMj32CdMW0MLwwA9da object discordToken \ ${PROJECT}_discord \ cicd=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta \ pod=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta \ networkOutbound=1270450815580111043/29nP43fgoajLtAHiSbRxRdPjgeE3i-4j4gw5ND4s3mzOsnHjOIeKZS2aZGwlMVkusmta action ;; *) echo '{"status":404,"message":"project not found"}' exit 0 ;; esac echo '{"status":200,"message":"ok"}'