1

这周我一直在玩 RSS 提要,对于我的下一个技巧,我想为我们的内部应用程序日志构建一个。我们有一个集中的数据库表,我们的无数批处理和 Intranet 应用程序使用它来发布日志消息。我想从这个表中创建一个 RSS 提要,但我不确定如何处理这个量 - 即使在正常的一天,每天也可能有数百个条目。一个特殊的让你想戒烟的日子可能会看到几千人。有什么想法吗?

4

6 回答 6

3

我会将提要制作为静态文件(您可以轻松提供数千个),定期重新生成。然后你有一个更广泛的选择,因为它不必运行在秒以下,它甚至可以运行几分钟。并且用户仍然可以获得完美的下载速度和合理的更新速度。

于 2008-09-17T12:58:11.063 回答
2

如果您正在构建一个带有不可错过的通知的系统,那么发布-订阅机制(使用 XMPP、ApacheMQ 支持的其他协议之一或类似的东西)将比联合机制更合适。您需要在生成通知的系统和使用通知的系统之间进行一些耦合,以确保消费者不会错过通知。

(您可以使用 RSS 或 Atom 作为传输格式来执行此操作,但这可能不是一个常见的用例;您需要根据消费者及其之前看到的通知来改变显示的通知。)

于 2008-09-15T16:16:49.620 回答
1

我会尽可能多地拆分提要,让用户根据需要重新组合它们。如果我这样做,我可能会考虑使用 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.

拥有单独的、可链接的提要意味着用户可以一次订阅一个提要,或者将他们关心的提要合并到一个更大的提要中。无论他们更容易阅读,他们都能做到。

于 2009-01-07T18:51:12.513 回答
0

好吧,我决定了我将如何处理这件事。我为每一列使用时间戳字段并按天分组。它需要一点 SQL-fu 才能实现,因为当然那里有一个完整的时间戳,我需要半智能地了解如何从组内选择要显示的日志消息,但这还不错。此外,我正在构建它以让您选择要监控的应用程序,然后显示特定日期的每条消息(最多 50 条)。

这让我明白了一些合理的事情。

我仍然希望对更一般的问题有一个好的答案:“您如何联合许多重要消息,其中缺少消息可能是一个问题?”

于 2008-09-15T16:10:20.260 回答
0

在不了解您的申请的情况下,我无法提供具体建议。

也就是说,在这类系统中,具有一定程度的严重性是很常见的。您可以将查询字符串参数附加到指定严重性的 URL 的末尾。如果设置为“DEBUG”,无论多么微不足道,您都会看到每个事件。如果您将其设置为“致命”,您只会看到“系统故障”的事件。

如果仍然有太多事件,您可能希望将事件细分到某种类别系统中。同样,我会将其作为查询字符串参数。

然后,您可以为各种类别和严重性提供多个 RSS 提要。这应该允许您调整获得可接受级别的警报级别。

于 2008-09-12T21:59:32.130 回答
0

在这种情况下,它更像是一个经理的仪表板:今天投入了多少工作,日志中有什么紧迫的事情,以及我们早上第一次到达的时间,以衡量一夜之间批处理作业出了什么问题.

于 2008-09-15T19:05:13.943 回答