Freshdesk

Image preview of Freshdesk plugin.

freshdesk.3m.rb

Edit
Open on GitHub
#!/usr/bin/env ruby

# <xbar.title>Freshdesk</xbar.title>
# <xbar.author>Sean Stewart</xbar.author>
# <xbar.author.github>theseanstewart</xbar.author.github>
# <xbar.image>http://i.imgur.com/EqWSeUP.png</xbar.image>
# <xbar.dependencies>Ruby</xbar.dependencies>
# <xbar.desc>Shows open Freshesk tickets count</xbar.desc>

# Configurations
FRESHDESK_SUBDOMAIN = ""
FRESHDESK_API_KEY = ""

require 'net/http'
require 'json'
require 'date'

def fetch_tickets()
  uri = URI("https://#{FRESHDESK_SUBDOMAIN}.freshdesk.com/api/v2/tickets?filter=new_and_my_open")
  req = Net::HTTP::Get.new(uri)
  req.basic_auth FRESHDESK_API_KEY, 'x'
  res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
  JSON.parse(res.body)
rescue
  []
end

def get_color(count)
  if count > 0
    return "color=red"
  end

  return ""
end

def get_image(count)

  if count > 0
    return "image=iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUJDMUNBQUNBRDk5MTFFNjk4NTg5RDBEODEwOTAwMzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDMxMzA1MzBBRDk5MTFFNjk4NTg5RDBEODEwOTAwMzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QkMxQ0FBQUFEOTkxMUU2OTg1ODlEMEQ4MTA5MDAzOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QkMxQ0FBQkFEOTkxMUU2OTg1ODlEMEQ4MTA5MDAzOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiNRA1gAAAM6SURBVHjalFRZTBNhEN6r24tSKLYVaAlFCHIUMBo0KoEQIgQDaEggYqtvRh89iE9GTXwwEjG8+ESiQQ3G+GLEGA2gCQJBUUsBCVQOW45ydFOglHbZw9nFNgXF6J/M7r+z/3wz883Mj/I8j/zrokxpwosEaQCxgKAgj0DqUe39K78Z1CRmnf2+Rt1w+r1GP8tgDM+hqGjDI1fb7Uhdv2PL+c5D5gUiUmEx5mT2UK6+ZzPDUSpCyueq9R9lOOHmeF6IgkBRlKu2vyyGvSTSrvDTN0UYqM5oPgoAXSykejJh700Sw+2rDF2+xtAZNMeqMBRlISqG2wxty8JZlg4DvV+c6iBQjK9JzMieC/oaOxYmrv+Jp+fZRsT6eXy7ulkEKtGlvGhfmCBrDFnW8TXqaS81bUbEXDDkcJyxVy2R9jM8rxxdXaq9U5SlRKE+lcNOEWEiPWUszz56jag1ZJ145XZU7I9NmNjgWFMIBLhByvVplxieNc4FfBVyXLJ4ICbhXLpqV2lTmcx6q8QspliqT/3SdHmUJtwBX72PoVG9VNk+G1g9FYq1WGtqXueYvNdux5lfqtQ4Up7vodcJS1LO3SfOwQEeEVqHxzSTDgTzbgSShVNynBhz+pdThb2GlHMKXPK1j5q2RBIBIDg4ePvYabcDKIuIDbFJPgZFEDsSihWuRqZK2y/BsFGKXse2swo9pQKwN0u0HxcrhmJ+ESiWlI8ImxUmWBBHKryb0UlmW11DHdnRuvlIkFiJjAuwjObd4uSxkE6G4aI9lihXXTTIo4PzAd9BnVRpE5TdHmeV0FdpUZp7kUD5GkOrn92ICQ2VGoCVBNkiAkG+Q3nq3Q8GVxb0EOayUR4dgMNoq2uwq83tuB32DFUEZ4UOH6UL6cCup/G4dU4EEh5t7rEL4H3lg8dZnaRQjwDR4ihDO4SjgZQQ27LbEOQY8TteFkWblDFVof9hMo/EJe3RkDK62+Pap5UqAsDTjteCwFWRNrns4Q8bFdKFRwSUS0IG0Mm2Ho8rdycQSGcmR60vaHEOTEbqie0HASSvMj69YcrvPQ3DKoUxYVmew4WhhaJ0xstU58Gpd7sd+j8X29/WTwEGAFnYUubYvJP/AAAAAElFTkSuQmCC"
  end

  return "image=iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDMxMzA1MzNBRDk5MTFFNjk4NTg5RDBEODEwOTAwMzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDMxMzA1MzRBRDk5MTFFNjk4NTg5RDBEODEwOTAwMzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEMzEzMDUzMUFEOTkxMUU2OTg1ODlEMEQ4MTA5MDAzOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMzEzMDUzMkFEOTkxMUU2OTg1ODlEMEQ4MTA5MDAzOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjKq6SYAAAGwSURBVHjarNQ9SFtRGMbxRmOpg4qLIioKRbRNsUIrbqJFVETBVSiCBaHiYOlmERGhYId2qJtfi65dtBQHJ1FwC9SIILFiMBoFHQx+Vent/8Bz5Hgbi4Mv/CR5c31y7nvOTcDzvAf3UYFIJJKqX413qEU2HuKPuR6emPdBZGI06AvIwyxqcIhJJBSUrn++VJAJfaTeDzeoFOv6llbE8AJlyMGV2MqQL6FQKOoGzeM3SvAG3+84nm18skHvUY6XGESv+ib4M35qFj2an1vH5k8anmEA05qRDTlBM8Jo0i2+RTeO/MsyK+pALhbQ7nxmAh9j3Ol1oki3HddC0uyKKnTRDl7p9R42Mez74kJ80E7G7RGyQZ7bUM3o4oIUw81CP4r1/swGhdV4jg293kU0xc4lNMePTi9mgyawhjos68MhnauvviDTz3dWf4AVG7SPEbQhiVUdwF+Yc0LMLjag3umNcRiT/mdtCZV6LLoU9r8yY6gi6HpGthq1c+Zh3dLqbitzFy120P6gUzzVXKq0O6nqG57oeNw4kP7qwyJeK+xCT/+ldnEK5//8Ht3XD9tfAQYAOuxnKfg3floAAAAASUVORK5CYII="
end

begin
  tickets = fetch_tickets

  count = 0

  if tickets.length > 0
    count = tickets.length
  end

  puts "#{tickets.length}" + " | " + get_color(count) + " " + get_image(count)

  puts "---"

  puts "View Tickets | href=https://#{FRESHDESK_SUBDOMAIN}.freshdesk.com/helpdesk/tickets"

rescue StandardError => msg
  puts 'Error occured, please refresh bitbar! >' + msg.to_s
end