Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
JIRA List Current Sprint Issues Dashing Widget



A Dashing widget that lists JIRA issues in the current sprint for a specific team. For example open issues, in progress issues, etc.


Requires the following:

Add to Dashing's Gemfile:

gem 'jira-ruby', :require => 'jira'
gem 'json'

and run bundle install.


To use this widget, simply run:

dashing install be38718bc9ff3ee26f9c

For each widget you add to your dashboard, include the following snippet in the layout file:

<li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
    <div data-id="jira-in-prog-issues" data-view="JiraListCurrentSprintIssues"></div>


Substitute the following placeholders in gitlab_merge_requests.rb with the appropriate values:

  • PROJECT: the project path/name
  • RAPID_VIEW_ID: id for the rapid view board
  • JIRA_CONFIG: credentials to access JIRA
  • ISSUE_LISTS: the lists to create (creates a widget per entry)
    • status codes: open (1), in progress (3), resolved (4), reopened (5), closed (6)

The job to update the merge requests is run every 5 minutes but you can adjust this as needed.

class Dashing.JiraListCurrentSprintIssues extends Dashing.Widget
ready: ->
# This is fired when the widget is done being rendered
onData: (data) ->
# Handle incoming data
# You can access the html node of this widget with `@node`
# Example: $(@node).fadeOut().fadeIn() will make the node flash each time data comes in.
<h1 class="header" data-bind="header"></h1>
<h2 class="status-title" data-bind="issue_type"></h2>
<div class="list">
<div data-foreach-issue="issues" class="wrapper">
<div class="left">
<img class="assignee-avatar" data-bind-src="issue.assigneeAvatarUrl" alt="Assignee Avatar" src="">
<div class="assignee-name" data-bind="issue.assigneeName"></div>
<div class="right">
<div class="issue-title" data-bind="issue.title"></div>
<div class="issue-id" data-bind=""></div>
<div style="clear: both; padding-bottom: 1vh;"></div>
<p class="updated-at" data-bind="updatedAtMessage"></p>
require 'jira'
require 'net/http'
require 'json'
# Settings to configure:
# PROJECT: the project path/name
# RAPID_VIEW_ID: id for the rapid view board
# JIRA_CONFIG: credentials to access JIRA
# ISSUE_LISTS: a widget per entry for different statuses (see JIRA_STATUSES)
PROJECT = "my-awesome-project"
:username => 'username',
:password => 'password',
:site => "",
:auth_type => :basic,
:context_path => ''
{:widget_id => 'jira_open_issues', :status_id => 1}, # Lists all open issues
{:widget_id => 'jira_in_prog_issues', :status_id => 3} # Lists all issues in progress
# Constants (do not change)
JIRA_URI = URI.parse(JIRA_CONFIG[:site])
1 => "Open",
3 => "In Progress",
4 => "Reopened",
5 => "Resolved",
6 => "Closed"
# gets the view for a given view id
def get_view_for_viewid(view_id)
http = create_http
request = create_request("/rest/greenhopper/1.0/rapidviews/list")
response = http.request(request)
views = JSON.parse(response.body)['views']
views.each do |view|
if view['id'] == view_id
return view
# gets the active sprint for the view
def get_active_sprint_for_view(view_id)
http = create_http
request = create_request("/rest/greenhopper/1.0/sprintquery/#{view_id}")
response = http.request(request)
sprints = JSON.parse(response.body)['sprints']
sprints.each do |sprint|
if sprint['state'] == 'ACTIVE'
return sprint
# create HTTP
def create_http
http =, JIRA_URI.port)
if ('https' == JIRA_URI.scheme)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
return http
# create HTTP request for given path
def create_request(path)
request = + path)
if JIRA_CONFIG[:username]
request.basic_auth(JIRA_CONFIG[:username], JIRA_CONFIG[:password])
return request
ISSUE_LISTS.each do |list_config|
SCHEDULER.every '5m', :first_in => 0 do |job|
issues = []
status_id = list_config[:status_id]
client =
client.Issue.jql("PROJECT = \"#{PROJECT}\" AND STATUS = \"#{status_id}\" AND SPRINT in openSprints()").each { |issue|
assigneeAvatarUrl = issue.assignee.nil? ? URI.join(JIRA_URI.to_s, "secure/useravatar?avatarId=#{JIRA_ANON_AVATAR_ID}") : issue.assignee.avatarUrls["48x48"]
assigneeName = issue.assignee.nil? ? "unassigned" :
id: issue.key,
title: issue.summary,
assigneeName: assigneeName,
assigneeAvatarUrl: assigneeAvatarUrl
issue_type = JIRA_STATUSES[status_id]
active_sprint = get_active_sprint_for_view(RAPID_VIEW_ID)
sprint_name = active_sprint['name']
send_event(list_config[:widget_id], { header: "#{sprint_name} Issues", issue_type: issue_type, issues: issues})
// ----------------------------------------------------------------------------
// Sass declarations
// ----------------------------------------------------------------------------
$background-color: teal;
$value-color: #fff;
$title-color: rgba(255, 255, 255, 0.7);
$label-color: rgba(255, 255, 255, 0.7);
$updated-at-color: rgba(212, 212, 212, 0.76);
// ----------------------------------------------------------------------------
// Widget-jira-list-current-sprint-issues styles
// ----------------------------------------------------------------------------
.widget-jira-list-current-sprint-issues {
background-color: $background-color;
vertical-align: top !important;
.header {
color: $label-color;
font-size: xx-large;
margin-bottom: 0;
.status-title {
font-size: x-large;
padding-bottom: 1vh;
color: $label-color;
.wrapper {
width: 100%;
height: auto;
.left {
display: inline;
float: left;
width: 4vw;
text-align: left;
overflow: hidden;
.right {
vertical-align: top;
overflow: hidden;
padding-left: 0.5vw;
.issue-title {
font-size: medium;
text-align: left;
.issue-id {
font-size: small;
.assignee-name {
font-size: small;
.list {
list-style: none;
.updated-at {
color: $updated-at-color;

This comment has been minimized.

Copy link

@spudtheimpaler spudtheimpaler commented Dec 4, 2015

Hi! Sorry to ask for "support" here but I don't know where else to put it.

When adding your widget I see a blank screen. I can't find any logs on the server and looking through the dashing support, I added the debugging flag so that I could see the information, and lo and behold the information is being sent, so it isn't a case of jira connection issues. They just aren't being displayed.

Unfortunately, this is where my know-how ends. I don't know Ruby or the framework dashing uses particularly well, but I understand there is a binding between the "jira_in_prog_issues" data-id, and it is this same id that seems to retrieve data. The console log shows:

Received data for jira_in_prog_issues Object > header: "My Project Name" id: "jira_in_prog_issues" issue_type: "In Progress" issues: Array[9] updatedAt: 1449220103 proto: Object {...}

Any guidance would be greatly appreciated, I would love to be able to add this to my dashboard!

Many thanks,


This comment has been minimized.

Copy link

@Martin1001 Martin1001 commented Feb 8, 2016

Hi Mitch,

there is a spelling mistake in dashboard snippet.

You must change the word separator in the data-id variable:

  • data-id="jira-in-prog-issues" > data-id="jira_in_prog_issues"
  • data-id="jira-open-issues" > data-id="jira_open_issues"

This comment has been minimized.

Copy link

@shivpatel779 shivpatel779 commented Nov 17, 2016


hey i have follow all you instruction and updated proper JIRA credential, why? I'm not able to see details from dashboard...

I fix the JIRA::HTTP error while updating valid JIRA credential..


This comment has been minimized.

Copy link

@ScottBrenner ScottBrenner commented Aug 13, 2018

require 'jira' from the first line of jira_list_current_sprint_issues.rb should be require 'jira-ruby'

My widget is displaying 10 issues, but the "last updated" text appears between the third/fourth issue - any way to move it to the bottom of the widget?


This comment has been minimized.

Copy link

@guicattani guicattani commented Jan 17, 2019

Is the coffee script part outdated? It is empty.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment