OpenStack通知事件处理库。
winchester的Python项目详细描述
Winchester是一个基于持久流的OpenStack通知事件处理库。
事件表示为简单的python字典。
它们应该是平面字典(不嵌套),至少有三个键:
"消息id":此事件的唯一标识符,如uuid。
"事件类型":标识事件类型的字符串。通常是一个类似"foo.bar.baz"
"timestamp"的分层虚线名称:事件发生的时间(python日期时间,以utc表示)
事件字典的各个键称为*traits*,可以是字符串、整数、浮点数或日期时间。为了处理OpenStack发出的(通常是较大的)
通知,Winchester使用
[StackDistiller库](https://github.com/stackTach/stackDistiller)从通知中提取扁平事件,只包含您实际需要处理的数据。
winchester的处理是通过*trigger s*和*pipelines*完成的。
*trigger*由*match_criteria*组成,就像一个
持久查询,将要处理的事件收集到一个
persistent*流*(存储在SQL数据库中)、一组可区分的
特征,这些特征可以将事件列表分隔成不同的流、
类似于SQL查询中的**GROUP BY**子句和*FIRE U条件*,
指定要触发的指定*流*必须匹配的条件。当它这样做时,*stream*中的事件被发送到
a*pipeline*作为*fire_pipeline*列出作为批处理。
还列出了一个*expire_timestamp*。如果此时给定流不符合
触发条件*,则该流将过期,并可以发送到
过期管道*,以进行备用处理。*fire_pipeline*
和*expire_pipeline*都是可选的,但必须至少指定其中一个
。
a*pipeline*只是简单的*处理程序*的列表。管道中的每个*处理程序*依次接收给定流中按时间戳排序的事件列表。*处理程序*可以从列表中筛选事件,
或向其中添加新事件。这些变化将由*处理程序*进一步
看到。*处理程序*应避免具有副作用的操作,
而不是修改事件列表,因为如果出现错误,可以稍后重新尝试管道处理。相反,如果所有处理程序都在不引发异常的情况下处理
事件列表,则会对每个处理程序进行*commit*调用,使其有机会执行操作,例如向外部系统发送数据。*处理程序*很容易编写,几乎任何实现适当的*handle_events*、*commit*和
*rollback*方法的对象都可以是*handler*
安装和运行。
winchster可以作为一个简单的python包安装。
并且在
*winchester.yaml*配置文件(示例包含在*etc*目录中)中指定了相应的数据库url,
您可以使用以下命令创建相应的数据库架构:
winchester-db-c<;path\u your配置文件>;/winchester.yaml upgrade head
如果您需要手动运行SQL,或者只想查看模式,
下面的命令将打印出相应的表创建SQL:
winchester DB-c<;path_your_config_files>;/winchester.yaml upgrade--sql head
您可以通过调用Winchester的TriggerManager的*add_event*方法将事件
添加到系统中。
如果您正在处理OpenStack通知,则可以调用*add_notification*,
这将用stackdistiller将通知缩减为一个事件,然后用它调用*add_event*。如果要从rabbitmq队列的
读取openstack通知,则有一个
[yagi](https://github.com/rackerlabs/yagi)通知处理器的插件,该插件包含在
winchester中。只需将"winchester.yagi\u handler.winchesterhandler"添加到您的*yagi.conf*部分中要侦听的队列的"apps"行中,然后添加一个:
[winchester]
config\u file=<;path\u to your配置文件>;/winchester.yaml
作为后台
后台进程运行。
Winchester在数据库中使用乐观的锁定方案来协调流的触发、过期和处理,因此您可以运行尽可能多的进程(如
Yagi的*Yagi Event*后台进程)来处理
传入的事件,以及处理结果
处理负载所需的尽可能多的*pipeline\u worker*s,水平缩放系统。
事件表示为简单的python字典。
它们应该是平面字典(不嵌套),至少有三个键:
"消息id":此事件的唯一标识符,如uuid。
"事件类型":标识事件类型的字符串。通常是一个类似"foo.bar.baz"
"timestamp"的分层虚线名称:事件发生的时间(python日期时间,以utc表示)
事件字典的各个键称为*traits*,可以是字符串、整数、浮点数或日期时间。为了处理OpenStack发出的(通常是较大的)
通知,Winchester使用
[StackDistiller库](https://github.com/stackTach/stackDistiller)从通知中提取扁平事件,只包含您实际需要处理的数据。
winchester的处理是通过*trigger s*和*pipelines*完成的。
*trigger*由*match_criteria*组成,就像一个
持久查询,将要处理的事件收集到一个
persistent*流*(存储在SQL数据库中)、一组可区分的
特征,这些特征可以将事件列表分隔成不同的流、
类似于SQL查询中的**GROUP BY**子句和*FIRE U条件*,
指定要触发的指定*流*必须匹配的条件。当它这样做时,*stream*中的事件被发送到
a*pipeline*作为*fire_pipeline*列出作为批处理。
还列出了一个*expire_timestamp*。如果此时给定流不符合
触发条件*,则该流将过期,并可以发送到
过期管道*,以进行备用处理。*fire_pipeline*
和*expire_pipeline*都是可选的,但必须至少指定其中一个
。
a*pipeline*只是简单的*处理程序*的列表。管道中的每个*处理程序*依次接收给定流中按时间戳排序的事件列表。*处理程序*可以从列表中筛选事件,
或向其中添加新事件。这些变化将由*处理程序*进一步
看到。*处理程序*应避免具有副作用的操作,
而不是修改事件列表,因为如果出现错误,可以稍后重新尝试管道处理。相反,如果所有处理程序都在不引发异常的情况下处理
事件列表,则会对每个处理程序进行*commit*调用,使其有机会执行操作,例如向外部系统发送数据。*处理程序*很容易编写,几乎任何实现适当的*handle_events*、*commit*和
*rollback*方法的对象都可以是*handler*
安装和运行。
winchster可以作为一个简单的python包安装。
并且在
*winchester.yaml*配置文件(示例包含在*etc*目录中)中指定了相应的数据库url,
您可以使用以下命令创建相应的数据库架构:
winchester-db-c<;path\u your配置文件>;/winchester.yaml upgrade head
如果您需要手动运行SQL,或者只想查看模式,
下面的命令将打印出相应的表创建SQL:
winchester DB-c<;path_your_config_files>;/winchester.yaml upgrade--sql head
您可以通过调用Winchester的TriggerManager的*add_event*方法将事件
添加到系统中。
如果您正在处理OpenStack通知,则可以调用*add_notification*,
这将用stackdistiller将通知缩减为一个事件,然后用它调用*add_event*。如果要从rabbitmq队列的
读取openstack通知,则有一个
[yagi](https://github.com/rackerlabs/yagi)通知处理器的插件,该插件包含在
winchester中。只需将"winchester.yagi\u handler.winchesterhandler"添加到您的*yagi.conf*部分中要侦听的队列的"apps"行中,然后添加一个:
[winchester]
config\u file=<;path\u to your配置文件>;/winchester.yaml
作为后台
后台进程运行。
Winchester在数据库中使用乐观的锁定方案来协调流的触发、过期和处理,因此您可以运行尽可能多的进程(如
Yagi的*Yagi Event*后台进程)来处理
传入的事件,以及处理结果
处理负载所需的尽可能多的*pipeline\u worker*s,水平缩放系统。