moved/initial
This commit is contained in:
commit
5e9b704ae1
79
healthcheck/hosts_check.sh
Executable file
79
healthcheck/hosts_check.sh
Executable file
@ -0,0 +1,79 @@
|
||||
#!/bin/bash
|
||||
|
||||
# "cryptovaltrading.com": {
|
||||
# "cloud18": {
|
||||
# "users": ["oleg"],
|
||||
# "type": "cloud",
|
||||
# "ssh_port": 7822,
|
||||
# "to_check": "false"
|
||||
# "timeout_sec": 5
|
||||
# },
|
||||
|
||||
RootDir="${HOME}/prod"
|
||||
|
||||
AlertChannel=Alerts-CVTT
|
||||
Sender=${RootDir}/ops/utils/send_mmost.sh
|
||||
ConfigUrl=http://cloud16.cvtt.vpn:6789/admin/cvtt_hosts
|
||||
|
||||
HOSTS_CONFIG=$(curl -s ${ConfigUrl} | ${HOME}/bin/hjson -j)
|
||||
|
||||
get_domains() {
|
||||
echo ${HOSTS_CONFIG} | jq -r '. | keys[]'
|
||||
}
|
||||
get_user_hosts() {
|
||||
local User=${1}
|
||||
local Domain=${2}
|
||||
|
||||
jdcmd="jq -r --arg domain \"$Domain\""
|
||||
jdcmd="$jdcmd --arg usr \"$User\""
|
||||
jdcmd="$jdcmd '.[\$domain]"
|
||||
jdcmd="$jdcmd | to_entries[]"
|
||||
jdcmd="$jdcmd | select(.value.users[]"
|
||||
jdcmd="$jdcmd | contains(\$usr))"
|
||||
jdcmd="$jdcmd | .key'"
|
||||
echo ${HOSTS_CONFIG} | eval ${jdcmd} |sed "s/$/.$Domain/" # >&2
|
||||
}
|
||||
|
||||
function host_alert() {
|
||||
alert=${1}
|
||||
if [ "${alert}" != "" ]
|
||||
then
|
||||
echo -e "### :fire: HOST ALERT \n${alert}" | ${Sender} ${AlertChannel}
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
User=oleg
|
||||
Hosts=()
|
||||
DEFAULT_SSH_PORT=22
|
||||
DEFAULT_TIMEOUT=5
|
||||
DEFAULT_TO_CHECK="true"
|
||||
Domains=("${Domains[@]}" "$(get_domains)")
|
||||
|
||||
for Domain in ${Domains[@]} ; do
|
||||
Hosts=("${Hosts[@]}" "$(get_user_hosts ${User} ${Domain})")
|
||||
done
|
||||
|
||||
for Host in ${Hosts[@]} ; do
|
||||
host=$(echo $Host | cut -d'.' -f1)
|
||||
Domain=$(echo $Host | cut -d'.' -f2-)
|
||||
|
||||
|
||||
PortSSH=$(echo "$HOSTS_CONFIG" | jq -r --arg domain "$Domain" --arg host "$host" '.[$domain][$host].ssh_port // '"$DEFAULT_SSH_PORT"'')
|
||||
|
||||
Timeout=$(echo "$HOSTS_CONFIG" | jq -r --arg domain "$Domain" --arg host "$host" '.[$domain][$host].timeout_sec // '"$DEFAULT_TIMEOUT"'')
|
||||
|
||||
ToCheck=$(echo "$HOSTS_CONFIG" | jq -r --arg domain "$Domain" --arg host "$host" '.[$domain][$host].to_check // '"$DEFAULT_TO_CHECK"'')
|
||||
to_check="${ToCheck^^}"
|
||||
if [ "${to_check}" == "TRUE" -o "${to_check}" == "YES" -o "${to_check}" == "Y" -o "${to_check}" == "T" ] ; then
|
||||
echo "Checking host: $Host on port $PortSSH"
|
||||
else
|
||||
continue
|
||||
fi
|
||||
|
||||
# Use nc to check if the specified port is open
|
||||
if ! nc -z -w ${Timeout} "$Host" "$PortSSH"; then
|
||||
echo "Host $Host is not available on port $PortSSH"
|
||||
host_alert "Host $Host is not available on port $PortSSH"
|
||||
fi
|
||||
done
|
||||
60
healthcheck/md/crypto_md_chcklst.sh
Executable file
60
healthcheck/md/crypto_md_chcklst.sh
Executable file
@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
usage() {
|
||||
echo -n "Usage: ${0}"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
RootDir="${HOME}/prod"
|
||||
# RootDir=/home/oleg/develop/cvtt2 ###### D E B U G
|
||||
|
||||
export PYTHONPATH=${RootDir}
|
||||
|
||||
StatusChannel="MD-Status"
|
||||
Sender=${RootDir}/ops/utils/send_mmost.sh
|
||||
|
||||
# ----- For DEBUGGING
|
||||
# Sender=cat
|
||||
# StatusChannel=
|
||||
|
||||
run_checklist() {
|
||||
yr=$(date -d 'yesterday' '+%Y')
|
||||
mn=$(date -d 'yesterday' '+%m')
|
||||
|
||||
declare -A Commands
|
||||
Commands=(
|
||||
["hs01:cloud24"]="ssh cvtt@hs01.cvtt.vpn ls -l /works/cvtt/md_archive/crypto/cloud24/${yr}/${mn} | tail -5"
|
||||
["hs01:cloud28"]="ssh cvtt@hs01.cvtt.vpn ls -l /works/cvtt/md_archive/crypto/cloud28/${yr}/${mn} | tail -5"
|
||||
["hs01:sim"]="ssh cvtt@hs01.cvtt.vpn ls -l /works/cvtt/md_archive/crypto/sim/ | tail -5"
|
||||
["cloud21:cloud24"]="ssh cvtt@cloud21.cvtt.vpn ls -l /works/cvtt/md_archive/crypto/cloud24/${yr}/${mn} | tail -5"
|
||||
["cloud21:cloud28"]="ssh cvtt@cloud21.cvtt.vpn ls -l /works/cvtt/md_archive/crypto/cloud28/${yr}/${mn} | tail -5"
|
||||
["cloud21:sim"]="ssh cvtt@cloud21.cvtt.vpn ls -l /works/cvtt/md_archive/crypto/sim | tail -5"
|
||||
["gpushnik"]="ssh oleg@gpushnik.cvtt.vpn 'ls -l /opt/jupyter_gpu/data/crypto_md | tail -10'"
|
||||
)
|
||||
|
||||
for name in $(printf "%s\n" "${!Commands[@]}" | sort); do
|
||||
Cmd=${Commands[${name}]}
|
||||
echo "------- ${name}"
|
||||
echo ${Cmd}
|
||||
eval ${Cmd}
|
||||
done
|
||||
}
|
||||
|
||||
tmpfile=$(mktemp)
|
||||
function cleanup {
|
||||
cd ${HOME}
|
||||
rm -f ${tmpfile}
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "## :hearts: CRYPTO MD HEALTH CHECK (cvtt-md.cvtt.vpn)" >> ${tmpfile}
|
||||
echo '```' >> ${tmpfile}
|
||||
run_checklist >> ${tmpfile}
|
||||
echo '```' >> ${tmpfile}
|
||||
|
||||
cat ${tmpfile} | ${Sender} ${StatusChannel}
|
||||
|
||||
cat $tmpfile
|
||||
|
||||
73
healthcheck/md/eqty_md_chcklst.sh
Executable file
73
healthcheck/md/eqty_md_chcklst.sh
Executable file
@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
usage() {
|
||||
echo -n "Usage: ${0}"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
RootDir="${HOME}/prod"
|
||||
|
||||
export PYTHONPATH=${RootDir}
|
||||
|
||||
StatusChannel="MD-Status"
|
||||
Sender=${RootDir}/ops/utils/send_mmost.sh
|
||||
|
||||
# ----- For DEBUGGING
|
||||
# RootDir=/home/oleg/develop/cvtt2 ###### D E B U G
|
||||
# Sender=cat #### D E B U G
|
||||
# StatusChannel= #### D E B U G
|
||||
|
||||
run_checklist() {
|
||||
|
||||
|
||||
yr=$(date -d 'yesterday' '+%Y')
|
||||
CheckSymbols="A/AAPL N/NVDA M/META"
|
||||
declare -A Commands
|
||||
Commands["hs01"]=""
|
||||
for sym in ${CheckSymbols}; do
|
||||
Commands["hs01"]+="ssh cvtt@hs01.cvtt.vpn ls -l /works/cvtt/md_archive/equity/alpaca_md/${yr}/${sym} | tail -3; "
|
||||
done
|
||||
Commands["hs01"]+="echo"
|
||||
Commands["hs01:sim"]="ssh cvtt@hs01.cvtt.vpn ls -l /works/cvtt/md_archive/equity/alpaca_md/sim | tail -5"
|
||||
|
||||
Commands["cloud21"]=""
|
||||
for sym in ${CheckSymbols}; do
|
||||
Commands["cloud21"]+="ssh cvtt@cloud21.cvtt.vpn ls -l /works/cvtt/md_archive/equity/alpaca_md/${yr}/${sym} | tail -3; "
|
||||
done
|
||||
Commands["cloud21"]+="echo"
|
||||
Commands["cloud21:sim"]="ssh cvtt@cloud21.cvtt.vpn ls -l /works/cvtt/md_archive/equity/alpaca_md/sim | tail -5"
|
||||
|
||||
Commands["gpushnik"]="ssh oleg@gpushnik.cvtt.vpn 'ls -l /opt/jupyter_gpu/data/eqty_md | tail -10'"
|
||||
|
||||
for name in $(printf "%s\n" "${!Commands[@]}" | sort); do
|
||||
echo "------- ${name}"
|
||||
Cmd=${Commands[${name}]}
|
||||
echo ${Cmd}
|
||||
eval ${Cmd}
|
||||
done
|
||||
}
|
||||
|
||||
tmpfile=$(mktemp)
|
||||
function cleanup {
|
||||
cd ${HOME}
|
||||
rm -f ${tmpfile}
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
# run_checklist
|
||||
|
||||
tmpfile=$(mktemp)
|
||||
function cleanup {
|
||||
cd ${HOME}
|
||||
rm -f ${tmpfile}
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "## :fire: EQUITY MD HEALTH CHECK (cryptoval4)" >> ${tmpfile}
|
||||
echo '```' | tee -a ${tmpfile}
|
||||
run_checklist | tee -a ${tmpfile}
|
||||
echo '```' | tee -a ${tmpfile}
|
||||
|
||||
echo "Sending result to ${Sender} ${StatusChannel}"
|
||||
cat ${tmpfile} | ${Sender} ${StatusChannel}
|
||||
58
healthcheck/services_check.sh
Executable file
58
healthcheck/services_check.sh
Executable file
@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
# "Jenkins" {
|
||||
# "to_check": "Yes",
|
||||
# "protocol": "http",
|
||||
# "host": "cvtt-build.cvtt.vpn",
|
||||
# "port": 8080
|
||||
# },
|
||||
|
||||
RootDir="${HOME}/prod"
|
||||
# RootDir=/home/oleg/develop/cvtt2 ###### D E B U G
|
||||
|
||||
AlertChannel=Alerts-CVTT
|
||||
Sender=${RootDir}/ops/utils/send_mmost.sh
|
||||
ConfigUrl=http://cloud16.cvtt.vpn:6789/admin/cvtt_services
|
||||
|
||||
SERVICES_CONFIG=$(curl -s ${ConfigUrl} | ${HOME}/bin/hjson -j)
|
||||
|
||||
echo $Sender
|
||||
echo $AlertChannel
|
||||
|
||||
|
||||
function service_alert() {
|
||||
alert="${1}"
|
||||
if [ "${alert}" != "" ]
|
||||
then
|
||||
#it may contain quotes
|
||||
alert=$(echo "${alert}" | sed 's/"/\\"/g')
|
||||
echo -e "### :boom: SERVICE ALERT\n${alert}" | ${Sender} ${AlertChannel}
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
User=oleg
|
||||
Hosts=()
|
||||
DEFAULT_TO_CHECK=Yes
|
||||
|
||||
mapfile -t SvcNames < <(echo ${SERVICES_CONFIG} | jq -r '. | keys[]')
|
||||
|
||||
DEFAULT_TO_CHECK=Yes
|
||||
for SvcName in "${SvcNames[@]}" ; do
|
||||
ToCheck=$(echo "$SERVICES_CONFIG" | jq -r --arg svcname "$SvcName" '.[$svcname].to_check // "Yes"')
|
||||
if [ "${ToCheck^^}" == "NO" ]; then
|
||||
continue
|
||||
fi
|
||||
Host=$(echo "$SERVICES_CONFIG" | jq -r --arg svcname "$SvcName" '.[$svcname].host ')
|
||||
Port=$(echo "$SERVICES_CONFIG" | jq -r --arg svcname "$SvcName" '.[$svcname].port ')
|
||||
echo "Checking \"$SvcName\" (${Host}:${Port})"
|
||||
|
||||
|
||||
# Use nc to check if the specified port is open
|
||||
if ! nc -z -w5 "$Host" "$Port"; then
|
||||
msg="Service \"${SvcName}\" (${Host}:${Port}) is not available"
|
||||
echo ${msg}
|
||||
service_alert "${msg}"
|
||||
fi
|
||||
done
|
||||
|
||||
134
healthcheck/storage_health_check.sh
Executable file
134
healthcheck/storage_health_check.sh
Executable file
@ -0,0 +1,134 @@
|
||||
#!/bin/bash
|
||||
echo $0 $* | /usr/bin/ts '[%Y-%m-%d %H:%M:%S]'
|
||||
|
||||
RootDir="${HOME}/prod"
|
||||
|
||||
export PYTHONPATH=${RootDir}
|
||||
|
||||
|
||||
StatusChannel=Status-CVTT
|
||||
AlertChannel=Alerts-CVTT
|
||||
Sender=${RootDir}/ops/utils/send_mmost.sh
|
||||
|
||||
# ----- For DEBUGGING
|
||||
# Sender=cat
|
||||
# StatusChannel=
|
||||
|
||||
get_user_hosts() {
|
||||
local User=${1}
|
||||
local Domain=${2}
|
||||
|
||||
Cmd="curl -s http://cloud16.cvtt.vpn:6789/admin/cvtt_hosts"
|
||||
Cmd+=" | ${HOME}/bin/hjson -j"
|
||||
Cmd+=" | jq -r"
|
||||
Cmd+=" --arg domain \"${Domain}\""
|
||||
Cmd+=" --arg usr \"${User}\""
|
||||
Cmd+=" '.[\$domain] | to_entries[] | select(.value.users[] | contains(\$usr)) | .key'"
|
||||
|
||||
Cmd+=" | sed 's/\$/.${Domain}/'"
|
||||
eval ${Cmd}
|
||||
}
|
||||
|
||||
function cleanup {
|
||||
echo Cleaing up temporary files: ${TempFiles}
|
||||
if [ "" != "${TempFiles}" ]; then
|
||||
rm -f ${TempFiles}
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
function space_alert() {
|
||||
ALERT_USAGE=75%
|
||||
for metric in "${Metrics[@]}"
|
||||
do
|
||||
IFS=$' '; args=($metric); unset IFS
|
||||
host=${args[0]}
|
||||
fs=${args[1]}
|
||||
space_used=${args[2]}
|
||||
|
||||
if [ ${space_used%?} -ge ${ALERT_USAGE%?} ]; then
|
||||
echo ":red_circle: Filesystem **${host}:${fs}** is using **${space_used}** :red_circle:"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function storage_check() {
|
||||
local Hosts=("${@}")
|
||||
|
||||
result_lines=()
|
||||
|
||||
declare -a SingleMeas
|
||||
for host in ${Hosts[@]}
|
||||
do
|
||||
echo "storage_check host=${host}" >&2
|
||||
if [[ "${host}" == *"cryptovaltrading.com" ]]; then
|
||||
port=7822
|
||||
else
|
||||
port=22
|
||||
fi
|
||||
Cmd="ssh -p ${port}"
|
||||
Cmd+=" -o StrictHostKeyChecking=no"
|
||||
Cmd+=" -o UserKnownHostsFile=/dev/null"
|
||||
Cmd+=" $host"
|
||||
Cmd+=" eval \"df -hTl"
|
||||
Cmd+=" -x squashfs"
|
||||
Cmd+=" -x tmpfs"
|
||||
Cmd+=" -x vfat"
|
||||
Cmd+=" -x devtmpfs"
|
||||
Cmd+=" | grep -v Filesystem\""
|
||||
|
||||
IFS=$'\n' ; lines=$(eval ${Cmd})
|
||||
for ln in $lines
|
||||
do
|
||||
IFS=$' '; args=($ln); unset IFS
|
||||
res="${args[5]}| **${host}** | ***${args[6]}*** | *${args[5]}* |"
|
||||
|
||||
result_lines+=("$res")
|
||||
|
||||
fs=${args[6]}
|
||||
used=${args[5]}
|
||||
Metrics+=("$host $fs $used")
|
||||
done
|
||||
unset IFS
|
||||
done
|
||||
for ln in "${result_lines[@]}"
|
||||
do
|
||||
echo "${ln}"
|
||||
done
|
||||
}
|
||||
|
||||
User=oleg
|
||||
Metrics=()
|
||||
TempFiles=
|
||||
|
||||
Hosts=()
|
||||
for Domain in cvtt.vpn cryptovaltrading.com ; do
|
||||
Hosts=("${Hosts[@]}" "$(get_user_hosts ${User} ${Domain})")
|
||||
done
|
||||
|
||||
tmpfile=$(mktemp)
|
||||
TempFiles="${TempFiles} ${tmpfile}"
|
||||
|
||||
tmpfile2=$(mktemp)
|
||||
TempFiles="${TempFiles} ${tmpfile2}"
|
||||
|
||||
storage_check "${Hosts[@]}" > ${tmpfile2}
|
||||
|
||||
echo "## :card_file_box: STORAGE HEALTH CHECK" >> ${tmpfile}
|
||||
echo >> ${tmpfile}
|
||||
echo "| host | filesystem | usage |" >> ${tmpfile}
|
||||
echo "| --- | --- | --- |" >> ${tmpfile}
|
||||
cat ${tmpfile2} | sort -h -r | awk -F'%' '{printf "%s%%%s\n",$2,$3}' >> ${tmpfile}
|
||||
cat ${tmpfile} | ${Sender} ${StatusChannel}
|
||||
|
||||
tmpfile=$(mktemp)
|
||||
TempFiles="${TempFiles} ${tmpfile}"
|
||||
|
||||
space_alert > ${tmpfile}
|
||||
if [ -s ${tmpfile} ]
|
||||
then
|
||||
(echo "### :card_file_box: STORAGE ALERTS" && cat ${tmpfile}) | ${Sender} ${AlertChannel}
|
||||
else
|
||||
echo "No Storage Alerts"
|
||||
fi
|
||||
|
||||
70
save_cronjobs.sh
Executable file
70
save_cronjobs.sh
Executable file
@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
|
||||
usage() {
|
||||
echo "Usage: ${0} <local_root_dir>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
get_user_hosts() {
|
||||
local User=${1}
|
||||
local Domain=${2}
|
||||
|
||||
Cmd="curl -s http://cloud16.cvtt.vpn:6789/admin/cvtt_hosts"
|
||||
Cmd="${Cmd} | ${HOME}/bin/hjson -j"
|
||||
Cmd="${Cmd} | jq -r"
|
||||
Cmd="${Cmd} --arg domain \"${Domain}\""
|
||||
Cmd="${Cmd} --arg usr \"${User}\""
|
||||
Cmd="${Cmd} '.[\$domain] | to_entries[] | select(.value.users[] | contains(\$usr)) | .key'"
|
||||
# echo $Cmd ### - FOR DEBUG ONLY
|
||||
eval ${Cmd}
|
||||
}
|
||||
|
||||
Domain=cvtt.vpn
|
||||
echo "Started ${0} ${*} ..."
|
||||
|
||||
RootDir=${1}
|
||||
|
||||
if [ ! -d "${RootDir}" ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
cd ${RootDir}
|
||||
Cmd="git pull"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
for User in cvtt oleg
|
||||
do
|
||||
echo "User=$User"
|
||||
Cmd="mkdir -p ${RootDir}/${User}"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
hosts=$(get_user_hosts ${User} ${Domain})
|
||||
echo ${hosts}
|
||||
|
||||
for host in ${hosts}
|
||||
do
|
||||
echo "===================="
|
||||
echo "${host}:${User}"
|
||||
Cmd="ssh ${User}@${host}.${Domain} 'crontab -l' | tee ${RootDir}/${User}/${host}.cron"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
done
|
||||
done
|
||||
|
||||
cd ${RootDir}
|
||||
|
||||
Cmd="find -type f -empty -delete -print"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
Cmd="find -type d -empty -delete -print"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
Cmd="git add ."
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
Cmd="git commit -a -m '$(date)'"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
Cmd="git pushall"
|
||||
echo ${Cmd} && eval ${Cmd}
|
||||
|
||||
echo "Done ${0} ${*}"
|
||||
Loading…
x
Reference in New Issue
Block a user