Преглед на файлове

First Round of Useful Files

Things like vimrc that I use everywhere, my current .bash_aliases,
a complicated imapfilter config from PureStorage, and a BASH script
that writes out to a log file and the stdout/stderr at the same time.
master
Nate Bohman преди 6 години
родител
ревизия
3d575a3e1b
променени са 4 файла, в които са добавени 712 реда и са изтрити 0 реда
  1. +523
    -0
      .bash_aliases
  2. +7
    -0
      .vimrc
  3. +153
    -0
      purestorage_imapfilter.cfg
  4. +29
    -0
      test_echo_log.sh

+ 523
- 0
.bash_aliases Целия файл

@@ -0,0 +1,523 @@
# see if which can find the command in the PATH
# defined before other aliases so they don't get
# added if the command they use isn't installed
cmds_exist () {
for cmd in ${@}; do
if ! PATH="/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" which ${1} &>/dev/null; then
return 1
fi
done
return 0
}

if cmds_exist sudo; then
if cmds_exist apt-fast; then
alias apt-fast="sudo apt-fast"
if [ -z $APT_CMD ]; then APT_CMD="apt-fast"; fi
fi
if cmds_exist apt; then
alias apt="sudo apt"
if [ -z $APT_CMD ]; then APT_CMD="apt"; fi
fi
if cmds_exist apt-get; then
alias apt-get="sudo apt-get"
if [ -z $APT_CMD ]; then APT_CMD="apt-get"; fi
fi

alias dist-upgrade="${APT_CMD} update -qq && ${APT_CMD} dist-upgrade"
alias upgrade="${APT_CMD} update -qq && ${APT_CMD} upgrade --with-new-pkgs"

if cmds_exist add-apt-repository; then
alias add-apt-repository="sudo add-apt-repository"
fi

if cmds_exist apt-key; then
alias apt-recv-key="sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys"
fi
alias dpkg="sudo dpkg"
alias cleanoldkernels="dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'$(uname -r)'/q;p' | xargs ${APT_CMD} purge"

function apt-get-update-repo () {
options="-o Dir::Etc::sourcelist=sources.list.d/${1}.list -o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0
'"
${APT_CMD} ${options} update
}

alias service="sudo /usr/sbin/service"

alias iwconfig="sudo /sbin/iwconfig"
alias iw="sudo /sbin/iw"
alias ip="sudo /sbin/ip"
alias iptables="sudo /sbin/iptables"
alias ip6tables="sudo /sbin/ip6tables"

if cmds_exist tcpdump; then
alias tcpdump="sudo /usr/sbin/tcpdump"
fi

if cmds_exist iftop; then
alias iftop="sudo /usr/sbin/iftop"
fi

if cmds_exist nethogs; then
alias nethogs="sudo /usr/sbin/nethogs"
fi

if cmds_exist iotop; then
alias iotop="sudo /usr/sbin/iotop"
fi

if cmds_exist unbound-control; then
alias unbound-control="sudo /usr/sbin/unbound-control"
fi

alias fsck="sudo /sbin/fsck"

if cmds_exist lxc-start; then
alias lxc-start="sudo /usr/bin/lxc-start"
fi
if cmds_exist lxc-stop; then
alias lxc-stop="sudo /usr/bin/lxc-stop"
fi
if cmds_exist lxc-attach; then
alias lxc-attach="sudo /usr/bin/lxc-attach"
fi
if cmds_exist lxc-ls; then
alias lxc-ls="sudo /usr/bin/lxc-ls"
fi

if [ -f /opt/borgbackup/bin/borg ]; then
alias overstock-borg="sudo BORG_REPO=/mnt/c_isilon/home/nbohman/borgbackup BORG_PASSPHRASE='aey4zah4eish9weekaizega7ooph9joo9eep3otoh4uev9eez4oof9Ko7ga3zah' /opt/borgbackup/bin/borg"
fi
fi

if cmds_exist grc; then
alias mtr="grc mtr --curses"
alias ping="grc ping"
alias dig="grc dig"
fi

if cmds_exist pigz; then
alias gzip="pigz"
fi

if cmds_exist sfs; then
alias organize_downloads="sfs ~/.config/sfs/Dowloads.yaml ~/Downloads"
fi

alias xz="xz -T0"

