aboutsummaryrefslogtreecommitdiffstats
path: root/issue_tracker_change_detector
diff options
context:
space:
mode:
Diffstat (limited to 'issue_tracker_change_detector')
-rwxr-xr-xissue_tracker_change_detector94
1 files changed, 94 insertions, 0 deletions
diff --git a/issue_tracker_change_detector b/issue_tracker_change_detector
new file mode 100755
index 0000000..699f8cc
--- /dev/null
+++ b/issue_tracker_change_detector
@@ -0,0 +1,94 @@
+#! /bin/bash
+
+while true
+do
+ source common_codez
+
+ log_file=bug_sums
+
+ temp_file=$( mktemp )
+
+ temp_changes=$( mktemp )
+
+ changes="/tmp/un-provoked-message-store"
+
+ for url in $( curl --compressed "https://issues.hyperbola.info/bugs/issue?@pagesize=99999" 2> /dev/null | grep -E 'href="issue[[:digit:]]+' | cut -d '"' -f 2 )
+ do
+ tfile="$( mktemp )"
+
+ try_count=1
+
+ # Get the URL and make sure it's not empty.
+ until curl --compressed "https://issues.hyperbola.info/bugs/${url}" > "${tfile}" 2> /dev/null && (( $( wc -l "${tfile}" 2> /dev/null | cut -d ' ' -f 1 ) ))
+ do
+ # The time we sleep doubles each time up to a maximum of 512
+ # seconds, before restarting the entire script.
+ sleep "${try_count}"
+
+ if (( try_count < 512 ))
+ then
+ try_count=$(( try_count * 2 ))
+ else
+ continue 2
+ fi
+ done
+
+ echo "${url} $( md5sum < ${tfile} | cut -d ' ' -f 1 )" >> "${temp_file}"
+
+ rm "${tfile}"
+ done
+
+ # Check that the log file is not empty as a sanity check. TODO record WHEN
+ # it last checked the bug tracker for changes so we can also check if it was
+ # too long ago.
+ if (( $( wc -l "${log_file}" 2> /dev/null | cut -d ' ' -f 1 ) ))
+ then
+ cat "${temp_file}" |
+ while read -r line
+ do
+ bug_number="${line%% *}"
+ # If this bug is not in the log file then it must be new.
+ if { ! grep "${bug_number}" "${log_file}" > /dev/null ; }
+ then
+ tdir="$( mktemp -d )"
+ curl --compressed "https://issues.hyperbola.info/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%<title>%1'
+ bug_title=$( head -1 ${tdir}/xx* | replace_wierd_html_chars )
+ cat ${tdir}/xx* | csplit -f "${tdir}/gg" - '%<th class="required">Priority</th>%1'
+ priority=$( head -1 ${tdir}/gg* )
+ priority=${priority#*>}
+ priority=${priority%<*}
+ rm -r "${tdir}"
+ echo "${bug_number} created: https://issues.hyperbola.info/bugs/${bug_number} (${bug_title% - Hyperbola\'s issue tracker} [${priority}])" >> "${temp_changes}"
+ # It is in the log file so now we check if the entire line is there,
+ # because if it's not then the md5sum must have changed.
+ elif { ! grep "${line}" "${log_file}" > /dev/null ; }
+ then
+ tdir="$( mktemp -d )"
+ curl --compressed "https://issues.hyperbola.info/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%<title>%1'
+ bug_title=$( head -1 ${tdir}/xx* | replace_wierd_html_chars )
+ cat ${tdir}/xx* | csplit -f "${tdir}/gg" - '%<th class="required">Priority</th>%1'
+ priority=$( head -1 ${tdir}/gg* )
+ priority=${priority#*>}
+ priority=${priority%<*}
+ rm -r "${tdir}"
+ echo "${bug_number} changed: https://issues.hyperbola.info/bugs/${bug_number} (${bug_title% - Hyperbola\'s issue tracker} [${priority}])" >> "${temp_changes}"
+ fi
+ done
+ fi
+
+ if (( $( wc -l "${temp_changes}" 2> /dev/null | cut -d ' ' -f 1 ) > 12 ))
+ then
+ echo "More than 12 changes have been detected on the bug tracker. Ignoring." >> "${changes}"
+ else
+ while read line
+ do
+ echo "${line}" >> "${changes}"
+ done < "${temp_changes}"
+ fi
+
+ mv "${temp_file}" "${log_file}"
+
+ rm -f "${temp_changes}"
+
+ sleep 5m
+done