Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
iMacTia committed Jul 15, 2016
0 parents commit cbb8125
Show file tree
Hide file tree
Showing 14 changed files with 152 additions and 0 deletions.
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/.bundle/
/.yardoc
/Gemfile.lock
/_yardoc/
/coverage/
/doc/
/pkg/
/spec/reports/
/tmp/
.idea
2 changes: 2 additions & 0 deletions .rspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--format documentation
--color
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
language: ruby
rvm:
- 2.2.2
before_install: gem install bundler -v 1.11.2
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
source 'https://rubygems.org'

# Specify your gem's dependencies in lograge-sql.gemspec
gemspec
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Lograge::Sql

Lograge::Sql is an extension to the famous [Lograge](https://github.com/roidrage/lograge) gem, which adds SQL queries to the Lograge Event and disable default ActiveRecord logging.
This is extremely useful if you're using Lograge together with the ELK stack.

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'lograge-sql'
```

## Usage

In order to enable SQL logging in your application, you'll simply need to add this on top of your lograge initializer:

```ruby
# config/initializers/lograge
require 'lograge/sql/extension'
```

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/iMacTia/lograge-sql.

6 changes: 6 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
require 'bundler/gem_tasks'
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec)

task :default => :spec
14 changes: 14 additions & 0 deletions bin/console
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env ruby

require 'bundler/setup'
require 'lograge/sql'

# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.

# (If you use this, don't forget to add pry to your Gemfile!)
# require "pry"
# Pry.start

require 'irb'
IRB.start
8 changes: 8 additions & 0 deletions bin/setup
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
set -vx

bundle install

# Do any other automated setup that you need to do here
7 changes: 7 additions & 0 deletions lib/lograge/sql.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
require 'lograge/sql/version'

module Lograge
module Sql

end
end
30 changes: 30 additions & 0 deletions lib/lograge/sql/extension.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
module Lograge
class RequestLogSubscriber
def sql(event)
ActiveRecord::LogSubscriber.runtime += event.duration
return if event.payload[:name] == 'SCHEMA'
Thread.current[:lograge_sql_queries] ||= []
Thread.current[:lograge_sql_queries] << ("#{event.payload[:name]} (#{event.duration.to_f.round(2)}) #{event.payload[:sql]}")
end

alias_method :old_extract_request, :extract_request
def extract_request(event, payload)
data = old_extract_request(event, payload)
data.merge!(extract_sql_queries)
end

def extract_sql_queries
sql_queries = Thread.current[:lograge_sql_queries]
return {} unless sql_queries

Thread.current[:lograge_sql_queries] = nil
{ sql_queries: %('#{sql_queries.join("\n")}') }
end
end
end

ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
Lograge.unsubscribe(:active_record, subscriber) if subscriber.is_a?(ActiveRecord::LogSubscriber)
end

Lograge::RequestLogSubscriber.attach_to :active_record
5 changes: 5 additions & 0 deletions lib/lograge/sql/version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Lograge
module Sql
VERSION = '0.1.0'
end
end
27 changes: 27 additions & 0 deletions lograge-sql.gemspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'lograge/sql/version'

Gem::Specification.new do |spec|
spec.name = 'lograge-sql'
spec.version = Lograge::Sql::VERSION
spec.authors = ['Mattia Giuffrida']
spec.email = ['[email protected]']

spec.summary = %q{An extension for Lograge to log SQL queries}
spec.description = %q{An extension for Lograge to log SQL queries}
spec.homepage = 'https://github.com/iMacTia/lograge-sql'

spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
spec.bindir = 'exe'
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ['lib']

spec.add_runtime_dependency 'lograge', '~> 0.4'
spec.add_runtime_dependency 'activerecord', '>= 4'

spec.add_development_dependency 'bundler', '~> 1.11'
spec.add_development_dependency 'rake', '~> 10.0'
spec.add_development_dependency 'rspec', '~> 3.0'
end
7 changes: 7 additions & 0 deletions spec/lograge/sql_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
require 'spec_helper'

describe Lograge::Sql do
it 'has a version number' do
expect(Lograge::Sql::VERSION).not_to be nil
end
end
2 changes: 2 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
require 'lograge/sql'

0 comments on commit cbb8125

Please sign in to comment.