if cmds_exist zfs; then
function zfs_snapshots_by_size () {
root_dataset=${1}
zfs list -r -t snapshot -o name,used,creation ${root_dataset} | sort -k 2,2h
}
fi

if cmds_exist lsblk; then
alias lsblk="lsblk -o 'NAME,UUID,PARTUUID,SIZE,TYPE,SCHED,FSTYPE,LABEL,MOUNTPOINT'"
fi

if cmds_exist git; then
alias git-reset-hard="git fetch origin; git reset --hard origin/master; git clean -f"
fi

alias ssh-remove-host-key="ssh-keygen -f "/home/natrinicle/.ssh/known_hosts" -R"
alias ssh-stop-multiplex="ssh -O stop"
alias extract-jpg-from-dngs="for file in *.dng; do exiftool -b -JpgFromRaw $file > $file.jpg; done"

if cmds_exist pwgen; then
alias genpass="pwgen -1yBn"
fi

if cmds_exist dig; then
alias dig-short="dig +short"
fi

alias load="uptime | grep -Eo '([0-9]+\.[0-9]+,? ?){3}'"

alias pip="/usr/bin/env pip"
alias pip3="/usr/bin/env pip3"

scp_home_rc () {
scp ${@:2} .bashrc ${1}:~
scp ${@:2} .bash_aliases ${1}:~
scp ${@:2} .vimrc ${1}:~
}

# Add a path to $PATH if it's not already in there
# pathmunge /path/to/add
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}

if cmds_exist ipmitool ; then
export IPMI_USER="ADMIN"
export IPMI_PASS="ADMIN"

# Set boot device on next boot to pxe
ipmipxe() {
ipmitool -I lanplus -H ${1} -U ADMIN -P ADMIN chassis bootdev pxe
}
# Reset a hung bmc
ipmiresetbmc() {
ipmitool -I lanplus -H ${1} -U ADMIN -P ADMIN mc reset cold
}
# Power cycle a server from it's bmc
ipmipowercycle() {
ipmitool -I lanplus -H ${1} -U ADMIN -P ADMIN chassis power cycle
}
# Ipmi wrapper with username/password for any other commands
ipmi() {
# ${@:2} pulls in all argv from 2 to the end of the line
ipmitool -I lanplus -H ${1} -U ${IPMI_USER} -P ${IPMI_PASS} ${@:2}
}
fi

if cmds_exist pv dd; then
dd-progress() {
sudo dd if=${1} ${@:3} | pv -tpreb | sudo dd of=${2} ${@:3}
}
fi

if [ -d /sys/devices/platform/applesmc.768 ]; then
fanspeed() {
# Pulled from http://ubuntuforums.org/showthread.php?t=1645913&p=10246215#post10246215
# Requires applesmc-dkms package and modprobe applesmc
# Included in kernels >=2.6.27
service mbpfan stop
echo 1 | sudo tee /sys/devices/platform/applesmc.768/fan1_manual > /dev/null
echo 1 | sudo tee /sys/devices/platform/applesmc.768/fan2_manual > /dev/null
echo $1 | sudo tee /sys/devices/platform/applesmc.768/fan1_output > /dev/null
echo $1 | sudo tee /sys/devices/platform/applesmc.768/fan2_output > /dev/null
}
fi

extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}

if cmds_exist ldapsearch; then
export LDAP_USER="nate.bohman"

ldapmultisearch() {
if [ -z $LDAP_USER ]; then
read -p "Username: " LDAP_USER
export LDAP_USER
fi
read -s -p "${LDAP_USER}'s Password: " LDAP_PASSWORD
echo ""
for uid in "${@}"; do
ldapsearch -x -ZZ -D "${LDAP_USER}@purestorage.com" -b "ou=PSUsers,dc=purestorage,dc=com" -h ldap.purestorage.com -w ${LDAP_PASSWORD} uid=${uid}
if [ ${?} != 0 ]; then
echo "ldapsearch had an error"
unset LDAP_PASSWORD
break
fi
done
export LDAP_PASSWORD
}

