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")