Lotus分析

Lotus的任务前端

Lotus是一个消息通知服务,topicsubscription是多对多的关系。后面我加了一个发送自定义邮件和自定义短信的功能。sql


产品里面有个监控报警和通知列表。监控报警里建立alarm时会让选通知给谁。供选择的就是topic。若是alarm被触发,就会发通知给和该alarm绑定的topictopic再查找它的全部subscription,都发通知。数据库



Lotus代码分析api

 

1.lotus的两个进程restful

lotus-apiapp

lotus-dbsync函数


2. lotus-dbsyncpost

数据流程:url

/usr/local/bin/lotus-dbsync启动,会去调用/lotus/cmd/manage.pymain函数。spa

main里会调用/lotus/db/migration.py里的dbsync函数。

migration.py里的dbsync调用了/lotus/common/utils里的LazyPluggable来动态获取backend以实现升级或下降到指定版本。

sqlalchemy='lotus.db.sqlalchemy.migration'做为LazyPluggable的第四个参数,会在 lotus.db.sqlalchemy.migration里进行版本比较来实现升级或降级。

最底层的升级或降级或在migrate这个第三方库里实现,这里只调用接口便可。

这个进程的任务是对数据库的升级或降级。取决于指定的版本号。不过通常用来升级到最新。

 

3. lotus-api

lotus-api能够理解成跑在simple_server上的一个pecan app。它的任务是给前端提供restful api

用的是pecan的路由规则。

好比:v1/topics,就会到v1这个目录里找topics.py,而后在根据是什么方法(POST/PUT等)或参数(topic_id)来肯定具体调用哪一个API

目前只有有四个root controllerstatisticstopicssubscriptionspublish

1statistics:主要用来建立metric

 

2topicsTopicsController里面有个lookup,能够根据topic_id路由到TopicController

TopicsController里面有两个提供给前端用的接口postget_all

post是建立一个topic

TopicControllergetdeleteputpublish

get:获取一个topic(topic_id指定)的详细信息

delete:删除一个topic(topic_id指定)

put:修改一个topic(topic_id指定)

publish:topic(topic_id指定)的全部subscriptionalarm信息

都是对单个topic的操做。

因此我怀疑是否将TopicsController里面的post移到TopicController里面会更合适?

 

3subscriptions

一级SubsController, 二级是ConfirmController SubController

url查找到SubController后会根据sub_id lookupSubController

ConfirmController的路由是由SubsController里面confirm = ConfirmController()指定。

这一部分主要是订阅topic,确认等内容。subscription里面最重要的一个参数是endpoint。由于消息是发送到这个endpoint,能够是邮箱或短信方式。这里共两种protocol:email和sms。

 

4publish

自定义发送邮件和短信。这部分是我写的,比较简单。

Publish.py 里面有严重的瑕疵,我本身形成的。

L8-L9 只能import module(PEP8规定)

L23-L24 8,9致使这SMS() Email() 严重不规范。


 

. DB

全部的服务都是基于数据。

lotus过小,目前只有三个tableTopicSubscriptionTopic_Sub

Topic存储topic相关字段

Subscription存储 subscription相关字段

Topic_Sub存储topicsubscription的绑定

相关文章
相关标签/搜索