ldapfindteam() {
LDAP_SEARCH="$(ldapmultisearch ${1})"
MANAGER_DN=$(echo "${LDAP_SEARCH}" | grep -Po "(?<=^manager: ).*$")
MANAGER_NAME=$(echo "${LDAP_SEARCH}" | grep -Po "(?<=^name: ).*$")
MANAGER_TITLE=$(echo "${LDAP_SEARCH}" | grep -Po "(?<=^title: ).*$")
TEAM_UIDS=$(ldapsearch -x -ZZ -D "${LDAP_USER}@purestorage.com" -b "ou=PSUsers,dc=purestorage,dc=com" -h ldap.purestorage.com -w ${LDAP_PASSWORD} "manager=${MANAGER_DN}" | grep -Po "(?<=^uid: ).*")
echo "Manager: ${MANAGER_NAME} - ${MANAGER_TITLE}"
for character in $(echo "Manager: ${MANAGER_NAME} - ${MANAGER_TITLE}" | wc -c); do echo -e "-"; done
ldapmultisearch ${TEAM_UIDS} | grep -Po "(?<=^name: ).*$"
}
fi

if cmds_exist curl; then
test_redirect() {
if [ $(echo $2 | cut -d":" -f1) == "https" ]; then
port=443
else
port=80
fi
domain=$(echo $2 | cut -d"/" -f3)
# echo "IP $1"
# echo "Port $port"
# echo "Domain $domain"
# echo "URL $2"
echo "Testing $2 against $1:$port"

curl --resolve $domain:$port:$1 $2 --progress-bar --insecure -sL -w "%{http_code} %{url_effective}\\n" -o /dev/null
}
fi

psgrep() {
ps auxw | grep "$(echo ${@} | sed 's/^\(.\)/[\1]/')"
}
ps_forest_pid () {
ps --forest -o user,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,cmd -g $(ps -o sid= -p ${1})
}
psmem() {
# Print the number of processes matching name given, memory per process, and total memory usage
ps -C $1 -O rss | gawk '{ count ++; sum += $2 }; END {count --; print "Number of processes =",count; print "Memory usage per process =",sum/1024/count, "MB"; print "Total memory usage =", sum/1024, "MB" ;};'
}
lsof_proc_open_cons () {
lsof -c ${1} -a -i${2}
}
memused() {
# Get ram total, free, and used without cached/buffers then calculate the percentage used to the nearest whole number
mem_total=$(cat /proc/meminfo | egrep "^MemTotal:" | egrep -o "[0-9]+")
mem_free=$(echo $(cat /proc/meminfo | egrep "^MemFree:" | egrep -o "[0-9]+") + $(cat /proc/meminfo | egrep "^Cached:" | egrep -o "[0-9]+") | bc)
mem_used=$(echo ${mem_total} - ${mem_free} | bc)
percent_used=$(awk "BEGIN { pc=${mem_used}/${mem_total}*100; i=int(pc); print (pc-i<0.5)?i:i+1 }")

# Output as used/total (percent%)
echo -e "${mem_used}/${mem_total} (${percent_used}%)"
}
swapused() {
# Get swap total, free, and used then calculate the percentage used to the nearest whole number
swap_total=$(cat /proc/meminfo | egrep "^SwapTotal:" | egrep -o "[0-9]+")
swap_free=$(cat /proc/meminfo | egrep "^SwapFree:" | egrep -o "[0-9]+")
swap_used=$(echo ${swap_total} - ${swap_free} | bc)
percent_used=$(awk "BEGIN { pc=${swap_used}/${swap_total}*100; i=int(pc); print (pc-i<0.5)?i:i+1 }")

# Output as used/total (percent%)
echo -e "${swap_used}/${swap_total} (${percent_used}%)"
}

suspend_process_soft() {
for pid in $(psgrep $1 | awk '{print $2}'); do
kill -TSTP ${pid}
done
}

suspend_process_hard() {
for pid in $(psgrep $1 | awk '{print $2}'); do
kill -STOP ${pid}
done
}

unsuspend_process() {
for pid in $(psgrep $1 | grep -P " Tl? " | awk '{print $2}'); do
kill -CONT ${pid}
done
}

zram_stat() {
for i in /sys/block/zram*; do
if [ -f $i/compr_data_size ] && [ -f $i/orig_data_size ]; then
compr=$(< $i/compr_data_size)
orig=$(< $i/orig_data_size)
ratio=0
if [ $compr -gt 0 ]; then
ratio=$(echo "scale=2; $orig*100/$compr" | bc -q)
fi
echo -e "/dev/${i/*\/}:\t$ratio% ($orig -> $compr)"
fi
done
}

