我想在网页中使用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秒。
答案 0 :(得分:0)
我对trac
一无所知。
关于Redmine:是的,你可以编写一个简单的插件,它将使用一个钩子或只是添加一个回调到Issue
模型。
方式1(挂钩):
Here你可以找到一个钩子列表。您可以添加向controller_issues_edit_after_save
发送回调。您可以使用以下变量:: params,:issue,:time_entry,:journal(但我认为您只需要issue
)
方式2(模型中的回调):
您可以修补模型Issue
以添加回调。您可以添加多个回调,例如after_save
,after_destroy
。所有回调的逻辑 - 发送问题数据(或只是通知另一个问题id
的服务器已更改)。
希望它对你有所帮助。
答案 1 :(得分:0)
正如评论中其他成员所建议的那样,它更好地找到了大延迟的原因,所以我调查了一下,发现当你需要多次向TRAC发送查询时,你应该更好地使用MULTICALL
而不是多次触发单个查询。
MultiCall将所有查询打包到一个对象中并发送,因此与多次发送查询相比,开销非常小。
使用multicall后,我的时间从20-30秒减少到2-3秒,几乎增加了10倍!
不幸的是我找不到任何关于如何使用multicall的java示例或文档,所以我最终使用了python。
简答 Use MultiCall()