0

I'm making a program that will run through a printer server and cancel jobs that are hung. As of right now it outputs everything, and what I want to do is exclude root:

Output:

credjet-898837          cdd            5312512   Wed 14 Oct 2015 03:42:32 PM CDT
credjet-898839          cdd            1998848   Wed 14 Oct 2015 03:45:32 PM CDT
credjet-940485          cdd            1206272   Mon 04 Jan 2016 01:10:30 PM CST
credjet-940499          cdd             342016   Mon 04 Jan 2016 01:21:42 PM CST
credjet-940505          cdd             342016   Mon 04 Jan 2016 01:29:26 PM CST
credjet-940509          cdd             342016   Mon 04 Jan 2016 01:38:24 PM CST
credjet-940514          cdd             342016   Mon 04 Jan 2016 02:00:02 PM CST
credjet-940515          cdd            2387968   Mon 04 Jan 2016 02:00:17 PM CST
credjet-940525          cdd            2387968   Mon 04 Jan 2016 02:10:46 PM CST
credjet-940526          cdd            2387968   Mon 04 Jan 2016 02:11:01 PM CST
credjet-940528          cdd            2387968   Mon 04 Jan 2016 02:12:44 PM CST
credjet-940602          cdd            2382848   Mon 04 Jan 2016 02:26:09 PM CST
devljet-931153          siv            1798144   Fri 18 Dec 2015 02:38:30 PM CST
devljet-931157          siv            3278848   Fri 18 Dec 2015 02:47:18 PM CST
devljet-931158          siv            1538048   Fri 18 Dec 2015 02:47:18 PM CST
laser11-917719          root             78848   Wed 18 Nov 2015 09:56:47 PM CST
laser11-918257          root             78848   Thu 19 Nov 2015 09:45:23 PM CST
laser11-918262          root             79872   Thu 19 Nov 2015 09:49:30 PM CST
laser11-918263          root             78848   Thu 19 Nov 2015 09:53:45 PM CST

Expected Output:

credjet-898837          cdd            5312512   Wed 14 Oct 2015 03:42:32 PM CDT
credjet-898839          cdd            1998848   Wed 14 Oct 2015 03:45:32 PM CDT
credjet-940485          cdd            1206272   Mon 04 Jan 2016 01:10:30 PM CST
credjet-940499          cdd             342016   Mon 04 Jan 2016 01:21:42 PM CST
credjet-940505          cdd             342016   Mon 04 Jan 2016 01:29:26 PM CST
credjet-940509          cdd             342016   Mon 04 Jan 2016 01:38:24 PM CST
credjet-940514          cdd             342016   Mon 04 Jan 2016 02:00:02 PM CST
credjet-940515          cdd            2387968   Mon 04 Jan 2016 02:00:17 PM CST
credjet-940525          cdd            2387968   Mon 04 Jan 2016 02:10:46 PM CST
credjet-940526          cdd            2387968   Mon 04 Jan 2016 02:11:01 PM CST
credjet-940528          cdd            2387968   Mon 04 Jan 2016 02:12:44 PM CST
credjet-940602          cdd            2382848   Mon 04 Jan 2016 02:26:09 PM CST
devljet-931153          siv            1798144   Fri 18 Dec 2015 02:38:30 PM CST
devljet-931157          siv            3278848   Fri 18 Dec 2015 02:47:18 PM CST
devljet-931158          siv            1538048   Fri 18 Dec 2015 02:47:18 PM CST 
#<= No more root

Is there a way that I can output the same information, but exclude the root jobs?


Source:

#!/local/usr/bin/ruby

require 'rubygems'
require 'net/ssh'
require 'etc'        

class PrintJobs

  HOST = '<server here>' #<= Left blank for security 
  USERNAME = Etc.getlogin
  PASSWORD = nil

  def scan_for_jobs
    check_jobs = Net::SSH.start(HOST, USERNAME, :password => PASSWORD) do |ssh|
      cmd = "prt_jobs"
      res = ssh.exec!(cmd)
      puts res
    end
  end
end

test = PrintJobs.new
test.scan_for_jobs
Bam
  • 153
  • 13

1 Answers1

2

You can get rid of unwanted lines by using below code:

  res = ssh.exec!(cmd)
  res = res.split("\n").reject {|line| line.match(/\s+root\s+/)}.join("\n")
  puts res 

The result of exec! is one string containing the output of command issued over ssh. Hence, we need to split it by newline and iterate over the array to reject the lines containing root and re-join the array using new line.

Wand Maker
  • 18,476
  • 8
  • 53
  • 87