ksm_stat() {
# offered = pages_sharing + pages_shared + pages_unshared + pages_volatile;
# saved = pages_sharing - pages_shared;
# savings (ksm_ratios) = saved / offered;

page_size=$(getconf PAGE_SIZE)

pages_shared=$(cat /sys/kernel/mm/ksm/pages_shared)
pages_sharing=$(cat /sys/kernel/mm/ksm/pages_sharing)
pages_unshared=$(cat /sys/kernel/mm/ksm/pages_unshared)
pages_volatile=$(cat /sys/kernel/mm/ksm/pages_volatile)

offered=$(echo "${pages_sharing} + ${pages_shared} + ${pages_unshared} + ${pages_volatile}" | bc -l)
offered_bytes=$(echo "${offered} * ${page_size}" | bc -l)
offered_human="$(echo "${offered_bytes}" | numfmt --to=iec-i)B"
saved=$(echo "${pages_sharing} - ${pages_shared}" | bc -l)
saved_bytes=$(echo "${saved} * ${page_size}" | bc -l)
saved_human="$(echo "${saved_bytes}" | numfmt --to=iec-i)B"
saved_percent="0.00"

if [ ${offered} -gt 0 ]; then
saved_percent=$(python -c "print(round(float($(echo "${saved} / ${offered} * 100" | bc -l)), 2))")
fi

echo -e "${saved_human}/${offered_human} (${saved_percent}%)"
}

if cmds_exist dkms; then
if cmds_exist sudo; then
DKMS_CMD="sudo dkms"
else
DKMS_CMD="dkms"
fi

dkms-buildall() {
$DKMS_CMD status | sed s/,//g | awk '{print "-m",$1,"-v",$2}' | while read line; do ls /var/lib/initramfs-tools | xargs -n 1 $DKMS_CMD install $line -k; done
}
fi

if cmds_exist sudo; then
function check_open_files () {
alert_percent=${1:-0.75}
for running_pid in $(sudo ps aux | awk '{print $2}' | tail -n+2); do
if sudo test -d /proc/${running_pid}/fd && sudo test -f /proc/${running_pid}/limits; then
open_files=$(sudo ls -l /proc/${running_pid}/fd | wc -l)
open_limit=$(sudo grep "open files" /proc/${running_pid}/limits | awk '{print $4}')
alert_limit=$(echo "((${open_limit} * ${alert_percent}) + 0.5) / 1" | bc)
if [ ${open_files} -gt ${alert_limit} ]; then
echo "PID ${running_pid} has ${open_files} open files with a limit of ${open_limit} max"
fi
fi
done
}
fi

if cmds_exist sudo wg; then
alias wg="sudo /usr/bin/wg"
fi
if cmds_exist sudo wg-quick; then
alias wg-quick="sudo /usr/bin/wg-quick"
fi

if cmds_exist nc; then
function port_open_check () {
nc -zv ${@}
}
fi

if cmds_exist youtube-dl; then
alias youtube-dl-best="youtube-dl -f bestvideo+bestaudio"
fi

function dedup_text () {
# Can use inline or with a filename
# echo -e "Test\nTest\nTest\nTest2\nTest" | dedup_text
# dedup_text /var/log/badly_duplicated_log > /var/log/deduplicated_log

# Stolen from https://stackoverflow.com/questions/1444406/how-can-i-delete-duplicate-lines-in-a-file-in-unix
# seen is an associative-array that Awk will pass every line of the file to.
# If a line isn't in the array then seen[$0] will evaluate to false.
# The ! is a logical NOT operator and will invert the false to true.
# Awk will print the lines where the expression evaluates to true.
# The ++ increments seen so that seen[$0] == 1 after the first time a
# line is found and then seen[$0] == 2, and so on.
# Awk evaluates everything but 0 and "" (empty string) to true.
# If a duplicate line is placed in seen then !seen[$0] will evaluate to
# false and the line will not be written to the output.
awk '!seen[$0]++'
}

function escape_string () {
# string=${@}
# echo ${string//\\/\\\\}
printf "%q" "${@}"
}

function round () {
round_float=${1}
round_places=${2:-2}

python -c "print(round(float(${round_float}), ${round_places}))"
}

function percent_change () {
old_number=${1}
new_number=${2}

if [ $(echo "${new_number} < ${old_number}" | bc -l) -eq 1 ]; then
percent_decrease=$(round $(echo "((${old_number} - ${new_number}) / ${old_number}) * 100" | bc -l) 2)
echo "${old_number} -> ${new_number} is a ${percent_decrease}% decrease"
else
percent_increase=$(round $(echo "((${new_number} - ${old_number}) / ${old_number}) * 100" | bc -l) 2)
echo "${old_number} -> ${new_number} is a ${percent_increase}% increase"
fi
}

