From 950af5e4c8f810a40ba478f0ba1132f98ce73ca0 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Tue, 18 Aug 2015 08:51:43 -0700 Subject: [PATCH 1/7] Adding redis bgsave monitor. --- config/redis_slave.conf | 2 +- fabfile.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/config/redis_slave.conf b/config/redis_slave.conf index b6581b6c5..d6e21a287 100644 --- a/config/redis_slave.conf +++ b/config/redis_slave.conf @@ -1 +1 @@ -slaveof db_redis_story 6379 \ No newline at end of file +slaveof db_redis 6379 \ No newline at end of file diff --git a/fabfile.py b/fabfile.py index 2ad71a0a8..e7eaca802 100644 --- a/fabfile.py +++ b/fabfile.py @@ -260,8 +260,10 @@ def setup_db(engine=None, skip_common=False): elif engine == "redis": setup_redis() setup_redis_backups() + setup_redis_monitor() elif engine == "redis_slave": setup_redis(slave=True) + setup_redis_monitor() elif engine == "elasticsearch": setup_elasticsearch() setup_db_search() @@ -1104,6 +1106,11 @@ def setup_usage_monitor(): sudo('ln -fs %s/utils/monitor_disk_usage.py /etc/cron.daily/monitor_disk_usage' % env.NEWSBLUR_PATH) sudo('/etc/cron.daily/monitor_disk_usage') +@parallel +def setup_redis_monitor(): + sudo('ln -fs %s/utils/monitor_redis_bgsave.py /etc/cron.daily/monitor_redis_bgsave' % env.NEWSBLUR_PATH) + sudo('/etc/cron.daily/monitor_redis_bgsave') + # ================ # = Setup - Task = # ================ From 80cd1e5a3b2677a07180ea30ccd1f536e404860f Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Tue, 18 Aug 2015 08:51:49 -0700 Subject: [PATCH 2/7] Adding redis bgsave monitor. --- utils/monitor_redis_bgsave.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 utils/monitor_redis_bgsave.py diff --git a/utils/monitor_redis_bgsave.py b/utils/monitor_redis_bgsave.py new file mode 100644 index 000000000..fa02c64a3 --- /dev/null +++ b/utils/monitor_redis_bgsave.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +import sys +sys.path.append('/srv/newsblur') + +import os +import datetime +import requests +import settings +import socket + +def main(): + t = os.popen('stat -c%%Y /var/lib/redis/dump.rdb') + timestamp = t.read().split('\n')[0] + modified = datetime.datetime.fromtimestamp(int(timestamp)) + ten_min_ago = datetime.datetime.now() - datetime.timedelta(minutes=10) + hostname = socket.gethostname() + modified_minutes = datetime.datetime.now() - modified + + if modified < ten_min_ago: + requests.post( + "https://api.mailgun.net/v2/%s/messages" % settings.MAILGUN_SERVER_NAME, + auth=("api", settings.MAILGUN_ACCESS_KEY), + data={"from": "NewsBlur Redis Monitor: %s " % (hostname, hostname), + "to": [settings.ADMINS[0][1]], + "subject": "%s hasn't bgsave'd redis in ten minutes!" % (hostname), + "text": "Last modified %s: %s minutes ago" % (hostname, modified_minutes)}) + else: + print " ---> Redis BGSAve fine: %s / %s ago" % (hostname, modified_minutes) + +if __name__ == '__main__': + main() From 7e679cdf7a15667c72fcf1b6932f7975ae9b57fd Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Tue, 18 Aug 2015 08:52:37 -0700 Subject: [PATCH 3/7] a+x on redis bgsave monitor. --- utils/monitor_redis_bgsave.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 utils/monitor_redis_bgsave.py diff --git a/utils/monitor_redis_bgsave.py b/utils/monitor_redis_bgsave.py old mode 100644 new mode 100755 From 0ea8da6ce6e539df9ada9f7bcbcb2b3411ab498a Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Tue, 18 Aug 2015 09:00:40 -0700 Subject: [PATCH 4/7] Adding log tail to redis bgsave monitor. --- utils/hostname_ssh.py | 3 +-- utils/monitor_redis_bgsave.py | 9 +++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/utils/hostname_ssh.py b/utils/hostname_ssh.py index f61fb1507..6cd150910 100644 --- a/utils/hostname_ssh.py +++ b/utils/hostname_ssh.py @@ -11,7 +11,6 @@ if __name__ == '__main__': doapi = dop.client.Client(settings.DO_CLIENT_KEY, settings.DO_API_KEY) droplets = doapi.show_active_droplets() for droplet in droplets: - if sys.argv[1] in droplet.name: + if sys.argv[1] == droplet.name: print droplet.ip_address break - diff --git a/utils/monitor_redis_bgsave.py b/utils/monitor_redis_bgsave.py index fa02c64a3..bf2b376f8 100755 --- a/utils/monitor_redis_bgsave.py +++ b/utils/monitor_redis_bgsave.py @@ -10,12 +10,13 @@ import settings import socket def main(): - t = os.popen('stat -c%%Y /var/lib/redis/dump.rdb') + t = os.popen('stat -c%Y /var/lib/redis/dump.rdb') timestamp = t.read().split('\n')[0] modified = datetime.datetime.fromtimestamp(int(timestamp)) ten_min_ago = datetime.datetime.now() - datetime.timedelta(minutes=10) hostname = socket.gethostname() modified_minutes = datetime.datetime.now() - modified + log_tail = os.popen('tail -n 100 /var/log/redis.log').read() if modified < ten_min_ago: requests.post( @@ -23,10 +24,10 @@ def main(): auth=("api", settings.MAILGUN_ACCESS_KEY), data={"from": "NewsBlur Redis Monitor: %s " % (hostname, hostname), "to": [settings.ADMINS[0][1]], - "subject": "%s hasn't bgsave'd redis in ten minutes!" % (hostname), - "text": "Last modified %s: %s minutes ago" % (hostname, modified_minutes)}) + "subject": "%s hasn't bgsave'd redis in %s!" % (hostname, modified_minutes), + "text": "Last modified %s: %s ago\n\n----\n\n%s" % (hostname, modified_minutes, log_tail)}) else: - print " ---> Redis BGSAve fine: %s / %s ago" % (hostname, modified_minutes) + print " ---> Redis bgsave fine: %s / %s ago" % (hostname, modified_minutes) if __name__ == '__main__': main() From 97be8b38a907a4826593db0c04cf1b0a0ab7da06 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Thu, 20 Aug 2015 09:40:33 -0700 Subject: [PATCH 5/7] Adding pointer cursor to folders on Mute Feeds. --- media/css/reader.css | 3 --- 1 file changed, 3 deletions(-) diff --git a/media/css/reader.css b/media/css/reader.css index eb23750a9..5b6936387 100644 --- a/media/css/reader.css +++ b/media/css/reader.css @@ -8993,9 +8993,6 @@ form.opml_import_form input { .NB-modal-feedchooser .feed.NB-highlighted .feed_counts .unread_count_negative { display: none; } -.NB-modal-feedchooser .NB-feedlist .folder_title { - cursor: default; -} .NB-modal-feedchooser .NB-feedlist .folder_title .feed_counts_floater { display: none; } From 508864b4ccea9809e87912fcd0e83d7f4b9180e1 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Fri, 21 Aug 2015 13:12:07 -0700 Subject: [PATCH 6/7] Adding roles to zgrep util. --- utils/zgrep.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils/zgrep.py b/utils/zgrep.py index 55971d696..763bf8876 100755 --- a/utils/zgrep.py +++ b/utils/zgrep.py @@ -95,9 +95,11 @@ if __name__ == "__main__": parser = OptionParser() parser.add_option("-f", "--find", dest="find") parser.add_option("-p", "--path", dest="path") + parser.add_option("-r", "--role", dest="role") (options, args) = parser.parse_args() path = options.path find = options.find + role = options.role or 'app' command = "zgrep \"%s\"" % find - main(role="app", command=command, path=path) + main(role=role, command=command, path=path) From b7d79f147433d8eceb3e77ca6402ac6cb6aad3bb Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Mon, 24 Aug 2015 11:36:28 -0700 Subject: [PATCH 7/7] Shift+L now toggles between unread stories and all stories. --- media/js/newsblur/reader/reader.js | 15 +++++++++++++++ media/js/newsblur/reader/reader_keyboard.js | 12 +++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/media/js/newsblur/reader/reader.js b/media/js/newsblur/reader/reader.js index 6d3d1bea5..b81c93cab 100644 --- a/media/js/newsblur/reader/reader.js +++ b/media/js/newsblur/reader/reader.js @@ -4391,6 +4391,17 @@ this.slide_intelligence_slider(value); }, + toggle_read_filter: function() { + var read_filter = NEWSBLUR.assets.view_setting(this.active_feed, 'read_filter'); + var setting = { + 'read_filter': (read_filter == 'unread' ? 'all' : 'unread') + }; + var changed = NEWSBLUR.assets.view_setting(this.active_feed, setting); + if (!changed) return; + + NEWSBLUR.reader.reload_feed(setting); + }, + switch_feed_view_unread_view: function(unread_view) { if (!_.isNumber(unread_view)) unread_view = this.get_unread_view_score(); var $sidebar = this.$s.$sidebar; @@ -6421,6 +6432,10 @@ e.preventDefault(); self.move_intelligence_slider(-1); }); + $document.bind('keypress', 'shift+l', function(e) { + e.preventDefault(); + self.toggle_read_filter(); + }); $document.bind('keypress', 'shift+d', function(e) { e.preventDefault(); self.show_splash_page(); diff --git a/media/js/newsblur/reader/reader_keyboard.js b/media/js/newsblur/reader/reader_keyboard.js index f270f8e0f..a3b3b443e 100644 --- a/media/js/newsblur/reader/reader_keyboard.js +++ b/media/js/newsblur/reader/reader_keyboard.js @@ -57,7 +57,7 @@ _.extend(NEWSBLUR.ReaderKeyboard.prototype, { ]), $.make('div', { className: 'NB-keyboard-group' }, [ $.make('div', { className: 'NB-keyboard-shortcut' }, [ - $.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Return to dashboard'), + $.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Dashboard'), $.make('div', { className: 'NB-keyboard-shortcut-key' }, [ 'esc' ]), @@ -201,6 +201,16 @@ _.extend(NEWSBLUR.ReaderKeyboard.prototype, { '/' ]) ]) + ]), + $.make('div', { className: 'NB-keyboard-group' }, [ + $.make('div', { className: 'NB-keyboard-shortcut' }, [ + $.make('div', { className: 'NB-keyboard-shortcut-explanation' }, 'Toggle unread/all'), + $.make('div', { className: 'NB-keyboard-shortcut-key' }, [ + 'shift', + $.make('span', '+'), + 'L' + ]) + ]) ]) ]),