Various Functions

Send Email

require net/smtp

def send_email(to,opts={})

opts[:server] ||= '127.0.0.1'

opts[:from] ||= "Joe Shmo"

opts[:from_alias] ||= 'Joe Shmo Alias'

opts[:subject] ||= 'Sending you a message!'

opts[:body] ||= 'Hello there friend.'

mesg = <<END_OF_MESSAGE

From: #{opts[:from_alias]} <#{opts[:from]}>

To: <#{to}>

Subject: #{opts[:subject]}

Mime-Version: 1.0

Content-Type: text/html

Content-Disposition: inline

#{opts[:body]}

END_OF_MESSAGE

Net::SMTP.start(opts[:server]) do |smtp|

# Handle errors

begin

smtp.send_message mesg, opts[:from], to

rescue

$logger.error("Error sending email to #{to}")

exit(1)

end

end

end

call function with,

send_email "#{assignee_email}", :body => "#{body}", :from => "admin@#{host}", :subject => message

Get YAML config values

require 'yaml'

# get config file value

def get_config(*args)

conf = YAML.load_file($config_file)

# get section

section = args[0]

# check if Config file has Section

if not conf.has_key?(section)

$logger.error("Config file does not have section information for #{section}")

break

end

# remove 1st element, "section"

args.shift

parsepath = "conf[\"#{section}\"]"

args.each do |arg|

parsepath = parsepath+"[\"#{arg}\"]"

end

# Handle errors

begin

return eval(parsepath)

rescue

$logger.error("Config file does not have information for #{parsepath}")

exit(1)

end

end

sample config.yaml

environment:

'America':

prod:

name: GroupA

email: groupa@company.us

dev:

name: GroupB

email: groupb@company.us

'Europe':

prod:

name: GroupA

email: groupa@company.eu

dev:

name: GroupB

email: groupb@company.eu

# get value for prod Europe

started_email = get_config('environment', 'Europe', 'prod', 'email')

Get or update JIRA ticket data via JSON with HTTP response checking

require 'uri'

require 'net/https'

require 'json'

# check response

def check_response(code)

case code.to_i

when (200..206)

$logger.info("HTTP request OK")

when (400..499)

$logger.error("HTTP error when updating ticket #{issue_key}")

when (500..599)

$logger.error("Server problems when updating ticket #{issue_key}")

end

end

# get JIRA ticket json output (GET)

def get_json(path)

uri = URI.parse(path)

http = Net::HTTP.new(uri.host, uri.port)

http.use_ssl = true

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(uri.request_uri)

request.basic_auth($jira_user, $jira_pw)

request.content_type = "application/json"

response = http.request(request)

check_response(response.code)

return JSON.parse(response.body)

end

# Modify JIRA ticket (PUT)

def put_json(path, json_body)

uri = URI.parse(path)

http = Net::HTTP.new(uri.host, uri.port)

http.use_ssl = true

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Put.new(uri.request_uri)

request.content_type = "application/json"

request.basic_auth($jira_user, $jira_pw)

request.body = json_body

response = http.request(request)

check_response(response.code)

end

get ticket JSON,

path = 'https://'+$jira_server+'/rest/api/2/issue/'+issue_key+'?expand=renderedFields'

ticket_json = get_json(path)

update ticket

path='https://'+$jira_server+'/rest/api/2/issue/'+issue_key

json_body = JSON.dump({

"fields" => {

"customfield_11234" => "some info"

}

})

put_json(path, json_body)

setup Logging

require logger

base_dir = '/opt/myapp'

plugin = 'myapp'

log_dir = base_dir + '/logs/'

log_file = log_dir + plugin + '.log'

# create log dir

Dir.mkdir(log_dir) unless File.exists?(log_dir)

# create log file

if not File.exist?(log_file)

File.new(log_file, "w")

end

$logger = Logger.new(log_file)

$logger.level = Logger::DEBUG

$logger.formatter = proc do |severity, datetime, progname, msg|

date_format = datetime.strftime("%Y-%m-%d %H:%M:%S")

"#{date_format} [#{severity}] #{msg}\n"

end

$logger.info("*********************** Running: #{plugin.upcase}")

$logger.error("Error here")