# add thefuck function
#eval $(thefuck --alias)
function fuck () {
TF_PREVIOUS=$(fc -ln -1);
TF_CMD=$(
TF_ALIAS=fuck
TF_SHELL_ALIASES=$(alias)
PYTHONIOENCODING=utf-8
thefuck $TF_PREVIOUS THEFUCK_ARGUMENT_PLACEHOLDER $@
) && eval $TF_CMD;
history -s $TF_CMD;
}

if cmds_exist ffmpeg; then
convert_video_to_webm () {
filename=${1}
filename_wo_ext=$(echo ${filename} | rev | cut -d"." -f2- | rev)

# First pass
ffmpeg -i ${filename} -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 21 -threads 8 -speed 4 -tile-columns 6 -frame-parallel 1 -an -f webm -y /dev/null

# Second pass
ffmpeg -i ${filename} -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 21 -threads 8 -speed 2 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 96k -f webm ${filename_wo_ext}.webm
}

stabilize_video () {
filename=${1}
filename_wo_ext=$(echo ${filename} | rev | cut -d"." -f2- | rev)
filename_ext=$(echo ${filename} | rev | cut -d"." -f1 | rev)
shakiness=${2:-5}
accuracy=${3:-15}
smoothing=${4:-30}

# First pass
ffmpeg -i ${filename} -vf vidstabdetect=shakiness=${shakiness}:accuracy=${accuracy} -f null -

# Second pass
ffmpeg -i ${filename} -vf vidstabtransform=smoothing=${smoothing}:input="transforms.trf" ${filename_wo_ext}.stabilized.${filename_ext}
}
if cmds_exist flac; then
convert_flac_to_mp3 () {
filename=${1}
filename_wo_ext=$(echo ${filename} | rev | cut -d"." -f2- | rev)

flac --silent --decode --stdout "${filename}" | ffmpeg -i - -map 0:a:0 -b:a 320k -v 0 -f mp3 "${filename_wo_ext}.mp3"
}
fi
fi

# Nuitka converts Python source into C
if cmds_exist nuitka; then
# Convert and compile all .py files in current directory to modules
function nuitka_compile_all_as_modules() {
for py_file in *.py; do
# Ignore things like __init__.py that tend to break
if echo ${py_file} | grep -qv "^__"; then
nuitka --module ${py_file} --recurse-none --show-progress
fi
done
}

# Undo Nuitka module conversion and compilation
function nuitka_remove_all_compiled_modules() {
rm -r *.build
rm *.so
rm *.pyi
}
fi

+ 7
- 0
.vimrc Целия файл

@@ -0,0 +1,7 @@
syntax on

" Set mouse to r or v instead of a as they're
" more compatible
if has('mouse')
set mouse=r
endif

+ 153
- 0
purestorage_imapfilter.cfg Целия файл

@@ -0,0 +1,153 @@
options.subscribe = true
options.keepalive = 10
options.expunge = true
options.info = false
options.certificates = false

-- Global variables
accounts = {}
accounts_fetched = 0
fetch_accounts_every = 3600
filter_every = 30

MONTHS={Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12}
DATE_FORMAT = "(%d+)-(%a+)-(%d+) (%d+):(%d+):(%d+)"

-- Split string
function split(str, delim)
local result,pat,lastPos = {},"(.-)" .. delim .. "()",1
for part, pos in string.gmatch(str, pat) do
table.insert(result, part); lastPos = pos
end
table.insert(result, string.sub(str, lastPos))
return result
end

-- Table size
function size(tbl)
tbl_length = 0
for k, v in ipairs(tbl) do
tbl_length = tbl_length + 1
end
return tbl_length
end

-- Move to Gmail Trash with logging
function move_to_trash(imap, messages)
for _, msg in ipairs(messages) do
mbox, uid = table.unpack(msg)
print('IMAPFilter ' .. mbox[uid]:fetch_field('From') .. ' ' .. mbox[uid]:fetch_field('To') ..
' ' .. mbox[uid]:fetch_field('Subject') .. ' ' .. mbox[uid]:fetch_date())
end
messages:move_messages(imap['[Gmail]/Trash'])
end

