这周我一直在玩 RSS 提要,对于我的下一个技巧,我想为我们的内部应用程序日志构建一个。我们有一个集中的数据库表,我们的无数批处理和 Intranet 应用程序使用它来发布日志消息。我想从这个表中创建一个 RSS 提要,但我不确定如何处理这个量 - 即使在正常的一天,每天也可能有数百个条目。一个特殊的让你想戒烟的日子可能会看到几千人。有什么想法吗?
6 回答
我会将提要制作为静态文件(您可以轻松提供数千个),定期重新生成。然后你有一个更广泛的选择,因为它不必运行在秒以下,它甚至可以运行几分钟。并且用户仍然可以获得完美的下载速度和合理的更新速度。
如果您正在构建一个带有不可错过的通知的系统,那么发布-订阅机制(使用 XMPP、ApacheMQ 支持的其他协议之一或类似的东西)将比联合机制更合适。您需要在生成通知的系统和使用通知的系统之间进行一些耦合,以确保消费者不会错过通知。
(您可以使用 RSS 或 Atom 作为传输格式来执行此操作,但这可能不是一个常见的用例;您需要根据消费者及其之前看到的通知来改变显示的通知。)
我会尽可能多地拆分提要,让用户根据需要重新组合它们。如果我这样做,我可能会考虑使用 Django 和联合框架。
Django 的模型可能可以处理表示您关心的表的数据结构。
您可以有一个可以捕获所有内容的 URL,例如:(r'/rss/(?(\w*?)/)+'
我认为这可能有效,但我现在无法对其进行测试,因此它可能并不完美)。
这样您就可以使用以下 URL(已编辑以取消示例 URL 的自动链接):
- http://feedserver/rss/batch-file-output/
- http://feedserver/rss/support-tickets/
- http://feedserver/rss/batch-file-output/support-tickets/(前两者合二为一)
然后在视图中:
def get_batch_file_messages():
# Grab all the recent batch files messages here.
# Maybe cache the result and only regenerate every so often.
# Other feed functions here.
feed_mapping = { 'batch-file-output': get_batch_file_messages, }
def rss(request, *args):
items_to_display = []
for feed in args:
items_to_display += feed_mapping[feed]()
# Processing/returning the feed.
拥有单独的、可链接的提要意味着用户可以一次订阅一个提要,或者将他们关心的提要合并到一个更大的提要中。无论他们更容易阅读,他们都能做到。
好吧,我决定了我将如何处理这件事。我为每一列使用时间戳字段并按天分组。它需要一点 SQL-fu 才能实现,因为当然那里有一个完整的时间戳,我需要半智能地了解如何从组内选择要显示的日志消息,但这还不错。此外,我正在构建它以让您选择要监控的应用程序,然后显示特定日期的每条消息(最多 50 条)。
这让我明白了一些合理的事情。
我仍然希望对更一般的问题有一个好的答案:“您如何联合许多重要消息,其中缺少消息可能是一个问题?”
在不了解您的申请的情况下,我无法提供具体建议。
也就是说,在这类系统中,具有一定程度的严重性是很常见的。您可以将查询字符串参数附加到指定严重性的 URL 的末尾。如果设置为“DEBUG”,无论多么微不足道,您都会看到每个事件。如果您将其设置为“致命”,您只会看到“系统故障”的事件。
如果仍然有太多事件,您可能希望将事件细分到某种类别系统中。同样,我会将其作为查询字符串参数。
然后,您可以为各种类别和严重性提供多个 RSS 提要。这应该允许您调整获得可接受级别的警报级别。
在这种情况下,它更像是一个经理的仪表板:今天投入了多少工作,日志中有什么紧迫的事情,以及我们早上第一次到达的时间,以衡量一夜之间批处理作业出了什么问题.