Log file doesn't show message

Hello,

I'd like to have a logging function which either tells me that the text
files have been created successfully or that provides me an error message
should there have been a fatal error. In doing so I coded the following.
Note, however, that a logfile is created but neither of the comments
mentioned above are shown. Why?

# loads the library modules into the Ruby program
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'logger'

# create a log file
def do_at_exit(message,exit_code,logger)
  at_exit { logger.fatal(message) if exit_code == 1 }
  Process.exit(exit_code)
end

logger = Logger.new('logfile.log')

# logger formats: DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
logger.level = Logger::INFO
do_at_exit("Text files successfully created.\n",1,logger) if Process.uid !=
0

# creates array object and iterates over the collection passing elements one
at a time to the "{ |e| ... }" block
%w(rubygems hpricot open-uri).each { |e| require e }

# check new entries

# Hpricot() method takes an object and loads the contents into a document
object
(1..3).each do |id|
  doc = Hpricot(open("http://www.securityfocus.com/bid/#{id}"))

# opens a txt-file for each id according to aModeString (w:= write only,
truncates existing file to zero
# length or creates a new file for writing) and returns a new File object
  File.open("#{id}.txt", "w+") do |f|
    f << (doc/'#vulnerability').inner_text
  end

end

Hello Tom,

I'm not sure what this code should do when it's finished but I rewrote the src, hope this helps:

# Initialize Logger
require 'logger'
root_logger = Logger.new 'root.log'
root_logger.level = Logger::INFO

# Setup at_exit hook
at_exit { root_logger.info 'done.' }

%w{ rubygems hpricot open-uri }.each { |lib| require lib }
URL_MASK = 'http://www.securityfocus.com/bid/%i’.freeze

tgroup = ThreadGroup.new

root_logger.info 'Parsing SecurityFocus...'
( 1 .. 3 ).each do |id|
   root_logger.info " open #{ URL_MASK % id }"
   thread = Thread.new do
     begin
       Hpricot open( URL_MASK % id )
     rescue => error
       root_logger.error error.inspect
     end
   end
   tgroup.add thread
end

tgroup.list.each_with_index do |thread, index|
   if doc = thread.value
     File.open( "#{ index }.txt", 'w+' ) do |file|
       file << ( doc/'#vulnerability' ).inner_text
     end
   end
end

Sincerely
Florian

Hello,

I'd like to have a logging function which either tells me that the text
files have been created successfully or that provides me an error message
should there have been a fatal error. In doing so I coded the following.
Note, however, that a logfile is created but neither of the comments
mentioned above are shown. Why?

# loads the library modules into the Ruby program
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'logger'

# create a log file
def do_at_exit(message,exit_code,logger)
at_exit { logger.fatal(message) if exit_code == 1 }
Process.exit(exit_code)

This would exit the Process (your programm) immediatly after calling do_at_exit...

end

logger = Logger.new('logfile.log')

# logger formats: DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
logger.level = Logger::INFO
do_at_exit("Text files successfully created.\n",1,logger) if Process.uid !=
0

# creates array object and iterates over the collection passing elements one
at a time to the "{ |e| ... }" block
%w(rubygems hpricot open-uri).each { |e| require e }

You already requiered these (?)

···

Am 15.06.2007 um 08:34 schrieb Tom Bombadil:

# check new entries

