TRAC添加帖子脚本

时间:2014-09-01 05:59:03

标签: xml-rpc redmine trac

我想在网页中使用trac数据(票证信息,状态等),因为数据检索非常慢(我解释这个的原因是因为我担心我的问题可能是XY Problem)因此我将所有数据导出到数据库以便更快地访问。

现在的问题是,如果有人更新了票证,那么我在数据库中有旧数据。 即使我定期更新我的数据库,然后在两次更新之间也有人可以更新机票,有人可能已经在网站上请求了这些信息。

所以我想如果在每次创建新故障单或修改故障单后,trac都会更新我的数据库。

所以我需要在每次更新trac时执行一个post脚本,并更新我的数据库。

如果不可能,那么我愿意迁移到Redmine,如果它可以在其中做同样的事情。

更新1
Trac版本:0.11.5
插件:不知道,它的公司trac,我在GUI中找不到任何东西 Java api:XML-RPC
时间:20-30秒

更新2
这是我的代码

     XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl ();
     config.setBasicUserName ("harry");
     config.setBasicPassword ("my_passwd");
     config.setServerURL(new URL("https://host.domain.com/project/trac/login/xmlrpc")); 
     XmlRpcClient client = new XmlRpcClient();    
     client.setConfig (config); 
     TrackerDynamicProxy xmlRpcProxy = new TrackerDynamicProxy(client);

     Ticket ticket = (Ticket)xmlRpcProxy.newInstance(Ticket.class);

     Vector vector = ticket.query(); // gives all ticket number
         for(Object obj : vector)
            ticket.get((Integer)obj).get(3);     // summary column   


这样每张票几乎需要半秒钟,并且票数很多,所以总共花费大约20-30秒。

2 个答案:

答案 0 :(得分:0)

我对trac一无所知。

关于Redmine:是的,你可以编写一个简单的插件,它将使用一个钩子或只是添加一个回调到Issue模型。

方式1(挂钩): Here你可以找到一个钩子列表。您可以添加向controller_issues_edit_after_save发送回调。您可以使用以下变量:: params,:issue,:time_entry,:journal(但我认为您只需要issue

方式2(模型中的回调): 您可以修补模型Issue以添加回调。您可以添加多个回调,例如after_saveafter_destroy。所有回调的逻辑 - 发送问题数据(或只是通知另一个问题id的服务器已更改)。

希望它对你有所帮助。

答案 1 :(得分:0)

正如评论中其他成员所建议的那样,它更好地找到了大延迟的原因,所以我调查了一下,发现当你需要多次向TRAC发送查询时,你应该更好地使用MULTICALL而不是多次触发单个查询。


MultiCall将所有查询打包到一个对象中并发送,因此与多次发送查询相比,开销非常小。

使用multicall后,我的时间从20-30秒减少到2-3秒,几乎增加了10倍!

不幸的是我找不到任何关于如何使用multicall的java示例或文档,所以我最终使用了python。

简答 Use MultiCall()