nameko依赖提供程序,使用事件(pub-sub)分派日志数据。
nameko-eventlog-dispatcher的Python项目详细描述
Nameko dependency provider that dispatches log data using ^{tt1}$ (Pub-Sub).
用法
调度事件日志数据
在服务类中包含EventLogDispatcher依赖项:
fromnameko.rpcimportrpcfromnameko_eventlog_dispatcherimportEventLogDispatcherclassFooService:name='foo'eventlog_dispatcher=EventLogDispatcher()@rpcdeffoo_method(self):self.eventlog_dispatcher('foo_event_type',{'value':1},metadata={'meta':2})
调用foo_method将从foo服务发送事件 以log_event作为事件类型。但是foo_event_type将 作为事件元数据的一部分存储的事件类型。
event_type、event_data(可选)和metadata(可选) 可以作为参数提供。event_data和metadata都必须 是字典并包含json可序列化数据。
然后,任何Nameko服务都可以处理此事件。
fromnameko.eventsimportevent_handlerclassBarService:name='bar'@event_handler('foo','log_event')deffoo_log_event_handler(self,body):"""`body` will contain the event log data."""
启动入口点时捕获日志数据
在Nameko配置文件中启用自动捕获事件日志:
# config.yamlEVENTLOG_DISPATCHER:auto_capture:trueentrypoints_to_exclude:[]event_type:log_event
以上所有属性都是可选的,仅用于覆盖它们 默认值。
当auto_capture设置为true时,将调度Nameko事件 每次触发入口点时:
- 它们也可以通过从 派遣他们的服务。
- entrypoint_fired将是作为 事件元数据。
- 只有在ENTRYPOINT_TYPES_TO_LOG类中列出的入口点 属性将被记录。
- entrypoints_to_exclude可用于提供入口点列表 自动触发事件时要排除的方法名。
event_type可以添加到配置中以覆盖默认的Nameko 用于分派此类事件的事件类型。
事件日志数据的格式
这是事件日志数据的格式:
{"service_name":"foo","entrypoint_protocol":"Rpc","entrypoint_name":"foo_method","call_id":"foo.foo_method.d7e907ee-9425-48a6-84e6-89db19e3ce50","call_stack":["standalone_rpc_proxy.call.3f349ea4-ed3e-4a3b-93d0-a36fbf928ecb","bla.bla_method.21d623b4-edc4-4232-9957-4fad72533b75","foo.foo_method.d7e907ee-9425-48a6-84e6-89db19e3ce50"],"event_type":"foo_event_type",# "entrypoint_fired", ..."timestamp":"2017-06-12T13:48:16+00:00","meta":2,# extra information provided as "metadata""data":{"value":1}# extra information provided as "event_data"}
data属性将包含作为 调度事件时event_data参数的参数。
如果提供了metadata,则其元素将作为顶部包含 事件日志数据中的级别属性。
测试
假设rabbitmq已启动并在默认uri上运行 guest:guest@localhost并使用默认端口。有一个 makefile目标使用 默认端口和配置:
$ make docker-rabbitmq-run
在本地运行测试:
$ # Create/activate a virtual environment
$ pip install tox
$ tox
还有其他makefile目标可以运行测试,但是额外的 必须安装依赖项:
$ pip install -U --editable ".[dev]" $ make test $ make coverage
可以提供一个不同的rabbitmq uri,覆盖以下内容 环境变量:RABBIT_CTL_URI和AMQP_URI。
还可以使用^{tt26}提供附加的pytest参数$ 变量:
$ make testRABBIT_CTL_URI=http://guest:guest@dockermachine:15673 AMQP_URI=amqp://guest:guest@dockermachine:5673 ARGS='-x -vv --disable-pytest-warnings' $ make coverage RABBIT_CTL_URI=http://guest:guest@dockermachine:15673 AMQP_URI=amqp://guest:guest@dockermachine:5673 ARGS='-x -vv --disable-pytest-warnings'
更改日志
咨询CHANGELOG 每个版本的修复和增强文档。
许可证
麻省理工学院的执照。见LICENSE 详细情况。