# Hpricot() method takes an object and loads the contents into a document
object
(1..3).each do |id|
doc = Hpricot(open("http://www.securityfocus.com/bid/#{id\}&quot;\))

# opens a txt-file for each id according to aModeString (w:= write only,
truncates existing file to zero
# length or creates a new file for writing) and returns a new File object
File.open("#{id}.txt", "w+") do |f|
   f << (doc/'#vulnerability').inner_text
end

end

Great, thanks a lot! However, I just encountered a little bug -> I'd like to
have the bid on www.securityfocus.com as file name. Thus, for bugtraq id 1
-> 1.txt, for bugtraq id 2 = 2.txt, etc... How can I do that?

Thanks!

···

On 6/15/07, Florian Aßmann <florian.assmann@email.de> wrote:

Hello Tom,

I'm not sure what this code should do when it's finished but I
rewrote the src, hope this helps:

# Initialize Logger
require 'logger'
root_logger = Logger.new 'root.log'
root_logger.level = Logger::INFO

# Setup at_exit hook
at_exit { root_logger.info 'done.' }

%w{ rubygems hpricot open-uri }.each { |lib| require lib }
URL_MASK = 'http://www.securityfocus.com/bid/%i’.freeze

tgroup = ThreadGroup.new

root_logger.info 'Parsing SecurityFocus...'
( 1 .. 3 ).each do |id|
   root_logger.info " open #{ URL_MASK % id }"
   thread = Thread.new do
     begin
       Hpricot open( URL_MASK % id )
     rescue => error
       root_logger.error error.inspect
     end
   end
   tgroup.add thread
end

tgroup.list.each_with_index do |thread, index|
   if doc = thread.value
     File.open( "#{ index }.txt", 'w+' ) do |file|
       file << ( doc/'#vulnerability' ).inner_text
     end
   end
end

Sincerely
Florian

Am 15.06.2007 um 08:34 schrieb Tom Bombadil:

> Hello,
>
> I'd like to have a logging function which either tells me that the
> text
> files have been created successfully or that provides me an error
> message
> should there have been a fatal error. In doing so I coded the
> following.
> Note, however, that a logfile is created but neither of the comments
> mentioned above are shown. Why?
>
> # loads the library modules into the Ruby program
> require 'rubygems'
> require 'hpricot'
> require 'open-uri'
> require 'logger'
>
> # create a log file
> def do_at_exit(message,exit_code,logger)
> at_exit { logger.fatal(message) if exit_code == 1 }
> Process.exit(exit_code)
This would exit the Process (your programm) immediatly after calling
do_at_exit...

> end
>
> logger = Logger.new('logfile.log')
>
> # logger formats: DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
> logger.level = Logger::INFO
> do_at_exit("Text files successfully created.\n",1,logger) if
> Process.uid !=
> 0
>
> # creates array object and iterates over the collection passing
> elements one
> at a time to the "{ |e| ... }" block
> %w(rubygems hpricot open-uri).each { |e| require e }
You already requiered these (?)

>
> # check new entries
>
> # Hpricot() method takes an object and loads the contents into a
> document
> object
> (1..3).each do |id|
> doc = Hpricot(open("http://www.securityfocus.com/bid/#{id\}&quot;\))
>
> # opens a txt-file for each id according to aModeString (w:= write
> only,
> truncates existing file to zero
> # length or creates a new file for writing) and returns a new File
> object
> File.open("#{id}.txt", "w+") do |f|
> f << (doc/'#vulnerability').inner_text
> end
>
> end

Add 1 to index when you choose the filename...

Great, thanks a lot! However, I just encountered a little bug -> I'd like to
have the bid on www.securityfocus.com as file name. Thus, for bugtraq id 1
-> 1.txt, for bugtraq id 2 = 2.txt, etc... How can I do that?

Thanks!

Hello Tom,

I'm not sure what this code should do when it's finished but I
rewrote the src, hope this helps:

# Initialize Logger
require 'logger'
root_logger = Logger.new 'root.log'
root_logger.level = Logger::INFO

# Setup at_exit hook
at_exit { root_logger.info 'done.' }

%w{ rubygems hpricot open-uri }.each { |lib| require lib }
URL_MASK = 'http://www.securityfocus.com/bid/%i’.freeze

tgroup = ThreadGroup.new

root_logger.info 'Parsing SecurityFocus...'
( 1 .. 3 ).each do |id|
   root_logger.info " open #{ URL_MASK % id }"
   thread = Thread.new do
     begin
       Hpricot open( URL_MASK % id )
     rescue => error
       root_logger.error error.inspect
     end
   end
   tgroup.add thread
end

tgroup.list.each_with_index do |thread, index|
   if doc = thread.value
# File.open( "#{ index }.txt", 'w+' ) do |file|

File.open( "#{ index + 1 }.txt", 'w+' ) do |file| # EASY ISN'T IT?

···

Am 15.06.2007 um 11:26 schrieb Tom Bombadil:

On 6/15/07, Florian Aßmann <florian.assmann@email.de> wrote:

       file << ( doc/'#vulnerability' ).inner_text
     end
   end
end

Sincerely
Florian

Not that easy I'd say as I now have Bugtraq ID: 5, but 1.txt :slight_smile:

···

On 6/15/07, Florian Aßmann <florian.assmann@email.de> wrote:

Add 1 to index when you choose the filename...

Am 15.06.2007 um 11:26 schrieb Tom Bombadil:

> Great, thanks a lot! However, I just encountered a little bug ->
> I'd like to
> have the bid on www.securityfocus.com as file name. Thus, for
> bugtraq id 1
> -> 1.txt, for bugtraq id 2 = 2.txt, etc... How can I do that?
>
> Thanks!
>
> On 6/15/07, Florian Aßmann <florian.assmann@email.de> wrote:
>>
>> Hello Tom,
>>
>> I'm not sure what this code should do when it's finished but I
>> rewrote the src, hope this helps:
>>
>> # Initialize Logger
>> require 'logger'
>> root_logger = Logger.new 'root.log'
>> root_logger.level = Logger::INFO
>>
>> # Setup at_exit hook
>> at_exit { root_logger.info 'done.' }
>>
>> %w{ rubygems hpricot open-uri }.each { |lib| require lib }
>> URL_MASK = 'http://www.securityfocus.com/bid/%i’.freeze
>>
>> tgroup = ThreadGroup.new
>>
>> root_logger.info 'Parsing SecurityFocus...'
>> ( 1 .. 3 ).each do |id|
>> root_logger.info " open #{ URL_MASK % id }"
>> thread = Thread.new do
>> begin
>> Hpricot open( URL_MASK % id )
>> rescue => error
>> root_logger.error error.inspect
>> end
>> end
>> tgroup.add thread
>> end
>>
>> tgroup.list.each_with_index do |thread, index|
>> if doc = thread.value
>> # File.open( "#{ index }.txt", 'w+' ) do |file|
File.open( "#{ index + 1 }.txt", 'w+' ) do |file| # EASY ISN'T IT?
>> file << ( doc/'#vulnerability' ).inner_text
>> end
>> end
>> end
>>
>> Sincerely
>> Florian

Florian,

What if I'd only like to get the latest entries on www.securityfocus.com/bid?
I'd then need a check if #{ URL_MASK % id } == 0 or so, yes?

So long,
Tom

···

--
On 6/15/07, Florian Aßmann <florian.assmann@email.de> wrote:

Add 1 to index when you choose the filename...

Am 15.06.2007 um 11:26 schrieb Tom Bombadil:

> Great, thanks a lot! However, I just encountered a little bug ->
> I'd like to
> have the bid on www.securityfocus.com as file name. Thus, for
> bugtraq id 1
> -> 1.txt, for bugtraq id 2 = 2.txt, etc... How can I do that?
>
> Thanks!
>
> On 6/15/07, Florian Aßmann <florian.assmann@email.de> wrote:
>>
>> Hello Tom,
>>
>> I'm not sure what this code should do when it's finished but I
>> rewrote the src, hope this helps:
>>
>> # Initialize Logger
>> require 'logger'
>> root_logger = Logger.new 'root.log'
>> root_logger.level = Logger::INFO
>>
>> # Setup at_exit hook
>> at_exit { root_logger.info 'done.' }
>>
>> %w{ rubygems hpricot open-uri }.each { |lib| require lib }
>> URL_MASK = 'http://www.securityfocus.com/bid/%i’.freeze
>>
>> tgroup = ThreadGroup.new
>>
>> root_logger.info 'Parsing SecurityFocus...'
>> ( 1 .. 3 ).each do |id|
>> root_logger.info " open #{ URL_MASK % id }"
>> thread = Thread.new do
>> begin
>> Hpricot open( URL_MASK % id )
>> rescue => error
>> root_logger.error error.inspect
>> end
>> end
>> tgroup.add thread
>> end
>>
>> tgroup.list.each_with_index do |thread, index|
>> if doc = thread.value
>> # File.open( "#{ index }.txt", 'w+' ) do |file|
File.open( "#{ index + 1 }.txt", 'w+' ) do |file| # EASY ISN'T IT?
>> file << ( doc/'#vulnerability' ).inner_text
>> end
>> end
>> end
>>
>> Sincerely
>> Florian

Tom Bombadil schrieb:

What if I'd only like to get the latest entries on
www.securityfocus.com/bid?

I'd subscribe the maillist or use a webservice if it exists, otherwise
you'd have to parse the html source of www.securityfocus.com/bid and
find the first field with the bid...
Fetching the site is very expensive, takes much time and ressources.

I'd then need a check if #{ URL_MASK % id } == 0 or so, yes?

No, 'URL_MASK % id' is like 'sprintf URL_MASK, id', see above for
another solution.

Regards
Florian

All right. Lastly, it pretty much seems like it's not that easy as I now get
1.txt for the Bugtraq ID: 5 :slight_smile: It should be 1-1, 2-2, etc.

Have a great weekend,
-Tom

···

--
On 6/15/07, Florian Aßmann <florian.assmann@email.de> wrote:

Tom Bombadil schrieb:
> What if I'd only like to get the latest entries on
> www.securityfocus.com/bid?
I'd subscribe the maillist or use a webservice if it exists, otherwise
you'd have to parse the html source of www.securityfocus.com/bid and
find the first field with the bid...
Fetching the site is very expensive, takes much time and ressources.

> I'd then need a check if #{ URL_MASK % id } == 0 or so, yes?
No, 'URL_MASK % id' is like 'sprintf URL_MASK, id', see above for
another solution.

Regards
Florian