-- IMAP Date string to seconds before now
function seconds_old(date_string)
local day, mon, year, hour, min, sec = date_string:match(DATE_FORMAT)
local time_stamp = os.time({day=day,month=MONTHS[mon],year=year,hour=hour,min=min,sec=sec})
return os.difftime(os.time(), time_stamp)
end

function fetch_accounts()
mysql_command = 'mysql -BNe "select SERVERNAME, smtp_port, mailusername, mailpassword from mailserver where protocol like \'imap%\'"'
status, output = pipe_from(mysql_command)
accounts = {}

for _, account in ipairs(split(output, "\n")) do
local _, _, server, port, username, password = string.find(account, '([^%s]+)[%s]+([^%s]+)[%s]+([^%s]+)[%s]+([^%s]+)')
if server and port and username and password then
local imap = IMAP {
server = server,
port = tonumber(port),
username = username,
password = password,
ssl = 'tls1.2'
}
-- Get a list of the available mailboxes and folders
local mailboxes, folders = imap:list_all()

table.insert(accounts, imap)
end
end
end

-- Filters
function filter(imap)
imap.INBOX:check_status()

results = imap.INBOX:select_all()

-- * for AND, + for OR, - for NOT, () to group
-- Google Calendar Invites
calendar_notifications = ( results:contain_from("calendar-notification@google.com") +
results:contain_field("Sender", "calendar-notification@google.com") )
if size(calendar_notifications) > 0 then
print('IMAPFilter Deleting Google Calendar Invites')
move_to_trash(imap, calendar_notifications)
end

-- Too Old
too_old = ( results:is_older(5) )
if size(too_old) > 0 then
print('IMAPFilter Deleting Too Old')
move_to_trash(imap, too_old)
end

-- Mailer Daemon
mailer_daemon = ( results:contain_from("mailer-daemon@.*") +
results:contain_field("Sender", "mailer-daemon@.*") )
if size(mailer_daemon) > 0 then
print('IMAPFilter Deleting Mailer Daemon Emails')
move_to_trash(imap, mailer_daemon)
end

-- JIRA Trouble Parsing
seen_msgs = ( results:is_seen() )
jira_unable_to_parse = Set {}
if size(seen_msgs) > 0 then
for _, msg in ipairs(seen_msgs) do
mbox, uid = table.unpack(msg)
if seconds_old(mbox[uid]:fetch_date()) > 900 then
table.insert(jira_unable_to_parse, msg)
end
end
end
if size(jira_unable_to_parse) > 0 then
print('IMAPFilter Deleting Mail JIRA Cannot Parse')
move_to_trash(imap, jira_unable_to_parse)
end
-- done
end

function main()
print("IMAPFilter Running at " .. os.date("%Y-%m-%d %H:%M:%S"))

-- Fetch accounts once per hour from MySQL
if os.time() - accounts_fetched > fetch_accounts_every then
fetch_accounts()
end

-- Loop through all accounts and run filtering on them
for _, imap in ipairs(accounts) do
filter(imap)
end

-- print('---------')
end

-- Two methods for running in loop
-- Only uncomment one at a time

-- become_daemon forks into background and calls a function every x seconds
-- become_daemon(filter_every, main)

-- While true loop runs in forground
-- while true do
-- main()
-- Lua has no built in sleep function
-- os.execute('sleep ' .. filter_every)
-- end

-- Run once and exit
main()

+ 29
- 0
test_echo_log.sh Целия файл

@@ -0,0 +1,29 @@
#!/usr/bin/env bash

# ${0} is the script name so this will output
# to the current directory as script_name.log
LOG_FILE="./${0}.log"

# Log all output to file
# tee -a - append
# tee -i - ignore interrupt signals
# STDOUT
exec > >(tee -ai ${LOG_FILE})
# STDERR
exec 2> >(tee -ai ${LOG_FILE})

# Copy the username@hostname working directory
# and command into the log file before the
# command is run
function echo_command () {
# id -un - Output username
# pwd - Print working directory
# BASH_COMMAND - Command that's about to be run
echo "$(id -un)@$(hostname) $(pwd) $ ${BASH_COMMAND}" >> ${LOG_FILE}
}
trap echo_command DEBUG

date
echo "Just echoed the date"
date
echo "Echoed it again"

Loading…
Отказ
Запис