fedora消息总线(fedmsg)的存储使用者
datanommer的Python项目详细描述
我是datanommer。它只由一个fedmsg消费者组成,它将每个消息填充到 sqlalchemy数据库。
还有一些cli工具可以从数据库中转储信息。
使用virtualenv
强烈建议使用虚拟环境,尽管这不是必须的。使用virtualenvwrapper可以隔离开发环境。您将能够在git checkout中使用最新的datanommer,而不会在系统中弄乱已安装的datanommer副本。
安装virtualenvwrapper的方式:
$ sudo yum install python-virtualenvwrapper
注意:如果您决定不使用python virtualenvwrapper,则始终可以在fedora中使用fedmsg和datanommer的最新更新。如果要执行此操作,请忽略这些说明中的所有mkvirtualenv和workin命令。可以使用sudo yum install fedmsg安装fedmsg,使用sudo yum install datanommer安装datanommer。
开发依赖性
获取:
$ sudo yum install python-virtualenv openssl-devel zeromq-devel gcc
注意:如果提交修补程序,则应检查Contributing以获取样式准则。
设置virtualenv
创建一个新的空virtualenv并安装来自pypi的所有依赖项:
$ mkvirtualenv datanommer (datanommer)$ cdvirtualenv
注意:如果mkvirtualenv命令不可用,请在fedora上尝试source /usr/bin/virtualenvwrapper.sh(如果不运行fedora,则可能需要稍微调整该命令)。您还可以将此命令添加到~/.bashrc文件中,使其自动为您运行。
在Git回购协议上游克隆
源代码在github上。
获取fedmsg:
(datanommer)$ git clone https://github.com/ralphbean/fedmsg.git
获取数据名:
(datanommer)$ git clone https://github.com/ralphbean/datanommer.git
设置fedmsg:
(datanommer)$ cd fedmsg
对于开发,请避免编辑主分支。签出开发分支:
(datanommer)$ git checkout develop (datanommer)$ python setup.py develop
切换到datanommer:
(datanommer)$ cd ../datanommer
请注意,您应该按照以下顺序设置三个包:“datanommer.models”、“datanommer.commands”和“datanommer.consumer”。依次转到三个子文件夹并键入:
(datanommer)$ git checkout develop (datanommer)$ python setup.py develop
创建datanommer数据库:
(datanommer)$ datanommer-create-db
试用datanommer
打开三个终端来尝试这些命令。在每一个中,使用以下命令激活virtualenv:
$ workon datanommer
在一个终端中,键入:
(datanommer)$ fedmsg-relay
在另一个中,键入:
(datanommer)$ fedmsg-hub
在第三种情况下,发出一条消息,该消息由中继接收、重新广播、由datanommer使用并插入datanommer.db:
(datanommer)$ echo "this is a test" | fedmsg-logger
试试命令。信息被储存了吗?:
(datanommer)$ datanommer-stats
loggerMessage应该有条目。:
(datanommer)$ datanommer-dump
检查数据库:
(datanommer)$ sqlite3 datanommer.db > select* from messages;
您应该看到一行类似于:
1|1|org.fedoraproject.dev.logger.log|2012-11-30 23:33:12.077429|||{"log": "this is a test"}
使用alembic迁移
当数据库模型改变时,我们使用alembic来保留数据。Alembic位于以下型号中:
(datanommer)$ cd datanommer.models
要检查当前型号版本:
(datanommer)$ alembic current
如果您的模型是最新的,您应该看到:
INFO [alembic.migration] Context impl SQLiteImpl. INFO [alembic.migration] Will assume transactional DDL. Current revision for sqlite:///../datanommer.db: 198447250956 -> ae2801c4cd9 (head), add category column
如果结果是:
INFO [alembic.migration] Context impl SQLiteImpl. INFO [alembic.migration] Will assume transactional DDL. Current revision for sqlite:///../datanommer.db: None
然后使用以下命令迁移到最新版本:
(datanommer)$ alembic upgrade head
您应该看到:
INFO [alembic.migration] Context impl SQLiteImpl. INFO [alembic.migration] Will assume transactional DDL. INFO [alembic.migration] Running upgrade None -> 198447250956 INFO [alembic.migration] Running upgrade 198447250956 -> ae2801c4cd9