Class: S3Loggable::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/s3_loggable/logger.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bucket_name) ⇒ Logger

Returns a new instance of Logger.



8
9
10
11
# File 'lib/s3_loggable/logger.rb', line 8

def initialize(bucket_name)
  @s3 = Fog::Storage.new({:provider => 'AWS'}) if S3Loggable.credentials?
  set_s3_bucket(bucket_name)
end

Instance Attribute Details

#bucketObject (readonly)

Returns the value of attribute bucket.



6
7
8
# File 'lib/s3_loggable/logger.rb', line 6

def bucket
  @bucket
end

#s3Object (readonly)

Returns the value of attribute s3.



6
7
8
# File 'lib/s3_loggable/logger.rb', line 6

def s3
  @s3
end

Instance Method Details

#create_log(filename, temp_filename) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/s3_loggable/logger.rb', line 51

def create_log(filename, temp_filename)
  file = @bucket.files.create(:key => filename,
  :content_type => "application/gzip")
  FileUtils.mkdir_p(File.dirname(temp_filename))
  temp_file = File.new(temp_filename, 'w')
  temp_file.binmode
  temp_file.close
  file
end

#get_log(filename) ⇒ Object



46
47
48
49
# File 'lib/s3_loggable/logger.rb', line 46

def get_log(filename)
  file = @bucket.files.get(filename)
  file
end

#log_to_s3(message, id, folder, date_time = DateTime.now) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/s3_loggable/logger.rb', line 18

def log_to_s3(message, id, folder, date_time = DateTime.now)
  filename = "%s/%s/%04d/%02d/%02d%s" % [folder, id, date_time.year, date_time.month, date_time.day, ".rb.gz"]
  temp_filename = "tmp/#{filename}"
  file = get_log(filename)
  file = create_log(filename, temp_filename) unless file
  write_to_log(filename, message, date_time, file, temp_filename)
end

#set_s3_bucket(bucket_name) ⇒ Object



13
14
15
16
# File 'lib/s3_loggable/logger.rb', line 13

def set_s3_bucket(bucket_name)
  @bucket = @s3.directories.get(bucket_name)
  @bucket = @s3.directories.create(:key => bucket_name) unless @bucket
end

#write_to_log(filename, message, date_time, file, temp_filename) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/s3_loggable/logger.rb', line 26

def write_to_log(filename, message, date_time, file, temp_filename)
  FileUtils.mkdir_p(File.dirname(temp_filename))
  local_file = File.open(temp_filename, 'w')
  local_file.binmode
  local_file.write(file.body)
  local_file.close
  File.open(temp_filename, "a+") do |file_gz_io|
	file_gz_io.binmode
   	Zlib::GzipWriter.wrap(file_gz_io) do |file_gz|
	  file_gz.puts date_time.to_s
	  file_gz.puts message.to_s
	  file_gz.puts
	end
  end
  file.body = File.open(temp_filename)
  file.save
  File.delete(local_file)
  file
end