Skip to content

Instantly share code, notes, and snippets.

@seven1m
Created January 17, 2014 16:52
Show Gist options
  • Save seven1m/8476873 to your computer and use it in GitHub Desktop.
Save seven1m/8476873 to your computer and use it in GitHub Desktop.
require 'httparty'
require 'ostruct'
class Issue < OpenStruct
include HTTParty
base_uri 'https://vitals.atlassian.net/rest/api/2'
USER = 'JIRA_USER'
PASS = 'JIRA_PASSWORD'
PROJECT = 'Consumer Websites'
def status
fields['status']['name']
end
def points
fields['customfield_10004'].to_f
end
def self.all_in_sprint(sprint_jql='sprint in openSprints()')
query = {
jql: "project = \"#{PROJECT}\" and #{sprint_jql}",
maxResults: 1000
}
search(query)['issues'].map { |i| self.new(i) }
end
def self.search(query)
self.get('/search', query: query, basic_auth: {username: USER, password: PASS})
end
end
pid_path = File.expand_path('../burndown.pid', __FILE__)
if File.exist?(pid_path) and File.stat(pid_path).mtime > (Time.now - 30 * 60) # up to 30 mins old
puts 'already running'
exit(1)
end
File.open(pid_path, 'w') { |f| f.write(Process.pid) }
issues = Issue.all_in_sprint
count_by_status = issues.each_with_object({}) { |i, h| h[i.status] ||= 0.0; h[i.status] += i.points }
busy = ['QA Ready', 'Blocked', 'Open', 'In Progress'].map { |s| count_by_status[s].to_f }.inject(&:+)
done = ['Deploy-Ready', 'Closed', 'Test In Prod'].map { |s| count_by_status[s].to_f }.inject(&:+)
now = Time.now.to_i
puts "jira.issues.vitals.sprint.busy #{busy} #{now}"
puts "jira.issues.vitals.sprint.done #{done} #{now}"
count_by_status.each do |status, count|
puts "jira.issues.vitals.sprint.#{status.downcase.gsub(' ', '-')} #{count} #{now}"
end
File.delete(pid_path)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment