I've created a program that will search our work server where Ghostscripts occur. How it accomplishes this is by first ssh
ing to the server specified, running a bash command to search the server for Ghostscripts caused by our guy that uses them, most frequently. If it finds one, it e-mails somebody on my team. It will also e-mail if it doesn't find one.
I'm curious to know if there are other ways I can do this specific task. Better syntax, etc..
#!/local/usr/bin/ruby
require 'rubygems'
require '<mailgem>'
require 'etc'
require 'net/ssh'
class GhostScript
attr_accessor :host, :usr, :pass
def initialize(host, usr, pass)
@host = host
@usr = usr
@pass = pass
end
def script_search
ssh = Net::SSH.start(host, usr, :password => pass)
res = ssh.exec!('ps -u <user>|grep gs')
if res == nil
MailGem::Mail.new do |m|
m.to = '<email-address>'
m.subject = 'GhostScript not found'
m.body = "GS not found on server: #{host}"
end.send
else
alert(res)
end
end
def alert(res)
MailGem::Mail.new do |m|
m.to = '<email-address>'
m.subject = 'GhostScript found'
m.body = "GS script found on server: #{host}",
"Results of search: #{res}"
end.send
end
end
check = GhostScript.new('<server>', Etc.getlogin, nil)
check.script_search
1 Answer 1
Looks pretty good, just some minor details:
if res == nil
->if !res
DRY the sending of the email by creating a new method:
send_email(to, subject, body)
Subjective: I'd not include a blank lines when there is a change of indentation level (between
class
andattr_accesor
)
-
\$\begingroup\$ I just think the space makes it look a little bit neater. I'm confused as to what this would do exactly
!res
, does it do the same thing as the== nil
just shorter? Also, the method is a good idea, I'll work that in somehow. \$\endgroup\$Bam– Bam2016年01月18日 16:22:04 +00:00Commented Jan 18, 2016 at 16:22 -
1\$\begingroup\$ 1) The rationale for not adding this blank line is consistency: why do you add there and not between
def initialize(host, usr, pass)
and@host = host
, for exemple? 2)if !res
translates toif res == nil || res == false
, which is not exactly what you had, but probably it works all the same. It's more idiomatic (because it's more declarative). \$\endgroup\$tokland– tokland2016年01月19日 08:39:18 +00:00Commented Jan 19, 2016 at 8:39
res
always a (possibly empty) string? \$\endgroup\$nil
, an empty string, or the command. For some reasonnil
always works for me, so I just use it because it's easy. \$\endgroup\$