diff --git a/.travis.yml b/.travis.yml
index 28e8d1d0e4..788b7e9958 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,6 +6,7 @@ matrix:
fast_finish: true
include:
- php: 7.1
+ env: EXECUTE_BUILD_SCHEMA=true
- php: 7.0
env: SKIP_STYLE_CHECK=1
- php: 5.3
@@ -17,7 +18,7 @@ matrix:
- php: 5.5
env: SKIP_STYLE_CHECK=1
- php: 5.6
- env: SKIP_STYLE_CHECK=1 EXECUTE_BUILD_DOCS=true EXECUTE_BUILD_SCHEMA=false
+ env: SKIP_STYLE_CHECK=1 EXECUTE_BUILD_DOCS=true
# - php: hhvm
# env: SKIP_STYLE_CHECK=1
diff --git a/daily.php b/daily.php
index 71ab462bb6..1f0ca5950a 100644
--- a/daily.php
+++ b/daily.php
@@ -8,8 +8,9 @@
$init_modules = array('alerts');
require __DIR__ . '/includes/init.php';
+include_once __DIR__ . '/includes/notifications.php';
-$options = getopt('f:d:o:');
+$options = getopt('f:d:o:t:r:');
if (isset($options['d'])) {
echo "DEBUG\n";
@@ -97,8 +98,26 @@ if ($options['f'] === 'device_perf') {
}
}
+if ($options['f'] === 'set_notification') {
+ if ($options['t'] === 'update') {
+ $title = 'Error: Daily update failed';
+
+ if ($options['r']) {
+ remove_notification($title);
+ } else {
+ new_notification(
+ $title,
+ 'The daily update script (daily.sh) has failed. Please check output by hand. If you need assistance, '
+ . 'visit the LibreNMS Website to find out how.',
+ 2,
+ 'daily.sh'
+ );
+ }
+ }
+}
+
if ($options['f'] === 'notifications') {
- include_once 'includes/notifications.php';
+ post_notifications();
}
if ($options['f'] === 'bill_data') {
diff --git a/daily.sh b/daily.sh
index e40c5154bd..e98091cc2b 100755
--- a/daily.sh
+++ b/daily.sh
@@ -22,6 +22,7 @@
# define DAILY_SCRIPT as the full path to this script and LIBRENMS_DIR as the directory this script is in
DAILY_SCRIPT=$(readlink -f "$0")
LIBRENMS_DIR=$(dirname "$DAILY_SCRIPT")
+COMPOSER="php ${LIBRENMS_DIR}/scripts/composer_wrapper.php"
# set log_file, using librenms $config['log_dir'], if set
# otherwise we default to /logs
@@ -95,6 +96,25 @@ call_daily_php() {
done
}
+#######################################
+# Set critical notifications for the user
+# Globals:
+# LIBRENMS_DIR
+# Arguments:
+# args:
+# Type: update
+# Result: 1 for success, 0 for failure
+# Returns:
+# Exit-Code of Command
+#######################################
+set_notification() {
+ local args="$@";
+ local arg_type=$1;
+ local arg_result=$2;
+
+ php "${LIBRENMS_DIR}/daily.php" -f set_notification -t ${arg_type} -r ${arg_result};
+}
+
#######################################
# Entry into program
# Globals:
@@ -122,28 +142,51 @@ main () {
fi
fi
+ # make sure autoload.php exists before trying to run any php that may require it
+ if [ ! -f "${LIBRENMS_DIR}/vendor/autoload.php" ]; then
+ ${COMPOSER} install --no-dev
+ fi
+
if [[ -z "$arg" ]]; then
up=$(php daily.php -f update >&2; echo $?)
if [[ "$up" == "0" ]]; then
- $DAILY_SCRIPT no-code-update
+ ${DAILY_SCRIPT} no-code-update
+ set_notification update 0 # make sure there are no update notifications if update is disabled
exit
- elif [[ "$up" == "1" ]]; then
+ fi
+
+ # make sure the vendor directory is clean
+ git checkout vendor/ --quiet > /dev/null 2>&1
+
+ update_res=0
+ if [[ "$up" == "1" ]]; then
# Update to Master-Branch
- git checkout vendor/ --quiet > /dev/null 2>&1
old_ver=$(git show --pretty="%H" -s HEAD)
status_run 'Updating to latest codebase' 'git pull --quiet' 'update'
+ update_res=$?
new_ver=$(git show --pretty="%H" -s HEAD)
- if [ "$old_ver" != "$new_ver" ]; then
- status_run "Updated from $old_ver to $new_ver" ''
- fi
elif [[ "$up" == "3" ]]; then
# Update to last Tag
- git checkout vendor/ --quiet > /dev/null 2>&1
old_ver=$(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
status_run 'Updating to latest release' 'git fetch --tags && git checkout $(git describe --tags $(git rev-list --tags --max-count=1))' 'update'
+ update_res=$?
new_ver=$(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
- if [[ "$old_ver" != "$new_ver" ]]; then
+ fi
+
+ if (( $update_res > 0 )); then
+ set_notification update 0
+ fi
+
+ if [[ "$old_ver" != "$new_ver" ]]; then
+# status_run 'Updating Composer packages' "${COMPOSER} install --no-dev" 'update'
+
+ # Run post update checks
+ if [ ! -f "${LIBRENMS_DIR}/vendor/autoload.php" ]; then
+ status_run "Reverting update, check the output of composer diagnose" "git checkout $old_ver" 'update'
+ set_notification update 0
+ else
status_run "Updated from $old_ver to $new_ver" ''
+ set_notification update 1 # only clear the error if update was a success
fi
fi
@@ -156,7 +199,7 @@ main () {
if [[ -z "$cnf" ]] || [[ "$cnf" == "0" ]] || [[ "$cnf" == "false" ]]; then
# Call ourself again in case above pull changed or added something to daily.sh
- $DAILY_SCRIPT post-pull
+ ${DAILY_SCRIPT} post-pull
fi
else
case $arg in
diff --git a/html/index.php b/html/index.php
index 26e40d9991..c7a6e59b8f 100644
--- a/html/index.php
+++ b/html/index.php
@@ -302,6 +302,14 @@ if (dbFetchCell("SELECT COUNT(*) FROM `devices` WHERE `last_polled` <= DATE_ADD(
$msg_box[] = array('type' => 'warning', 'message' => "It appears as though you have some devices that haven't completed polling within the last 15 minutes, you may want to check that out :)",'title' => 'Devices unpolled');
}
+foreach (dbFetchRows('SELECT * FROM `notifications` WHERE `severity` > 1') as $notification) {
+ $msg_box[] = array(
+ 'type' => 'error',
+ 'message' => "${notification['body']}",
+ 'title' => $notification['title']
+ );
+}
+
if (is_array($msg_box)) {
echo("