From ecbf01f7d87c418435b8a06457729e4a7c396b4a Mon Sep 17 00:00:00 2001 From: jurgenhaas <juergen@paragon-es.de> Date: Mon, 4 Jul 2016 13:58:48 +0200 Subject: [PATCH] #1 Implement poller for Redmine --- plugins/tracker/sources/baseSource.js | 3 +- .../tracker/sources/redmine/redmineSource.js | 60 +++++++++++++++++++ plugins/tracker/sources/sourcesCollection.js | 1 + 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 plugins/tracker/sources/redmine/redmineSource.js diff --git a/plugins/tracker/sources/baseSource.js b/plugins/tracker/sources/baseSource.js index 59825fe..e94a318 100644 --- a/plugins/tracker/sources/baseSource.js +++ b/plugins/tracker/sources/baseSource.js @@ -60,13 +60,12 @@ BaseTrackerSource.prototype.readItems = function(items, sort) { } this.debug('Last activity: ' + this.formatDate(this.lastActivity)); - var i, item, message; + var i, item; for (i in items) { item = items[i]; if (this.isItemNew(item)) { if (this.notifyItem(item)) { this.debug('Notify'); - this.debug(message); this.dashboard.emit('newTrackerItem', this, item); } diff --git a/plugins/tracker/sources/redmine/redmineSource.js b/plugins/tracker/sources/redmine/redmineSource.js new file mode 100644 index 0000000..96a8d95 --- /dev/null +++ b/plugins/tracker/sources/redmine/redmineSource.js @@ -0,0 +1,60 @@ +/** + * Module dependencies. + */ +var request = require('request'); +var util = require('util'); +var BaseTrackerSource = require('../baseSource'); + +/** + * Redmine TrackerSource, to receive latest changes from and report to targets + * + * @param {String} id + * @param {Integer} lastActivity + * @param {String} url + * @param {Array} params + * @api public + */ +function RedmineTrackerSource(id, lastActivity, url, params) { + RedmineTrackerSource.super_.call(this, id, lastActivity, url, params); +} + +util.inherits(RedmineTrackerSource, BaseTrackerSource); + +RedmineTrackerSource.type = 'Redmine'; + +RedmineTrackerSource.prototype.poll = function() { + var source = this; + var url = source.url + '/issues.json?key=' + source.password + '&sort=updated_on&updated_on=%3E%3D' + source.formatDate(source.lastActivity); + if (source.project_include) { + url += "&project_id=" + source.project_include; + } + source.debug(url); + request + .get(url, + function(error, response, body) { + var res = JSON.parse(body); + source.debug(body); + source.readItems(res.issues, false); + }) + .on('error', function(e) { + source.debug('ERROR: ' + e.message); + }); +}; + +RedmineTrackerSource.prototype.notifyItem = function(item) { + return !(this.hideMine && (item['assigned_to']['name'] == this.username)); +}; + +RedmineTrackerSource.prototype.renderItem = function(item, linkCB, imageCB) { + return item['assigned_to']['name'] + ': ' + linkCB(item['id'], this.url + '/issues/' + item['id']) + ' ' + item['subject']; +}; + +RedmineTrackerSource.prototype.getItemDate = function(item) { + return item['updated_on']; +}; + +RedmineTrackerSource.prototype.formatDate = function(timestamp) { + return timestamp || new Date().toISOString().substr(0, 19) + 'Z'; +}; + +module.exports = RedmineTrackerSource; diff --git a/plugins/tracker/sources/sourcesCollection.js b/plugins/tracker/sources/sourcesCollection.js index 0453849..e455648 100644 --- a/plugins/tracker/sources/sourcesCollection.js +++ b/plugins/tracker/sources/sourcesCollection.js @@ -5,6 +5,7 @@ var TrackerSourceCollection = function(sources) { TrackerSourceCollection.prototype.addDefaultSources = function() { this.add(require('./jira/jiraSource.js')); + this.add(require('./redmine/redmineSource.js')); this.add(require('./rss/rssSource.js')); this.add(require('./teamwork/teamworkSource.js')); this.add(require('./youtrack/youtrackSource.js')); -- GitLab