Lotus分析
一 Lotus的任务
Lotus是一个消息通知服务,topic和subscription是多对多的关系。后面我加了一个发送自定义邮件和自定义短信的功能。
产品里面有个监控报警和通知列表。监控报警里创建alarm时会让选通知给谁。供选择的就是topic。如果alarm被触发,就会发通知给和该alarm绑定的topic,topic再查找它的所有subscription,都发通知。
二
Lotus代码分析
1.lotus的两个进程
lotus-api
lotus-dbsync
2. lotus-dbsync
数据流程:
/usr/local/bin/lotus-dbsync启动,会去调用/lotus/cmd/manage.py的main函数。
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
controller:statistics,topics,subscriptions,publish
(1)statistics:主要用来创建metric
(2)
topics:TopicsController里面有个lookup,可以根据topic_id路由到TopicController
TopicsController里面有两个提供给前端用的接口post和get_all。
post是创建一个topic。
TopicController:get,delete,put,publish
get:获取一个topic(由topic_id指定)的详细信息
delete:删除一个topic(由topic_id指定)
put:修改一个topic(由topic_id指定)
publish:给topic(topic_id指定)的所有subscription发alarm信息
都是对单个topic的操作。
所以我怀疑是否将TopicsController里面的post移到TopicController里面会更合适?
(3)
subscriptions:
一级SubsController,
二级是ConfirmController 和SubController。
url查找到SubController后会根据sub_id
lookup到SubController。
而ConfirmController的路由是由SubsController里面confirm
= ConfirmController()指定。
这一部分主要是订阅topic,确认等内容。subscription里面最重要的一个参数是endpoint。因为消息是发送到这个endpoint,可以是邮箱或短信方式。这里共两种protocol:email和sms。
(4)publish:
自定义发送邮件和短信。这部分是我写的,比较简单。
Publish.py
里面有严重的瑕疵,我自己造成的。
L8-L9 只能import
module(PEP8规定)
L23-L24 8,9导致这SMS()
Email() 严重不规范。
三.
DB
所有的服务都是基于数据。
lotus太小,目前只有三个table:Topic,Subscription,Topic_Sub
Topic存储topic相关字段
Subscription存储
subscription相关字段
Topic_Sub存储topic和subscription的绑定
Lotus分析的更多相关文章
- Lotus Blossom 行动分析
1 漏洞介绍 1.1 代号 - Lotus Blossom行动 漏洞利用率很高 从2012 -2015或者说最近都还在使用 CVE-2012-0158 Lotus Blossom--莲花: 描述了对东 ...
- b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释
继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更新页面显示状态这种方式在运作的,从若干年前简单的ajax流行起来 ...
- b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释
我最近一直在找适合将来用于公司大型bs,b2b b2c的基础架构. 实际情况是要建立一个bs架构b2b.b2c的网站,当然还包括wap站点.手机app站点. 一.现有公司技术人员现状: 1.熟悉asp ...
- Lotus 迁移到Exchange 2010 之准备使用Transport 同步Lotus 相关信息!
这里我们先来分析下Lotus迁移到Exchange2010 的一些原理,由于存在一定周期的共存时间,因此在共存期间必须来实现相应的同步计划,整个同步计划包含了如下的同步计划:
- 使用awstats分析iis站点的日志
环境:win7 + iis7 + perl(ActivePerl-5.20.1.2000) + awstats 7.3 一.找到iis日志所在目录 建议全部都打勾 二.安装perl AWStats是p ...
- Nmon 性能:分析 AIX 和 Linux 性能的免费工具
原文摘自: http://www.ibm.com/developerworks/cn/aix/library/analyze_aix/ 官网:http://www.ibm.com/developerw ...
- 52. 模版和设计元素——Lotus Notes的代码重用
不论是理论上还是实用上,代码重用都是编程的一个重要议题.可以从两个角度来讨论代码重用. 一是逻辑上代码以怎样的方式被重用.既可以通过面向对象的思想普及以来耳熟能详的继承的方式.比如先建了一个车的基类, ...
- NSA Fuzzbunch分析与利用案例
Shadow Brokers泄露出一份震惊世界的机密文档,其中包含了多个 Windows 远程漏洞利用工具.本文主要介绍了其中一款工具Fuzzbunch的分析与利用案例 1 整体目录介绍 解压EQGR ...
- BestCoder Round #91 1002 Lotus and Horticulture
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6012 题意: 这几天Lotus对培养盆栽很感兴趣,于是她想搭建一个温室来满足她的研究欲望. Lotus ...
随机推荐
- awesome awesomeness
Awesome Awesomeness A curated list of amazingly awesome awesomeness.Also available on: Awesome-Aweso ...
- Codeforces Round #221 (Div. 2) Lever I.O.U.
这场cf 做的很差,,第一题犯了一个很低级的错误..把i写成了J.... 第二题 想的太复杂了...其实我们只需要 考虑每个人自己的负债情况就行了,就是假设每个人把别人 欠他的钱,拿过来还给别人..这 ...
- git恢复被修改的文件
恢复到最后一次提交的改动: git checkout -- + 需要恢复的文件名 但是,需要注意的是,如果该文件已经 add 到暂存队列中,上面的命令就不灵光喽 需要先让这个文件取消暂存: git r ...
- 剑指Offer:互为变位词
// 判断两个单词是否互为变位词: 如果两个单词中的字母相同,并且每个字母出现的次数也相同, 那么这两个单词互为变位词 #include <stdio.h> #include <st ...
- Ext入门学习系列(二)弹出窗体
第二章 弹出窗体 上节学习了Ext的环境搭建和最基本的一个操作——弹出对话框,作为一个引子,本节讲述如何弹出一个新窗体,从实例讲解Ext的基本运行原理. 一.Ext的窗体长什么样? 先来看看几个效果, ...
- 自杀程序&递归删除目录
自杀程序,删掉自身,包括执行程序所在的文件夹. 仅在windows下进行了测试,使用语言C# string fileName = Path.GetTempPath() + "killmyse ...
- UVA 11928 The Busy Dog
题意:一只狗被拴在杆子上,从起点开始按直线依次跑到给出的点最后回到起点问绕杆子几圈,逆时针为正,顺时针为负,撞到杆子输出Ouch!. 解法:用叉积判断方向,用余弦定理求出以杆子为顶点的角,加和除以2π ...
- Algorithm for Maximum Subsequence Sum z
MSS(Array[],N)//Where N is the number of elements in array { sum=; //current sum max-sum=;//Maximum ...
- codeforces 671C Ultimate Weirdness of an Array 线段树+构造
题解上说的很清楚了,我照着写的,表示膜拜题解 然后时间复杂度我觉得应该是O(nlogn),虽然常数略大,预处理和倒着扫,都是O(nlogn) #include <stdio.h> #inc ...
- HDU 3001 Travelling 3进制状压dp
题意:10个点,若干条边,边有花费,每个点最多走两次,求走过所有点,花费最少 分析:因为每个点最多走两次,所以联想到3进制,然后枚举状态,就行了(我也是照着网上大神的代码写的) #include &l ...