Skip to content

Commit 7679778

Browse files
author
hustcc
committed
利用token和host拉取redmine api,填充提单表单
1 parent bdb914a commit 7679778

4 files changed

Lines changed: 88 additions & 12 deletions

File tree

CHANGES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
Version 2016-09-23
2+
-------------
3+
4+
- 数据表sentry_project增加字段 redmine_token, redmine_host varchar(64)
5+
6+
17
Version 2016-08-03 #847
28
-------------
39

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
},
88
"dependencies": {
99
"echarts-for-react": "^1.1.0",
10+
"xhr.js": "^1.0.2",
1011
"bootstrap": "3.3.5",
1112
"classnames": "2.2.0",
1213
"crypto-js": "3.1.5",

src/sentry/api/serializers/models/project.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,7 @@ def serialize(self, obj, attrs, user):
2424
'isPublic': obj.public,
2525
'dateCreated': obj.date_added,
2626
'firstEvent': obj.first_event,
27+
'redmineToken': obj.redmine_token, # add by hzwangzhiwei@20160926 add redmine api info.
28+
'redmineHost': obj.redmine_host,
2729
'features': feature_list,
2830
}

src/sentry/static/sentry/app/views/groupDetails/actions.jsx

Lines changed: 79 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import TooltipMixin from '../../mixins/tooltip';
1010
import {t} from '../../locale';
1111

1212
import Modal, {closeStyle} from 'simple-react-modal';
13+
import XHR from 'xhr.js';
1314

1415
const Snooze = {
1516
// all values in minutes
@@ -28,9 +29,13 @@ const GroupActions = React.createClass({
2829
container: 'body',
2930
}),
3031
],
32+
xhr: new XHR(false),
3133
getInitialState() {
3234
return {
33-
showRedmineModel: false
35+
showRedmineModel: false,
36+
redmineProjects: [],
37+
redmineTrackers: [],
38+
redmineVersions: []
3439
};
3540
},
3641
onDelete() {
@@ -93,9 +98,70 @@ const GroupActions = React.createClass({
9398
},
9499

95100
// add by hzwangzhiwei @20160923, do redmine order.
101+
// 打开remine提单窗口
96102
onRedmineOrderClick(evt) {
97-
this.setState({showRedmineModel: true});
103+
let project = this.getProject();
104+
if (!project.redmineToken || !project.redmineHost) {
105+
alert('请先到项目 Setting / 设置 中配置 Redmine API线管内容!');
106+
return;
107+
}
108+
let projects = trackers = [];
109+
// 请求redmine api,获取该项目的projects、trackers、versions
110+
this.xhr.get('http://redmineapi.nie.netease.com/api/project', {
111+
'token': project.redmineToken,
112+
'host': project.redmineHost
113+
}, function(r) {
114+
r = r.json(); // get the json result.
115+
if (r.success) {
116+
for (var i in r.data) projects.push(i);
117+
}
118+
else {
119+
alert('拉取“项目列表”失败,检查是否 Redmine API 先关配置有误!');
120+
return;
121+
}
122+
});
123+
// 拉取tracker
124+
this.xhr.get('http://redmineapi.nie.netease.com/api/tracker', {
125+
'token': project.redmineToken,
126+
'host': project.redmineHost
127+
}, function(r) {
128+
r = r.json(); // get the json result.
129+
if (r.success) {
130+
trackers = r.data;
131+
}
132+
else {
133+
alert('拉取“跟踪列表”失败,检查是否 Redmine API 先关配置有误!');
134+
return;
135+
}
136+
});
137+
// 更新界面
138+
this.setState({
139+
showRedmineModel: true,
140+
redmineProjects: projects,
141+
redmineTrackers: trackers
142+
});
143+
},
144+
// 当选中某一个redmine项目时,更新周版本
145+
onProjectSelected() {
146+
let redmineProject = this.refs.project_selector.value;
147+
let versions = [];
148+
this.xhr.get('http://redmineapi.nie.netease.com/api/version', {
149+
'token': project.redmineToken,
150+
'host': project.redmineHost,
151+
'project': redmineProject
152+
}, function(r) {
153+
r = r.json(); // get the json result.
154+
if (r.success) {
155+
versions = r.data;
156+
}
157+
else {
158+
alert('拉取项目“周版本”失败,检查是否 Redmine API 先关配置有误!');
159+
return;
160+
}
161+
this.setState({redmineVersions: versions});
162+
});
98163
},
164+
// 关闭redmine提单弹出框
99165
closeRedmineModal() {
100166
this.setState({showRedmineModel: false});
101167
},
@@ -105,6 +171,7 @@ const GroupActions = React.createClass({
105171
console.log(this.refs.version_selector.value);
106172
// do ajax, if success, then close modal, or else alert
107173
// this.setState({showRedmineModel: false});
174+
console.log(this.getProject());
108175
},
109176

110177
onSnooze(duration) {
@@ -276,26 +343,26 @@ const GroupActions = React.createClass({
276343
<div className="box-content with-padding">
277344
<div className="form-group">
278345
<label className="control-label ">Project 项目</label>
279-
<select className="select form-control" ref="project_selector" tabIndex="-1">
280-
<option value="10">Dante (dante)</option>
281-
<option value="3">EP (ep)</option>
282-
<option value="9">F (f)</option>
346+
<select className="select form-control" ref="project_selector" onChange={this.onProjectSelected} tabIndex="-1">
347+
this.state.redmineProjects.map(function(project) {
348+
return <option value={project}>{project}</option>
349+
})
283350
</select>
284351
</div>
285352
<div className="form-group">
286353
<label className="control-label ">Tracker 跟踪</label>
287354
<select className="select form-control" ref="tracker_selector" tabIndex="-1">
288-
<option value="10">Dante (dante)</option>
289-
<option value="3">EP (ep)</option>
290-
<option value="9">F (f)</option>
355+
this.state.redmineTrackers.map(function(tracker) {
356+
return <option value={tracker}>{tracker}</option>
357+
})
291358
</select>
292359
</div>
293360
<div className="form-group">
294361
<label className="control-label ">Version 周版本</label>
295362
<select className="select form-control" ref="version_selector" tabIndex="-1">
296-
<option value="10">Dante (dante)</option>
297-
<option value="3">EP (ep)</option>
298-
<option value="9">F (f)</option>
363+
this.state.redmineVersions.map(function(version) {
364+
return <option value={version}>{version}</option>
365+
})
299366
</select>
300367
</div>
301368
<div className="form-actions">

0 commit comments

Comments
 (0)