From dc2e52dfa7408583eae31ebd0f87cf746d57050a Mon Sep 17 00:00:00 2001 From: Christian Boyle Date: Fri, 27 May 2022 08:31:19 -0500 Subject: [PATCH 01/24] fix alignment of ipv6 value in padd tiny --- padd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index 5468f3fc..6d71d917 100755 --- a/padd.sh +++ b/padd.sh @@ -703,7 +703,7 @@ PrintNetworkInformation() { elif [ "$1" = "tiny" ]; then CleanEcho "${bold_text}NETWORK ============================================${reset_text}" CleanPrintf " %-10s%-16s %-8s%-16s\e[0K\\n" "Hostname:" "${full_hostname}" "IP: " "${pi_ip4_addr}" - CleanPrintf " %-6s%-39s\e[0K\\n" "IPv6:" "${pi_ip6_addr}" + CleanPrintf " %-10s%-16s %-8s%-16s\e[0K\\n" "IPv6:" "${pi_ip6_addr}" CleanPrintf " %-10s%-16s %-8s%-16s\e[0K\\n" "DNS:" "${dns_information}" "DNSSEC:" "${dnssec_heatmap}${dnssec_status}${reset_text}" if [ "${DHCP_ACTIVE}" = "true" ]; then From ecf795176e73ccd24aaddda105178d27dfb9d581 Mon Sep 17 00:00:00 2001 From: Christian Boyle Date: Fri, 27 May 2022 09:31:40 -0500 Subject: [PATCH 02/24] fix alignment of ipv6 value in padd regular and slim --- padd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index 6d71d917..6abbe7ee 100755 --- a/padd.sh +++ b/padd.sh @@ -713,7 +713,7 @@ PrintNetworkInformation() { elif [ "$1" = "regular" ] || [ "$1" = "slim" ]; then CleanEcho "${bold_text}NETWORK ===================================================${reset_text}" CleanPrintf " %-10s%-19s %-10s%-19s\e[0K\\n" "Hostname:" "${full_hostname}" "IP:" "${pi_ip4_addr}" - CleanPrintf " %-6s%-19s\e[0K\\n" "IPv6:" "${pi_ip6_addr}" + CleanPrintf " %-10s%-19s %-10s%-19s\e[0K\\n" "IPv6:" "${pi_ip6_addr}" CleanPrintf " %-10s%-19s %-10s%-19s\e[0K\\n" "DNS:" "${dns_information}" "DNSSEC:" "${dnssec_heatmap}${dnssec_status}${reset_text}" if [ "${DHCP_ACTIVE}" = "true" ]; then From 015d0a9988cda878b7a069fd81c5b63adb0e3909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Fri, 27 May 2022 19:34:31 +0200 Subject: [PATCH 03/24] Use nproc to get number of processors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: RD WebDesign Signed-off-by: Christian König --- padd.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/padd.sh b/padd.sh index 6abbe7ee..dfbb45e4 100755 --- a/padd.sh +++ b/padd.sh @@ -32,8 +32,7 @@ padd_version="v3.7.1" today=$(date +%Y%m%d) # CORES -core_count=1 -core_count=$(cat /sys/devices/system/cpu/kernel_max 2> /dev/null)+1 +core_count=$(nproc --all 2> /dev/null) # Get Config variables . /etc/pihole/setupVars.conf From cd290c1637febfcb36a01521ee59d2039ab67163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 22 Jun 2022 23:36:54 +0200 Subject: [PATCH 04/24] Add device model to PADD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/padd.sh b/padd.sh index dfbb45e4..0debbdc3 100755 --- a/padd.sh +++ b/padd.sh @@ -269,6 +269,13 @@ GetSystemInformation() { cpu_bar=$(BarGenerator "${cpu_percent}" 10) memory_bar=$(BarGenerator "${memory_percent}" 10) fi + + # Device model + if [ -f /sys/firmware/devicetree/base/model ]; then + sys_model=$(cat /sys/firmware/devicetree/base/model) + else + sys_model="" + fi } GetNetworkInformation() { @@ -843,6 +850,8 @@ PrintSystemInformation() { # else we're not elif [ "$1" = "regular" ] || [ "$1" = "slim" ]; then CleanEcho "${bold_text}SYSTEM ====================================================${reset_text}" + # Device + CleanPrintf " %-10s%-39s\e[0K\\n" "Device:" "${sys_model}" # Uptime CleanPrintf " %-10s%-39s\e[0K\\n" "Uptime:" "${system_uptime}" @@ -854,6 +863,9 @@ PrintSystemInformation() { CleanPrintf " %-10s[${memory_heatmap}%-10s${reset_text}] %-6s %-10s[${cpu_load_1_heatmap}%-10s${reset_text}] %-5s" "Memory:" "${memory_bar}" "${memory_percent}%" "CPU Load:" "${cpu_bar}" "${cpu_percent}%" else CleanEcho "${bold_text}SYSTEM ========================================================================${reset_text}" + # Device + CleanPrintf " %-10s%-39s\e[0K\\n" "Device:" "${sys_model}" + # Uptime and memory CleanPrintf " %-10s%-39s %-10s[${memory_heatmap}%-10s${reset_text}] %-6s\\n" "Uptime:" "${system_uptime}" "Memory:" "${memory_bar}" "${memory_percent}%" From dc49039edc0beb8d4db9ed1bf141d3d4fa77db30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 22 Jun 2022 23:55:14 +0200 Subject: [PATCH 05/24] Remove chronometer2 script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- chronometer2.sh | 37 ------------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 chronometer2.sh diff --git a/chronometer2.sh b/chronometer2.sh deleted file mode 100644 index dcd0a88a..00000000 --- a/chronometer2.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash - -# update Chronometer2! - -yellowText=$(tput setaf 3) # Yellow -resetText=$(tput sgr0) # Reset to default color -checkBoxInfo="[${yellowText}i${resetText}]" # Info / i - -OutputJSON() { - echo "[i] Please update Chronometer2 to PADD! (See https://github.com/jpmck/PADD)" -} - - -DisplayHelp() { - cat << EOM -::: [i]Please update Chronometer2 to PADD! (See https://github.com/jpmck/PADD) -EOM - exit 0 -} - -if [[ $# = 0 ]]; then - clear - - if [ -e "chronometer2.pid" ]; then - rm -f chronometer2.pid - fi - - echo "${checkBoxInfo} Please update Chronometer2 to PADD! (See https://github.com/jpmck/PADD)" -fi - -for var in "$@"; do - case "$var" in - "-j" | "--json" ) OutputJSON;; - "-h" | "--help" ) DisplayHelp;; - * ) exit 1;; - esac -done From de6301906ed686659d0504444e9f426a25165e96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Thu, 23 Jun 2022 16:25:53 +0200 Subject: [PATCH 06/24] Remove possible null byte MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index 0debbdc3..1d329ba8 100755 --- a/padd.sh +++ b/padd.sh @@ -272,7 +272,8 @@ GetSystemInformation() { # Device model if [ -f /sys/firmware/devicetree/base/model ]; then - sys_model=$(cat /sys/firmware/devicetree/base/model) + # Get model, remove possible null byte + sys_model=$(tr -d '\0' < /sys/firmware/devicetree/base/model) else sys_model="" fi From 8ed17cf4ce5bdec360db907b1ad4abf669e266e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Thu, 23 Jun 2022 00:09:58 +0200 Subject: [PATCH 07/24] Make PADD compatible with non-master branches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/padd.sh b/padd.sh index dfbb45e4..f98cd023 100755 --- a/padd.sh +++ b/padd.sh @@ -485,11 +485,14 @@ GetVersionInformation() { else # the file doesn't exist, create it... # Gather core version information... core_version=$(pihole -v -p | awk '{print $4}' | tr -d '[:alpha:]') - core_version_latest=$(pihole -v -p | awk '{print $6}' | tr -d ')') + core_version_latest=$(pihole -v -p | awk '{print $(NF)}' | tr -d ')') - if [ "${core_version_latest}" = "ERROR" ]; then + # if core_version is something else then x.xx set it to N/A + if ! echo "${core_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${core_version_latest}" = "ERROR" ]; then + core_version="N/A" core_version_heatmap=${yellow_text} else + # remove the leading "v" from core_version_latest core_version_latest=$(echo "${core_version_latest}" | tr -d '\r\n[:alpha:]') # is core up-to-date? if [ "${core_version}" != "${core_version_latest}" ]; then @@ -498,15 +501,21 @@ GetVersionInformation() { else core_version_heatmap=${green_text} fi + # add leading "v" to version number + core_version="v${core_version}" fi # Gather web version information... if [ "$INSTALL_WEB_INTERFACE" = true ]; then web_version=$(pihole -v -a | awk '{print $4}' | tr -d '[:alpha:]') - web_version_latest=$(pihole -v -a | awk '{print $6}' | tr -d ')') - if [ "${web_version_latest}" = "ERROR" ]; then + web_version_latest=$(pihole -v -a | awk '{print $(NF)}' | tr -d ')') + + # if web_version is something else then x.xx set it to N/A + if ! echo "${web_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${web_version_latest}" = "ERROR" ]; then + web_version="N/A" web_version_heatmap=${yellow_text} else + # remove the leading "v" from web_version_latest web_version_latest=$(echo "${web_version_latest}" | tr -d '\r\n[:alpha:]') # is web up-to-date? if [ "${web_version}" != "${web_version_latest}" ]; then @@ -515,20 +524,25 @@ GetVersionInformation() { else web_version_heatmap=${green_text} fi + # add leading "v" to version number + web_version="v${web_version}" fi else # Web interface not installed - web_version_heatmap=${red_text} - web_version="$(printf '\x08')" # Hex 0x08 is for backspace, to delete the leading 'v' - web_version="${web_version}N/A" # N/A = Not Available + web_version="N/A" + web_version_heatmap=${yellow_text} fi # Gather FTL version information... ftl_version=$(pihole -v -f | awk '{print $4}' | tr -d '[:alpha:]') - ftl_version_latest=$(pihole -v -f | awk '{print $6}' | tr -d ')') - if [ "${ftl_version_latest}" = "ERROR" ]; then + ftl_version_latest=$(pihole -v -f | awk '{print $(NF)}' | tr -d ')') + + # if ftl_version is something else then x.xx set it to N/A + if ! echo "${ftl_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${ftl_version_latest}" = "ERROR" ]; then + ftl_version="N/A" ftl_version_heatmap=${yellow_text} else + # remove the leading "v" from ftl_version_latest ftl_version_latest=$(echo "${ftl_version_latest}" | tr -d '\r\n[:alpha:]') # is ftl up-to-date? if [ "${ftl_version}" != "${ftl_version_latest}" ]; then @@ -537,6 +551,8 @@ GetVersionInformation() { else ftl_version_heatmap=${green_text} fi + # add leading "v" to version number + ftl_version="v${ftl_version}" fi # PADD version information... @@ -653,7 +669,7 @@ PrintLogo() { CleanEcho "${padd_text}${dim_text}mini${reset_text} ${mini_status_}" CleanEcho "" elif [ "$1" = "tiny" ]; then - CleanEcho "${padd_text}${dim_text}tiny${reset_text} Pi-hole® ${core_version_heatmap}v${core_version}${reset_text}, Web ${web_version_heatmap}v${web_version}${reset_text}, FTL ${ftl_version_heatmap}v${ftl_version}${reset_text}" + CleanEcho "${padd_text}${dim_text}tiny${reset_text} Pi-hole® ${core_version_heatmap}${core_version}${reset_text}, Web ${web_version_heatmap}${web_version}${reset_text}, FTL ${ftl_version_heatmap}${ftl_version}${reset_text}" CleanPrintf " PADD ${padd_version_heatmap}${padd_version}${reset_text} ${tiny_status_}${reset_text}\e[0K\\n" elif [ "$1" = "slim" ]; then CleanEcho "${padd_text}${dim_text}slim${reset_text} ${full_status_}" @@ -661,13 +677,13 @@ PrintLogo() { # For the next two, use printf to make sure spaces aren't collapsed elif [ "$1" = "regular" ] || [ "$1" = "slim" ]; then CleanPrintf "${padd_logo_1}\e[0K\\n" - CleanPrintf "${padd_logo_2}Pi-hole® ${core_version_heatmap}v${core_version}${reset_text}, Web ${web_version_heatmap}v${web_version}${reset_text}, FTL ${ftl_version_heatmap}v${ftl_version}${reset_text}\e[0K\\n" + CleanPrintf "${padd_logo_2}Pi-hole® ${core_version_heatmap}${core_version}${reset_text}, Web ${web_version_heatmap}${web_version}${reset_text}, FTL ${ftl_version_heatmap}${ftl_version}${reset_text}\e[0K\\n" CleanPrintf "${padd_logo_3}PADD ${padd_version_heatmap}${padd_version}${reset_text} ${full_status_}${reset_text}\e[0K\\n" CleanEcho "" # normal or not defined else CleanPrintf "${padd_logo_retro_1}\e[0K\\n" - CleanPrintf "${padd_logo_retro_2} Pi-hole® ${core_version_heatmap}v${core_version}${reset_text}, Web ${web_version_heatmap}v${web_version}${reset_text}, FTL ${ftl_version_heatmap}v${ftl_version}${reset_text}, PADD ${padd_version_heatmap}${padd_version}${reset_text}\e[0K\\n" + CleanPrintf "${padd_logo_retro_2} Pi-hole® ${core_version_heatmap}${core_version}${reset_text}, Web ${web_version_heatmap}${web_version}${reset_text}, FTL ${ftl_version_heatmap}${ftl_version}${reset_text}, PADD ${padd_version_heatmap}${padd_version}${reset_text}\e[0K\\n" CleanPrintf "${padd_logo_retro_3} ${pihole_check_box} Core ${ftl_check_box} FTL ${mega_status}${reset_text}\e[0K\\n" CleanEcho "" @@ -1088,8 +1104,8 @@ StartupRoutine(){ GetNetworkInformation "mini" echo "- Gathering version info." GetVersionInformation "mini" - echo " - Core v$core_version, Web v$web_version" - echo " - FTL v$ftl_version, PADD $padd_version" + echo " - Core $core_version, Web $web_version" + echo " - FTL $ftl_version, PADD $padd_version" echo " - $version_status" else @@ -1124,9 +1140,9 @@ StartupRoutine(){ GetNetworkInformation "$1" echo "- Gathering version information..." GetVersionInformation "$1" - echo " - Pi-hole Core v$core_version" - echo " - Web Admin v$web_version" - echo " - FTL v$ftl_version" + echo " - Pi-hole Core $core_version" + echo " - Web Admin $web_version" + echo " - FTL $ftl_version" echo " - PADD $padd_version" echo " - $version_status" fi From 03cc42d95c3aba57732853fcfd7020ee1477ae96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Sat, 25 Jun 2022 22:33:24 +0200 Subject: [PATCH 08/24] Add interface and traffic info to PADD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/padd.sh b/padd.sh index 285e9734..cbe80e6e 100755 --- a/padd.sh +++ b/padd.sh @@ -406,6 +406,12 @@ GetNetworkInformation() { conditional_forwarding_status="Disabled" conditional_forwarding_heatmap=${red_text} fi + + #Default interface data + def_iface_data=$(GetFTLData ">interfaces" | head -n1) + iface_name="$(echo "$def_iface_data" | awk '{print $1}')" + tx_bytes="$(echo "$def_iface_data" | awk '{print $4}')" + rx_bytes="$(echo "$def_iface_data" | awk '{print $5}')" } GetPiholeInformation() { @@ -718,6 +724,7 @@ PrintNetworkInformation() { CleanEcho "${bold_text}NETWORK ================================${reset_text}" CleanPrintf " %-9s%-19s\e[0K\\n" "Host:" "${full_hostname}" CleanPrintf " %-9s%-19s\e[0K\\n" "IP:" "${pi_ip4_addr}" + CleanPrintf " %-9s%-8s %-4s%-5s %-4s%-5s\e[0K\\n" "Iface:" "${iface_name}" "TX:" "${tx_bytes}" "RX:" "${rx_bytes}" CleanPrintf " %-9s%-10s\e[0K\\n" "DNS:" "${dns_information}" if [ "${DHCP_ACTIVE}" = "true" ]; then @@ -727,6 +734,7 @@ PrintNetworkInformation() { CleanEcho "${bold_text}NETWORK ============================================${reset_text}" CleanPrintf " %-10s%-16s %-8s%-16s\e[0K\\n" "Hostname:" "${full_hostname}" "IP: " "${pi_ip4_addr}" CleanPrintf " %-10s%-16s %-8s%-16s\e[0K\\n" "IPv6:" "${pi_ip6_addr}" + CleanPrintf " %-10s%-16s %-4s%-5s %-4s%-5s\e[0K\\n" "Interfce:" "${iface_name}" "TX:" "${tx_bytes}" "RX:" "${rx_bytes}" CleanPrintf " %-10s%-16s %-8s%-16s\e[0K\\n" "DNS:" "${dns_information}" "DNSSEC:" "${dnssec_heatmap}${dnssec_status}${reset_text}" if [ "${DHCP_ACTIVE}" = "true" ]; then @@ -737,6 +745,7 @@ PrintNetworkInformation() { CleanEcho "${bold_text}NETWORK ===================================================${reset_text}" CleanPrintf " %-10s%-19s %-10s%-19s\e[0K\\n" "Hostname:" "${full_hostname}" "IP:" "${pi_ip4_addr}" CleanPrintf " %-10s%-19s %-10s%-19s\e[0K\\n" "IPv6:" "${pi_ip6_addr}" + CleanPrintf " %-10s%-19s %-4s%-5s %-4s%-5s\e[0K\\n" "Interfce:" "${iface_name}" "TX:" "${tx_bytes}" "RX:" "${rx_bytes}" CleanPrintf " %-10s%-19s %-10s%-19s\e[0K\\n" "DNS:" "${dns_information}" "DNSSEC:" "${dnssec_heatmap}${dnssec_status}${reset_text}" if [ "${DHCP_ACTIVE}" = "true" ]; then @@ -746,6 +755,7 @@ PrintNetworkInformation() { else CleanEcho "${bold_text}NETWORK =======================================================================${reset_text}" CleanPrintf " %-10s%-19s\e[0K\\n" "Hostname:" "${full_hostname}" + CleanPrintf " %-11s%-14s %-4s%-9s %-4s%-9s\e[0K\\n" "Interface:" "${iface_name}" "TX:" "${tx_bytes}" "RX:" "${rx_bytes}" CleanPrintf " %-6s%-19s %-10s%-29s\e[0K\\n" "IPv4:" "${pi_ip4_addr}" "IPv6:" "${pi_ip6_addr}" CleanEcho "DNS ===========================================================================" CleanPrintf " %-10s%-39s\e[0K\\n" "Servers:" "${dns_information}" From de9c144f0e6e5013a1950dacaeaf403a40f96988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Sun, 26 Jun 2022 21:30:38 +0200 Subject: [PATCH 09/24] Use FTL >gateway endpoint to get router IP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index cbe80e6e..5bf02b64 100755 --- a/padd.sh +++ b/padd.sh @@ -377,7 +377,7 @@ GetNetworkInformation() { # if the DHCP Router variable isn't set # Issue 3: https://github.com/jpmck/PADD/issues/3 if [ -z ${DHCP_ROUTER+x} ]; then - DHCP_ROUTER=$(/sbin/ip route | awk '/default/ { printf "%s\t", $3 }') + DHCP_ROUTER=$(GetFTLData "gateway" | awk '{ printf "%s\t", $1 }') fi dhcp_info=" Router: ${DHCP_ROUTER}" From ff7749ef58513dbb18d8df95f7ba0c1e25242034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Tue, 28 Jun 2022 22:15:27 +0200 Subject: [PATCH 10/24] Bump version to 3.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index cbe80e6e..edccf55e 100755 --- a/padd.sh +++ b/padd.sh @@ -26,7 +26,7 @@ cd "$tmpdir/padd_$(id -u)/" > /dev/null || { ############################################ VARIABLES ############################################# # VERSION -padd_version="v3.7.1" +padd_version="v3.8.0" # DATE today=$(date +%Y%m%d) From 13958e6804abb5649c68fa0652d26477a6b911bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 29 Jun 2022 13:16:09 +0200 Subject: [PATCH 11/24] Add .editorconfig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- .editorconfig | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..66c982b1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# EditorConfig is awesome: https://editorconfig.org/ + +# top-most EditorConfig file +root = true + +[*] +insert_final_newline = true +indent_style = tab +indent_size = 4 +charset = utf-8 +trim_trailing_whitespace = true + +[*.yml] +indent_style = space +indent_size = 2 From b332f0c584d6cf91ec5e9fcc602f439455b31feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 29 Jun 2022 13:18:44 +0200 Subject: [PATCH 12/24] Add editorconfig-checker workflow and fix styling errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- .editorconfig | 10 ++++++++-- .github/workflows/editorconfig-checker.yml | 14 ++++++++++++++ padd.sh | 6 +++--- 3 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/editorconfig-checker.yml diff --git a/.editorconfig b/.editorconfig index 66c982b1..a23c9789 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,11 +5,17 @@ root = true [*] insert_final_newline = true -indent_style = tab -indent_size = 4 +indent_style = space +indent_size = tab +tab_width = 4 charset = utf-8 trim_trailing_whitespace = true [*.yml] indent_style = space indent_size = 2 + +[*.md] +indent_style = space +indent_size = 2 + diff --git a/.github/workflows/editorconfig-checker.yml b/.github/workflows/editorconfig-checker.yml new file mode 100644 index 00000000..37b20ba3 --- /dev/null +++ b/.github/workflows/editorconfig-checker.yml @@ -0,0 +1,14 @@ +name: editorconfig-checker + +on: + pull_request: + push: + +jobs: + build: + name: editorconfig-checker + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - uses: editorconfig-checker/action-editorconfig-checker@main + - run: editorconfig-checker diff --git a/padd.sh b/padd.sh index cbe80e6e..5b5d6a9d 100755 --- a/padd.sh +++ b/padd.sh @@ -523,7 +523,7 @@ GetVersionInformation() { if [ "$INSTALL_WEB_INTERFACE" = true ]; then web_version=$(pihole -v -a | awk '{print $4}' | tr -d '[:alpha:]') web_version_latest=$(pihole -v -a | awk '{print $(NF)}' | tr -d ')') - + # if web_version is something else then x.xx set it to N/A if ! echo "${web_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${web_version_latest}" = "ERROR" ]; then web_version="N/A" @@ -550,7 +550,7 @@ GetVersionInformation() { # Gather FTL version information... ftl_version=$(pihole -v -f | awk '{print $4}' | tr -d '[:alpha:]') ftl_version_latest=$(pihole -v -f | awk '{print $(NF)}' | tr -d ')') - + # if ftl_version is something else then x.xx set it to N/A if ! echo "${ftl_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${ftl_version_latest}" = "ERROR" ]; then ftl_version="N/A" @@ -892,7 +892,7 @@ PrintSystemInformation() { CleanEcho "${bold_text}SYSTEM ========================================================================${reset_text}" # Device CleanPrintf " %-10s%-39s\e[0K\\n" "Device:" "${sys_model}" - + # Uptime and memory CleanPrintf " %-10s%-39s %-10s[${memory_heatmap}%-10s${reset_text}] %-6s\\n" "Uptime:" "${system_uptime}" "Memory:" "${memory_bar}" "${memory_percent}%" From 5c0bf9a29ec437449d5fc8d8ddf861480dd07749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 29 Jun 2022 13:40:16 +0200 Subject: [PATCH 13/24] Add dependabot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- .github/dependabot.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..63e5a27f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly + day: saturday + time: "10:00" + open-pull-requests-limit: 10 + target-branch: devel + reviewers: + - "pi-hole/padd-maintainers" From c38f3558c64e583d6d81ba4b06de2a205922771b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 29 Jun 2022 14:02:44 +0200 Subject: [PATCH 14/24] Add codepsell workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- .github/workflows/codespell.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/codespell.yml diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml new file mode 100644 index 00000000..d7af7c4f --- /dev/null +++ b/.github/workflows/codespell.yml @@ -0,0 +1,16 @@ +name: Codespell +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + spell-check: + if: github.event.pull_request.draft == false + runs-on: ubuntu-latest + steps: + - + name: Checkout repository + uses: actions/checkout@v3 + - + name: Spell-Checking + uses: codespell-project/actions-codespell@master From 353cee5bcdb275e2275dbb651d798a4369909c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 29 Jun 2022 21:25:46 +0200 Subject: [PATCH 15/24] We do support Pi-hole beta MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- .github/ISSUE_TEMPLATE/bug_report.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 5195f50f..2c5bc528 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,13 +4,12 @@ about: Create a report to help us improve --- -*Before submitting a bug report, are you using a test version of Pi-hole? If so, PADD doesn‘t support beta versions of Pi-hole!* - **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. ... 2. ... From 9a4eadfcbb2099f7b6351e5371ae6ed8ee81a5c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 29 Jun 2022 22:04:04 +0200 Subject: [PATCH 16/24] No need to keep tab as FTL is always returning only one IP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index 5bf02b64..6362e296 100755 --- a/padd.sh +++ b/padd.sh @@ -377,7 +377,7 @@ GetNetworkInformation() { # if the DHCP Router variable isn't set # Issue 3: https://github.com/jpmck/PADD/issues/3 if [ -z ${DHCP_ROUTER+x} ]; then - DHCP_ROUTER=$(GetFTLData "gateway" | awk '{ printf "%s\t", $1 }') + DHCP_ROUTER=$(GetFTLData "gateway" | awk '{ printf $1 }') fi dhcp_info=" Router: ${DHCP_ROUTER}" From eb687d496cdf73e904c37728a6bf03c4d5408a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 29 Jun 2022 22:43:03 +0200 Subject: [PATCH 17/24] Remove wrongly added > on FTL API call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index cbe80e6e..83a38a6a 100755 --- a/padd.sh +++ b/padd.sh @@ -408,7 +408,7 @@ GetNetworkInformation() { fi #Default interface data - def_iface_data=$(GetFTLData ">interfaces" | head -n1) + def_iface_data=$(GetFTLData "interfaces" | head -n1) iface_name="$(echo "$def_iface_data" | awk '{print $1}')" tx_bytes="$(echo "$def_iface_data" | awk '{print $4}')" rx_bytes="$(echo "$def_iface_data" | awk '{print $5}')" From c0f09a0eb4b8c41fd18a34fee8590083badcf770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Thu, 30 Jun 2022 13:40:55 +0200 Subject: [PATCH 18/24] Add individual timers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König Source setupVars.conf when needed to reflect changes in Pi-hole config Signed-off-by: Christian König Change greater than to greater or equal Signed-off-by: Christian König --- padd.sh | 56 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/padd.sh b/padd.sh index c06a8e3f..dce74b22 100755 --- a/padd.sh +++ b/padd.sh @@ -28,15 +28,16 @@ cd "$tmpdir/padd_$(id -u)/" > /dev/null || { # VERSION padd_version="v3.8.0" -# DATE -today=$(date +%Y%m%d) +# LastChecks +LastCheckVersionInformation=$(date +%s) +LastCheckNetworkInformation=$(date +%s) +LastCheckSummaryInformation=$(date +%s) +LastCheckPiholeInformation=$(date +%s) +LastCheckSystemInformation=$(date +%s) # CORES core_count=$(nproc --all 2> /dev/null) -# Get Config variables -. /etc/pihole/setupVars.conf - piHoleVersion_file="./piHoleVersion" # COLORS @@ -1069,6 +1070,9 @@ OutputJSON() { } StartupRoutine(){ + # Get Config variables + . /etc/pihole/setupVars.conf + if [ "$1" = "pico" ] || [ "$1" = "nano" ] || [ "$1" = "micro" ]; then PrintLogo "$1" printf "%b" "START-UP ===========\n" @@ -1205,15 +1209,43 @@ NormalPADD() { mini_status_=${mini_status_ok} tiny_status_=${tiny_status_ok} - # Start getting our information - GetVersionInformation ${padd_size} - GetSummaryInformation ${padd_size} - GetPiholeInformation ${padd_size} - GetNetworkInformation ${padd_size} - GetSystemInformation ${padd_size} - # Sleep for 5 seconds sleep 5 + + # Start getting our information for next round + now=$(date +%s) + + # Get uptime, CPU load, temp, etc. every 5 seconds + if [ $((now - LastCheckSystemInformation)) -ge 5 ]; then + . /etc/pihole/setupVars.conf + GetSystemInformation ${padd_size} + LastCheckSystemInformation="${now}" + fi + + # Get cache info, last ad domain, blocking percentage, etc. every 5 seconds + if [ $((now - LastCheckSummaryInformation)) -ge 5 ]; then + GetSummaryInformation ${padd_size} + LastCheckSummaryInformation="${now}" + fi + + # Get FTL status every 5 seconds + if [ $((now - LastCheckPiholeInformation)) -ge 5 ]; then + GetPiholeInformation ${padd_size} + LastCheckPiholeInformation="${now}" + fi + + # Get IPv4 address, DNS servers, DNSSEC, hostname, DHCP status, interface traffic, etc. every 30 seconds + if [ $((now - LastCheckNetworkInformation)) -ge 30 ]; then + GetNetworkInformation ${padd_size} + LastCheckNetworkInformation="${now}" + fi + + # Get Pi-hole components and PADD version information once every 24 hours + if [ $((now - LastCheckVersionInformation)) -ge 86400 ]; then + GetVersionInformation ${padd_size} + LastCheckVersionInformation="${now}" + fi + done } From e98fc9dc2b4110f44fe7c776d9eaec2297d403c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Thu, 30 Jun 2022 13:50:48 +0200 Subject: [PATCH 19/24] Remove now unused piHoleVersion_file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 274 ++++++++++++++++++-------------------------------------- 1 file changed, 89 insertions(+), 185 deletions(-) diff --git a/padd.sh b/padd.sh index dce74b22..c848ec8a 100755 --- a/padd.sh +++ b/padd.sh @@ -11,18 +11,6 @@ LC_ALL=C LC_NUMERIC=C -# creates a new local temp directory /tmp/padd_uid -tmpdir=$(dirname "$(mktemp -u)") -mkdir -p "$tmpdir/padd_$(id -u)/" - -# change into the newly created directory -oldpath=$(pwd) -cd "$tmpdir/padd_$(id -u)/" > /dev/null || { - EC=$? - echo >&2 "Could not chdir to the temp directory (exit code $EC)" - exit $EC -} - ############################################ VARIABLES ############################################# # VERSION @@ -38,8 +26,6 @@ LastCheckSystemInformation=$(date +%s) # CORES core_count=$(nproc --all 2> /dev/null) -piHoleVersion_file="./piHoleVersion" - # COLORS CSI="$(printf '\033')[" red_text="${CSI}91m" # Red @@ -481,175 +467,118 @@ GetPiholeInformation() { GetVersionInformation() { # Check if version status has been saved - if [ -f "$piHoleVersion_file" ]; then # the file exists... - # the file exits, use it - # shellcheck source=./piHoleVersion - . "$piHoleVersion_file" + core_version=$(pihole -v -p | awk '{print $4}' | tr -d '[:alpha:]') + core_version_latest=$(pihole -v -p | awk '{print $(NF)}' | tr -d ')') - # Today is - today=$(date +%Y%m%d) - - # was the last check today? - # last_check is read from ./piHoleVersion - # shellcheck disable=SC2154 - if [ "${today}" != "${last_check}" ]; then # no, it wasn't today - # Remove the Pi-hole version file... - rm -f "$piHoleVersion_file" + # if core_version is something else then x.xx set it to N/A + if ! echo "${core_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${core_version_latest}" = "ERROR" ]; then + core_version="N/A" + core_version_heatmap=${yellow_text} + else + # remove the leading "v" from core_version_latest + core_version_latest=$(echo "${core_version_latest}" | tr -d '\r\n[:alpha:]') + # is core up-to-date? + if [ "${core_version}" != "${core_version_latest}" ]; then + out_of_date_flag="true" + core_version_heatmap=${red_text} + else + core_version_heatmap=${green_text} fi + # add leading "v" to version number + core_version="v${core_version}" + fi - else # the file doesn't exist, create it... - # Gather core version information... - core_version=$(pihole -v -p | awk '{print $4}' | tr -d '[:alpha:]') - core_version_latest=$(pihole -v -p | awk '{print $(NF)}' | tr -d ')') + # Gather web version information... + if [ "$INSTALL_WEB_INTERFACE" = true ]; then + web_version=$(pihole -v -a | awk '{print $4}' | tr -d '[:alpha:]') + web_version_latest=$(pihole -v -a | awk '{print $(NF)}' | tr -d ')') - # if core_version is something else then x.xx set it to N/A - if ! echo "${core_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${core_version_latest}" = "ERROR" ]; then - core_version="N/A" - core_version_heatmap=${yellow_text} + # if web_version is something else then x.xx set it to N/A + if ! echo "${web_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${web_version_latest}" = "ERROR" ]; then + web_version="N/A" + web_version_heatmap=${yellow_text} else - # remove the leading "v" from core_version_latest - core_version_latest=$(echo "${core_version_latest}" | tr -d '\r\n[:alpha:]') - # is core up-to-date? - if [ "${core_version}" != "${core_version_latest}" ]; then + # remove the leading "v" from web_version_latest + web_version_latest=$(echo "${web_version_latest}" | tr -d '\r\n[:alpha:]') + # is web up-to-date? + if [ "${web_version}" != "${web_version_latest}" ]; then out_of_date_flag="true" - core_version_heatmap=${red_text} + web_version_heatmap=${red_text} else - core_version_heatmap=${green_text} + web_version_heatmap=${green_text} fi # add leading "v" to version number - core_version="v${core_version}" - fi - - # Gather web version information... - if [ "$INSTALL_WEB_INTERFACE" = true ]; then - web_version=$(pihole -v -a | awk '{print $4}' | tr -d '[:alpha:]') - web_version_latest=$(pihole -v -a | awk '{print $(NF)}' | tr -d ')') - - # if web_version is something else then x.xx set it to N/A - if ! echo "${web_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${web_version_latest}" = "ERROR" ]; then - web_version="N/A" - web_version_heatmap=${yellow_text} - else - # remove the leading "v" from web_version_latest - web_version_latest=$(echo "${web_version_latest}" | tr -d '\r\n[:alpha:]') - # is web up-to-date? - if [ "${web_version}" != "${web_version_latest}" ]; then - out_of_date_flag="true" - web_version_heatmap=${red_text} - else - web_version_heatmap=${green_text} - fi - # add leading "v" to version number - web_version="v${web_version}" - fi - else - # Web interface not installed - web_version="N/A" - web_version_heatmap=${yellow_text} + web_version="v${web_version}" fi + else + # Web interface not installed + web_version="N/A" + web_version_heatmap=${yellow_text} + fi - # Gather FTL version information... - ftl_version=$(pihole -v -f | awk '{print $4}' | tr -d '[:alpha:]') - ftl_version_latest=$(pihole -v -f | awk '{print $(NF)}' | tr -d ')') + # Gather FTL version information... + ftl_version=$(pihole -v -f | awk '{print $4}' | tr -d '[:alpha:]') + ftl_version_latest=$(pihole -v -f | awk '{print $(NF)}' | tr -d ')') - # if ftl_version is something else then x.xx set it to N/A - if ! echo "${ftl_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${ftl_version_latest}" = "ERROR" ]; then - ftl_version="N/A" - ftl_version_heatmap=${yellow_text} + # if ftl_version is something else then x.xx set it to N/A + if ! echo "${ftl_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${ftl_version_latest}" = "ERROR" ]; then + ftl_version="N/A" + ftl_version_heatmap=${yellow_text} + else + # remove the leading "v" from ftl_version_latest + ftl_version_latest=$(echo "${ftl_version_latest}" | tr -d '\r\n[:alpha:]') + # is ftl up-to-date? + if [ "${ftl_version}" != "${ftl_version_latest}" ]; then + out_of_date_flag="true" + ftl_version_heatmap=${red_text} else - # remove the leading "v" from ftl_version_latest - ftl_version_latest=$(echo "${ftl_version_latest}" | tr -d '\r\n[:alpha:]') - # is ftl up-to-date? - if [ "${ftl_version}" != "${ftl_version_latest}" ]; then - out_of_date_flag="true" - ftl_version_heatmap=${red_text} - else - ftl_version_heatmap=${green_text} - fi - # add leading "v" to version number - ftl_version="v${ftl_version}" + ftl_version_heatmap=${green_text} fi + # add leading "v" to version number + ftl_version="v${ftl_version}" + fi - # PADD version information... - padd_version_latest="$(curl --silent https://api.github.com/repos/pi-hole/PADD/releases/latest | grep '"tag_name":' | awk -F \" '{print $4}')" - # is PADD up-to-date? - if [ "${padd_version_latest}" = "" ]; then - padd_version_heatmap=${yellow_text} + # PADD version information... + padd_version_latest="$(curl --silent https://api.github.com/repos/pi-hole/PADD/releases/latest | grep '"tag_name":' | awk -F \" '{print $4}')" + # is PADD up-to-date? + if [ "${padd_version_latest}" = "" ]; then + padd_version_heatmap=${yellow_text} + else + if [ "${padd_version}" != "${padd_version_latest}" ]; then + padd_out_of_date_flag="true" + padd_version_heatmap=${red_text} else - if [ "${padd_version}" != "${padd_version_latest}" ]; then - padd_out_of_date_flag="true" - padd_version_heatmap=${red_text} - else - padd_version_heatmap=${green_text} - fi + padd_version_heatmap=${green_text} fi + fi - # was any portion of Pi-hole out-of-date? - # yes, pi-hole is out of date - if [ "${out_of_date_flag}" = "true" ]; then - version_status="Pi-hole is out-of-date!" - version_heatmap=${red_text} - version_check_box=${check_box_bad} + # was any portion of Pi-hole out-of-date? + # yes, pi-hole is out of date + if [ "${out_of_date_flag}" = "true" ]; then + version_status="Pi-hole is out-of-date!" + pico_status=${pico_status_update} + mini_status_=${mini_status_update} + tiny_status_=${tiny_status_update} + full_status_=${full_status_update} + mega_status=${mega_status_update} + else + # but is PADD out-of-date? + if [ "${padd_out_of_date_flag}" = "true" ]; then + version_status="PADD is out-of-date!" pico_status=${pico_status_update} mini_status_=${mini_status_update} tiny_status_=${tiny_status_update} full_status_=${full_status_update} mega_status=${mega_status_update} + # else, everything is good! else - # but is PADD out-of-date? - if [ "${padd_out_of_date_flag}" = "true" ]; then - version_status="PADD is out-of-date!" - version_heatmap=${red_text} - version_check_box=${check_box_bad} - pico_status=${pico_status_update} - mini_status_=${mini_status_update} - tiny_status_=${tiny_status_update} - full_status_=${full_status_update} - mega_status=${mega_status_update} - # else, everything is good! - else - version_status="Pi-hole is up-to-date!" - version_heatmap=${green_text} - version_check_box=${check_box_good} - pico_status=${pico_status_ok} - mini_status_=${mini_status_ok} - tiny_status_=${tiny_status_ok} - full_status_=${full_status_ok} - mega_status=${mega_status_ok} - fi + version_status="Pi-hole is up-to-date!" + pico_status=${pico_status_ok} + mini_status_=${mini_status_ok} + tiny_status_=${tiny_status_ok} + full_status_=${full_status_ok} + mega_status=${mega_status_ok} fi - - # write it all to the file - echo "last_check=${today}" > "$piHoleVersion_file" - { - echo "core_version=$core_version" - echo "core_version_latest=$core_version_latest" - echo "core_version_heatmap=$core_version_heatmap" - - echo "web_version=$web_version" - echo "web_version_latest=$web_version_latest" - echo "web_version_heatmap=$web_version_heatmap" - - echo "ftl_version=$ftl_version" - echo "ftl_version_latest=$ftl_version_latest" - echo "ftl_version_heatmap=$ftl_version_heatmap" - - echo "padd_version=$padd_version" - echo "padd_version_latest=$padd_version_latest" - echo "padd_version_heatmap=$padd_version_heatmap" - - echo "version_status=\"$version_status\"" - echo "version_heatmap=$version_heatmap" - echo "version_check_box=\"$version_check_box\"" - - echo "pico_status=\"$pico_status\"" - echo "mini_status_=\"$mini_status_\"" - echo "tiny_status_=\"$tiny_status_\"" - echo "full_status_=\"$full_status_\"" - echo "mega_status=\"$mega_status\"" - } >> "$piHoleVersion_file" - - # there's a file now fi } @@ -1066,13 +995,12 @@ CheckConnectivity() { OutputJSON() { GetSummaryInformation echo "{\"domains_being_blocked\":${domains_being_blocked_raw},\"dns_queries_today\":${dns_queries_today_raw},\"ads_blocked_today\":${ads_blocked_today_raw},\"ads_percentage_today\":${ads_percentage_today_raw},\"clients\": ${clients}}" - cd "$oldpath" > /dev/null || exit } StartupRoutine(){ # Get Config variables . /etc/pihole/setupVars.conf - + if [ "$1" = "pico" ] || [ "$1" = "nano" ] || [ "$1" = "micro" ]; then PrintLogo "$1" printf "%b" "START-UP ===========\n" @@ -1084,12 +1012,7 @@ StartupRoutine(){ # Check for updates printf "%b" " [■■········] 20%\\r" - if [ -f "$piHoleVersion_file" ]; then - rm -f "$piHoleVersion_file" - printf "%b" " [■■■·······] 30%\\r" - else - printf "%b" " [■■■·······] 30%\\r" - fi + printf "%b" " [■■■·······] 30%\\r" # Get our information for the first time printf "%b" " [■■■■······] 40%\\r" @@ -1113,15 +1036,6 @@ StartupRoutine(){ echo "Starting PADD." - # Check for updates - echo "- Checking for version file." - if [ -f "$piHoleVersion_file" ]; then - echo " - Found and deleted." - rm -f "$piHoleVersion_file" - else - echo " - Not found." - fi - # Get our information for the first time echo "- Gathering system info." GetSystemInformation "mini" @@ -1148,15 +1062,6 @@ StartupRoutine(){ printf "%b" "- Checking internet connection...\n" CheckConnectivity "$1" - # Check for updates - echo "- Checking for PADD version file..." - if [ -f "$piHoleVersion_file" ]; then - echo " - PADD version file found... deleting." - rm -f "$piHoleVersion_file" - else - echo " - PADD version file not found." - fi - # Get our information for the first time echo "- Gathering system information..." GetSystemInformation "$1" @@ -1280,7 +1185,6 @@ if [ $# = 0 ]; then # Run PADD clear NormalPADD - cd "$oldpath" > /dev/null || exit fi for var in "$@"; do From 4a943e6e8e27215abf56456f54339b6a5870bffc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Thu, 30 Jun 2022 19:33:30 +0200 Subject: [PATCH 20/24] Add missing status indicators MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Smith Signed-off-by: Christian König Also GetPiholeInformation in mini during startup Signed-off-by: Christian König Remove trailing underscores Signed-off-by: Christian König --- padd.sh | 69 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/padd.sh b/padd.sh index c848ec8a..9a45e9de 100755 --- a/padd.sh +++ b/padd.sh @@ -86,6 +86,7 @@ mega_status_unknown="${check_box_question} Unable to determine Pi-hole status." # TINY STATUS tiny_status_ok="${check_box_good} System is healthy." tiny_status_update="${check_box_info} Updates are available." +tiny_status_hot="${check_box_bad} System is hot!" tiny_status_off="${check_box_bad} Pi-hole is offline" tiny_status_ftl_down="${check_box_info} FTL is down!" tiny_status_dns_down="${check_box_bad} DNS is off!" @@ -230,8 +231,9 @@ GetSystemInformation() { if [ ${cpu} -gt 80000 ]; then temp_heatmap=${blinking_text}${red_text} pico_status="${pico_status_hot}" - mini_status_="${mini_status_hot} ${blinking_text}${red_text}${temperature}${reset_text}" - full_status_="${full_status_hot} ${blinking_text}${red_text}${temperature}${reset_text}" + mini_status="${mini_status_hot} ${blinking_text}${red_text}${temperature}${reset_text}" + tiny_status="${tiny_status_hot} ${blinking_text}${red_text}${temperature}${reset_text}" + full_status="${full_status_hot} ${blinking_text}${red_text}${temperature}${reset_text}" mega_status="${mega_status_hot} ${blinking_text}${red_text}${temperature}${reset_text}" elif [ ${cpu} -gt 70000 ]; then temp_heatmap=${magenta_text} @@ -410,9 +412,9 @@ GetPiholeInformation() { ftl_heatmap=${yellow_text} ftl_check_box=${check_box_info} pico_status=${pico_status_ftl_down} - mini_status_=${mini_status_ftl_down} - tiny_status_=${tiny_status_ftl_down} - full_status_=${full_status_ftl_down} + mini_status=${mini_status_ftl_down} + tiny_status=${tiny_status_ftl_down} + full_status=${full_status_ftl_down} mega_status=${mega_status_ftl_down} else ftl_status="Running" @@ -431,9 +433,9 @@ GetPiholeInformation() { pihole_heatmap=${red_text} pihole_check_box=${check_box_bad} pico_status=${pico_status_dns_down} - mini_status_=${mini_status_dns_down} - tiny_status_=${tiny_status_dns_down} - full_status_=${full_status_dns_down} + mini_status=${mini_status_dns_down} + tiny_status=${tiny_status_dns_down} + full_status=${full_status_dns_down} mega_status=${mega_status_dns_down} else if [ "${blocking_status}" = "enabled" ]; then @@ -446,9 +448,9 @@ GetPiholeInformation() { pihole_heatmap=${red_text} pihole_check_box=${check_box_bad} pico_status=${pico_status_off} - mini_status_=${mini_status_off} - tiny_status_=${tiny_status_off} - full_status_=${full_status_off} + mini_status=${mini_status_off} + tiny_status=${tiny_status_off} + full_status=${full_status_off} mega_status=${mega_status_off} fi if [ "${blocking_status}" = "unknown" ]; then @@ -456,9 +458,9 @@ GetPiholeInformation() { pihole_heatmap=${yellow_text} pihole_check_box=${check_box_question} pico_status=${pico_status_unknown} - mini_status_=${mini_status_unknown} - tiny_status_=${tiny_status_unknown} - full_status_=${full_status_unknown} + mini_status=${mini_status_unknown} + tiny_status=${tiny_status_unknown} + full_status=${full_status_unknown} mega_status=${mega_status_unknown} fi fi @@ -557,26 +559,26 @@ GetVersionInformation() { if [ "${out_of_date_flag}" = "true" ]; then version_status="Pi-hole is out-of-date!" pico_status=${pico_status_update} - mini_status_=${mini_status_update} - tiny_status_=${tiny_status_update} - full_status_=${full_status_update} + mini_status=${mini_status_update} + tiny_status=${tiny_status_update} + full_status=${full_status_update} mega_status=${mega_status_update} else # but is PADD out-of-date? if [ "${padd_out_of_date_flag}" = "true" ]; then version_status="PADD is out-of-date!" pico_status=${pico_status_update} - mini_status_=${mini_status_update} - tiny_status_=${tiny_status_update} - full_status_=${full_status_update} + mini_status=${mini_status_update} + tiny_status=${tiny_status_update} + full_status=${full_status_update} mega_status=${mega_status_update} # else, everything is good! else version_status="Pi-hole is up-to-date!" pico_status=${pico_status_ok} - mini_status_=${mini_status_ok} - tiny_status_=${tiny_status_ok} - full_status_=${full_status_ok} + mini_status=${mini_status_ok} + tiny_status=${tiny_status_ok} + full_status=${full_status_ok} mega_status=${mega_status_ok} fi fi @@ -605,24 +607,24 @@ PrintLogo() { if [ "$1" = "pico" ]; then CleanEcho "p${padd_text} ${pico_status}" elif [ "$1" = "nano" ]; then - CleanEcho "n${padd_text} ${mini_status_}" + CleanEcho "n${padd_text} ${mini_status}" elif [ "$1" = "micro" ]; then - CleanEcho "µ${padd_text} ${mini_status_}" + CleanEcho "µ${padd_text} ${mini_status}" CleanEcho "" elif [ "$1" = "mini" ]; then - CleanEcho "${padd_text}${dim_text}mini${reset_text} ${mini_status_}" + CleanEcho "${padd_text}${dim_text}mini${reset_text} ${mini_status}" CleanEcho "" elif [ "$1" = "tiny" ]; then CleanEcho "${padd_text}${dim_text}tiny${reset_text} Pi-hole® ${core_version_heatmap}${core_version}${reset_text}, Web ${web_version_heatmap}${web_version}${reset_text}, FTL ${ftl_version_heatmap}${ftl_version}${reset_text}" - CleanPrintf " PADD ${padd_version_heatmap}${padd_version}${reset_text} ${tiny_status_}${reset_text}\e[0K\\n" + CleanPrintf " PADD ${padd_version_heatmap}${padd_version}${reset_text} ${tiny_status}${reset_text}\e[0K\\n" elif [ "$1" = "slim" ]; then - CleanEcho "${padd_text}${dim_text}slim${reset_text} ${full_status_}" + CleanEcho "${padd_text}${dim_text}slim${reset_text} ${full_status}" CleanEcho "" # For the next two, use printf to make sure spaces aren't collapsed elif [ "$1" = "regular" ] || [ "$1" = "slim" ]; then CleanPrintf "${padd_logo_1}\e[0K\\n" CleanPrintf "${padd_logo_2}Pi-hole® ${core_version_heatmap}${core_version}${reset_text}, Web ${web_version_heatmap}${web_version}${reset_text}, FTL ${ftl_version_heatmap}${ftl_version}${reset_text}\e[0K\\n" - CleanPrintf "${padd_logo_3}PADD ${padd_version_heatmap}${padd_version}${reset_text} ${full_status_}${reset_text}\e[0K\\n" + CleanPrintf "${padd_logo_3}PADD ${padd_version_heatmap}${padd_version}${reset_text} ${full_status}${reset_text}\e[0K\\n" CleanEcho "" # normal or not defined else @@ -998,7 +1000,7 @@ OutputJSON() { } StartupRoutine(){ - # Get Config variables + # Get config variables . /etc/pihole/setupVars.conf if [ "$1" = "pico" ] || [ "$1" = "nano" ] || [ "$1" = "micro" ]; then @@ -1040,6 +1042,7 @@ StartupRoutine(){ echo "- Gathering system info." GetSystemInformation "mini" echo "- Gathering Pi-hole info." + GetPiholeInformation "mini" GetSummaryInformation "mini" echo "- Gathering network info." GetNetworkInformation "mini" @@ -1111,8 +1114,10 @@ NormalPADD() { tput ed pico_status=${pico_status_ok} - mini_status_=${mini_status_ok} - tiny_status_=${tiny_status_ok} + mini_status=${mini_status_ok} + tiny_status=${tiny_status_ok} + full_status=${full_status_ok} + mega_status=${mega_status_ok} # Sleep for 5 seconds sleep 5 From 067fac8d0e04370ec5414ea95ec3a25ee5b0b911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Wed, 29 Jun 2022 12:18:42 +0200 Subject: [PATCH 21/24] Improve PADD version comparison MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index 9a45e9de..d303ce03 100755 --- a/padd.sh +++ b/padd.sh @@ -546,10 +546,11 @@ GetVersionInformation() { if [ "${padd_version_latest}" = "" ]; then padd_version_heatmap=${yellow_text} else - if [ "${padd_version}" != "${padd_version_latest}" ]; then + if [ "$(VersionConverter "${padd_version}")" -lt "$(VersionConverter "${padd_version_latest}")" ]; then padd_out_of_date_flag="true" padd_version_heatmap=${red_text} else + # local and remote PADD version match or local is newer padd_version_heatmap=${green_text} fi fi @@ -992,6 +993,12 @@ CheckConnectivity() { fi } +# converts a given version string e.g. v3.7.1 to 3007001000 to allow for easier comparison of multi digit version numbers +# credits https://apple.stackexchange.com/a/123408 +VersionConverter() { + echo "$@" | tr -d '[:alpha:]' | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; +} + ########################################## MAIN FUNCTIONS ########################################## OutputJSON() { From 20de1df393b3461d0a2430b752caf9da706db294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Fri, 1 Jul 2022 10:09:07 +0200 Subject: [PATCH 22/24] Do not nest quotes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index d303ce03..8f21c9be 100755 --- a/padd.sh +++ b/padd.sh @@ -546,7 +546,7 @@ GetVersionInformation() { if [ "${padd_version_latest}" = "" ]; then padd_version_heatmap=${yellow_text} else - if [ "$(VersionConverter "${padd_version}")" -lt "$(VersionConverter "${padd_version_latest}")" ]; then + if [ "$(VersionConverter ${padd_version})" -lt "$(VersionConverter "${padd_version_latest}")" ]; then padd_out_of_date_flag="true" padd_version_heatmap=${red_text} else @@ -555,6 +555,7 @@ GetVersionInformation() { fi fi + # was any portion of Pi-hole out-of-date? # yes, pi-hole is out of date if [ "${out_of_date_flag}" = "true" ]; then From 3475e0b4757ee75332196aaf90f918020325cb05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Mon, 18 Jul 2022 15:22:25 +0200 Subject: [PATCH 23/24] Allow hotfix versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/padd.sh b/padd.sh index 8f21c9be..25fdb31b 100755 --- a/padd.sh +++ b/padd.sh @@ -472,8 +472,8 @@ GetVersionInformation() { core_version=$(pihole -v -p | awk '{print $4}' | tr -d '[:alpha:]') core_version_latest=$(pihole -v -p | awk '{print $(NF)}' | tr -d ')') - # if core_version is something else then x.xx set it to N/A - if ! echo "${core_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${core_version_latest}" = "ERROR" ]; then + # if core_version is something else then x.xx or x.xx.xxx set it to N/A + if ! echo "${core_version}" | grep -qE '^[0-9]+([.][0-9]+){1,2}$' || [ "${core_version_latest}" = "ERROR" ]; then core_version="N/A" core_version_heatmap=${yellow_text} else @@ -495,8 +495,8 @@ GetVersionInformation() { web_version=$(pihole -v -a | awk '{print $4}' | tr -d '[:alpha:]') web_version_latest=$(pihole -v -a | awk '{print $(NF)}' | tr -d ')') - # if web_version is something else then x.xx set it to N/A - if ! echo "${web_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${web_version_latest}" = "ERROR" ]; then + # if web_version is something else then x.xx or x.xx.xxx set it to N/A + if ! echo "${web_version}" | grep -qE '^[0-9]+([.][0-9]+){1,2}$' || [ "${web_version_latest}" = "ERROR" ]; then web_version="N/A" web_version_heatmap=${yellow_text} else @@ -522,8 +522,8 @@ GetVersionInformation() { ftl_version=$(pihole -v -f | awk '{print $4}' | tr -d '[:alpha:]') ftl_version_latest=$(pihole -v -f | awk '{print $(NF)}' | tr -d ')') - # if ftl_version is something else then x.xx set it to N/A - if ! echo "${ftl_version}" | grep -qE '^[0-9]+([.][0-9]+)?$' || [ "${ftl_version_latest}" = "ERROR" ]; then + # if ftl_version is something else then x.xx or x.xx.xxx set it to N/A + if ! echo "${ftl_version}" | grep -qE '^[0-9]+([.][0-9]+){1,2}$' || [ "${ftl_version_latest}" = "ERROR" ]; then ftl_version="N/A" ftl_version_heatmap=${yellow_text} else @@ -543,7 +543,7 @@ GetVersionInformation() { # PADD version information... padd_version_latest="$(curl --silent https://api.github.com/repos/pi-hole/PADD/releases/latest | grep '"tag_name":' | awk -F \" '{print $4}')" # is PADD up-to-date? - if [ "${padd_version_latest}" = "" ]; then + if [ -z "${padd_version_latest}" ]; then padd_version_heatmap=${yellow_text} else if [ "$(VersionConverter ${padd_version})" -lt "$(VersionConverter "${padd_version_latest}")" ]; then From e7dab3f2002617c18ee1052e278889518a1588d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Mon, 18 Jul 2022 22:47:16 +0200 Subject: [PATCH 24/24] Do the conversion outside of the if clause MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- padd.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/padd.sh b/padd.sh index 25fdb31b..5cb68c4e 100755 --- a/padd.sh +++ b/padd.sh @@ -546,7 +546,10 @@ GetVersionInformation() { if [ -z "${padd_version_latest}" ]; then padd_version_heatmap=${yellow_text} else - if [ "$(VersionConverter ${padd_version})" -lt "$(VersionConverter "${padd_version_latest}")" ]; then + padd_version_latest_converted="$(VersionConverter "${padd_version_latest}")" + padd_version_converted=$(VersionConverter "${padd_version}") + + if [ "${padd_version_converted}" -lt "${padd_version_latest_converted}" ]; then padd_out_of_date_flag="true" padd_version_heatmap=${red_text} else