sql_metrics 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c80f7850002ed7ccbc1a0b7dd634677923de60ff
4
- data.tar.gz: b97a97d13fb7579a889141b8737feb012b77a67f
3
+ metadata.gz: 95e9da225dbae5b2d9816beeb79056815ca21447
4
+ data.tar.gz: 3ad9ad3f140f648ef17e2179504134ef3a1efb60
5
5
  SHA512:
6
- metadata.gz: f7b4d5aea72244dfa250e84d610d203b7e4e90f7cb6a3a273798b2107ed704ae40e2cd95e12f76a8baaa80503bef7793f1fc7e90aae496b1d53d02c21e97d98b
7
- data.tar.gz: 469acb89e8ec0ee87f27ca182ed784e85f1c0f3f6f0083baa3b3e1ba14910a67c63f984a3fa1f27e42ffcdb8de35fa1c2c86d5547536f5bb13c7b049350378c5
6
+ metadata.gz: 08ea15e904fb3af8da2acf01383bf496273f6bad4929e86ec8552b1c6c681dbb4b9cd90a5c3fcbf431e5109d2db31784bd65806c7da2f5b243767d60e9801620
7
+ data.tar.gz: b9d88e8b958a0d701933c1a0e9ee77895bd566fc05e398e31cd3725b095a518ed0f6dec9602556d36b9b9364d6526620414b62c0f4602e8cbd4ec30ae31dece7
data/README.md CHANGED
@@ -36,11 +36,7 @@ Or install it yourself as:
36
36
 
37
37
  ### Setup database and table
38
38
 
39
- You need to create the following table in your postgres or redshift database:
40
-
41
- CREATE TABLE events (created_at timestamp, name varchar(200), properties json);
42
-
43
- Now you need to tell the gem how to connect to your db. So simply create a file called sql_metrics.rb into your config/libs folder with the config:
39
+ Tell the gem how to connect to your db. So simply create a file called sql_metrics.rb into your config/libs folder with the config:
44
40
 
45
41
  SqlMetrics.configure do |config|
46
42
  config.host = '127.0.0.1'
@@ -49,6 +45,10 @@ Now you need to tell the gem how to connect to your db. So simply create a file
49
45
  config.password = 'my_password'
50
46
  end
51
47
 
48
+ Then to create the required events table just run this rake task:
49
+
50
+ rake sql_metrics:create_events_table
51
+
52
52
  ### Track a event
53
53
 
54
54
  A simple event can look like this:
data/Rakefile CHANGED
@@ -4,3 +4,7 @@ require "rspec/core/rake_task"
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
6
  task :default => :spec
7
+
8
+
9
+
10
+
@@ -0,0 +1,27 @@
1
+ module SqlMetrics
2
+ class Configuration
3
+ require 'pg'
4
+ require 'logger'
5
+ require 'json'
6
+ require 'geocoder'
7
+
8
+ attr_accessor :host, :port, :options, :tty, :db_name, :user, :password, :database_schema, :event_table_name,
9
+ :bots_regex, :logger
10
+
11
+ def initialize
12
+ self.host = nil
13
+ self.port = 5432
14
+ self.options = nil
15
+ self.tty = nil
16
+ self.db_name = nil
17
+ self.user = nil
18
+ self.password = nil
19
+ self.database_schema = 'public'
20
+ self.event_table_name = 'events'
21
+
22
+ self.bots_regex = /Googlebot|Pingdom|bing|Yahoo|Amazon|Twitter|Yandex|majestic12/i
23
+
24
+ self.logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ require 'sql_metrics'
2
+ require 'rails'
3
+
4
+ module SqlMetrics
5
+ class Railtie < Rails::Railtie
6
+ rake_tasks do
7
+ import '../sql_metrics/lib/tasks/sql_metrics.rake'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,86 @@
1
+ module SqlMetrics
2
+ class << self
3
+ def track(name, properties = {}, request = nil, options = nil)
4
+ created_at = Time.now.utc
5
+
6
+ Thread.new do
7
+ track_now(created_at, name, properties, request, options)
8
+ end
9
+ end
10
+
11
+ def create_events_table
12
+ conn = pg_connection
13
+
14
+ conn.exec("CREATE TABLE #{SqlMetrics.configuration.event_table_name} (created_at timestamp, name varchar(200), properties json);")
15
+ end
16
+
17
+ private
18
+
19
+ def track_now(created_at, name, properties = {}, request = nil, options = nil)
20
+ properties = merge_request_and_options_into_properties(properties, request, options)
21
+
22
+ unless options and options[:filter_bots] == false
23
+ return false if properties[:user_agent] and properties[:user_agent].match(SqlMetrics.configuration.bots_regex)
24
+ end
25
+
26
+ send_async_query(created_at, name, properties)
27
+
28
+ rescue => e
29
+ SqlMetrics.configuration.logger.error e
30
+ SqlMetrics.configuration.logger.error e.backtrace.join("\n")
31
+ end
32
+
33
+ def merge_request_and_options_into_properties(properties, request, options)
34
+ if request
35
+ properties[:user_agent] = request.user_agent
36
+ properties[:session_id] = request.session_options[:id]
37
+ properties[:remote_ip] = request.remote_ip
38
+
39
+ unless options and options[:geo_lookup] == false
40
+ if properties[:remote_ip] and geo_object = Geocoder.search(properties[:remote_ip]).first
41
+ properties[:remote_city] = geo_object.city
42
+ properties[:remote_country] = geo_object.country
43
+ properties[:remote_country_code] = geo_object.country_code
44
+ properties[:remote_coordinates] = geo_object.coordinates
45
+ end
46
+ end
47
+
48
+ properties[:referer] = request.referer
49
+ referer = Addressable::URI.parse(request.referer)
50
+ properties[:referrer_host] = referer.host if referer
51
+
52
+ properties[:requested_url] = request.fullpath
53
+ fullpath = Addressable::URI.parse(request.fullpath)
54
+ properties[:requested_url_host] = fullpath.host if fullpath
55
+ end
56
+
57
+ properties
58
+ end
59
+
60
+ def send_async_query(created_at, name, properties)
61
+ pg_connection.send_query(build_psql_query(created_at, name, properties))
62
+ end
63
+
64
+ def build_psql_query(created_at, name, properties)
65
+ "INSERT INTO #{SqlMetrics.configuration.event_table_name} (
66
+ created_at,
67
+ name,
68
+ properties
69
+ ) VALUES (
70
+ '#{created_at}',
71
+ '#{name}',
72
+ '#{properties.to_json}'
73
+ );"
74
+ end
75
+
76
+ def pg_connection
77
+ PGconn.open(:dbname => SqlMetrics.configuration.db_name,
78
+ :host => SqlMetrics.configuration.host,
79
+ :port => SqlMetrics.configuration.port,
80
+ :options => SqlMetrics.configuration.options,
81
+ :tty => SqlMetrics.configuration.tty,
82
+ :user => SqlMetrics.configuration.user,
83
+ :password => SqlMetrics.configuration.password)
84
+ end
85
+ end
86
+ end
@@ -1,3 +1,3 @@
1
1
  module SqlMetrics
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
data/lib/sql_metrics.rb CHANGED
@@ -1,77 +1,12 @@
1
1
  require "sql_metrics/version"
2
+ require "sql_metrics/config"
3
+ require "sql_metrics/sql_metrics"
2
4
 
3
- module SqlMetrics
4
- class Configuration
5
- require 'pg'
6
- require 'logger'
7
- require 'json'
8
- require 'geocoder'
9
-
10
- attr_accessor :host, :port, :options, :tty, :db_name, :user, :password, :database_schema, :event_table_name,
11
- :bots_regex, :logger
12
-
13
- def initialize
14
- self.host = nil
15
- self.port = 5432
16
- self.options = nil
17
- self.tty = nil
18
- self.db_name = nil
19
- self.user = nil
20
- self.password = nil
21
- self.database_schema = 'public'
22
- self.event_table_name = 'events'
23
-
24
- self.bots_regex = /Googlebot|Pingdom|bing|Yahoo|Amazon|Twitter|Yandex|majestic12/i
25
-
26
- self.logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
27
- end
28
- end
5
+ require "sql_metrics/railtie" if defined?(Rails)
29
6
 
7
+ module SqlMetrics
30
8
  class << self
31
9
  attr_accessor :configuration
32
-
33
- def merge_request_and_options_into_properties(properties, request, options)
34
- if request
35
- properties[:user_agent] = request.user_agent
36
- properties[:session_id] = request.session_options[:id]
37
- properties[:remote_ip] = request.remote_ip
38
-
39
- unless options and options[:geo_lookup] == false
40
- if properties[:remote_ip] and geo_object = Geocoder.search(properties[:remote_ip]).first
41
- properties[:remote_city] = geo_object.city
42
- properties[:remote_country] = geo_object.country
43
- properties[:remote_country_code] = geo_object.country_code
44
- properties[:remote_coordinates] = geo_object.coordinates
45
- end
46
- end
47
-
48
- properties[:referrer] = request.referer
49
- referer = Addressable::URI.parse(request.referer)
50
- properties[:referrer_host] = referer.host if referer
51
-
52
- properties[:requested_url] = request.fullpath
53
- fullpath = Addressable::URI.parse(request.fullpath)
54
- properties[:requested_url_host] = fullpath.host if fullpath
55
- end
56
-
57
- properties
58
- end
59
-
60
- def send_async_query(name, properties)
61
- pg_connection.send_query(build_psql_query(name, properties))
62
- end
63
-
64
- def build_psql_query(name, properties)
65
- "INSERT INTO #{SqlMetrics.configuration.event_table_name} (
66
- created_at,
67
- name,
68
- properties
69
- ) VALUES (
70
- '#{Time.now.utc}',
71
- '#{name}',
72
- '#{properties.to_json}'
73
- );"
74
- end
75
10
  end
76
11
 
77
12
  def self.configuration
@@ -81,27 +16,4 @@ module SqlMetrics
81
16
  def self.configure
82
17
  yield(configuration) if block_given?
83
18
  end
84
-
85
- def self.track(name, properties = {}, request = nil, options = nil)
86
- properties = merge_request_and_options_into_properties(properties, request, options)
87
-
88
- unless options and options[:filter_bots] == false
89
- return false if properties[:user_agent] and properties[:user_agent].match(SqlMetrics.configuration.bots_regex)
90
- end
91
-
92
- send_async_query(name, properties)
93
- rescue => e
94
- SqlMetrics.configuration.logger.error e
95
- SqlMetrics.configuration.logger.error e.backtrace.join("\n")
96
- end
97
-
98
- def self.pg_connection
99
- PGconn.open(:dbname => SqlMetrics.configuration.db_name,
100
- :host => SqlMetrics.configuration.host,
101
- :port => SqlMetrics.configuration.port,
102
- :options => SqlMetrics.configuration.options,
103
- :tty => SqlMetrics.configuration.tty,
104
- :user => SqlMetrics.configuration.user,
105
- :password => SqlMetrics.configuration.password)
106
- end
107
19
  end
@@ -0,0 +1,13 @@
1
+ namespace :sql_metrics do
2
+
3
+ desc 'Insert the events table'
4
+ task :create_events_table => :environment do
5
+ begin
6
+ SqlMetrics.create_events_table
7
+ puts "Succesfully inserted #{SqlMetrics.configuration.event_table_name} table!"
8
+ rescue => e
9
+ puts e
10
+ end
11
+ end
12
+
13
+ end
data/sql_metrics.gemspec CHANGED
@@ -21,9 +21,9 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_development_dependency "bundler", "~> 1.10"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "rspec", "~> 3.3"
25
25
 
26
- spec.add_runtime_dependency "pg"
27
- spec.add_runtime_dependency "logging"
28
- spec.add_runtime_dependency "geocoder"
26
+ spec.add_runtime_dependency "pg", "~> 0.18"
27
+ spec.add_runtime_dependency "logging", "~> 2.0"
28
+ spec.add_runtime_dependency "geocoder", "~> 1.2"
29
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql_metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthias
@@ -42,58 +42,58 @@ dependencies:
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '3.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '3.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pg
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '0.18'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '0.18'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: logging
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '2.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '2.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: geocoder
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '1.2'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '1.2'
97
97
  description: A simple gem to track metric events in your own postgres or Amazon Redshift
98
98
  database.
99
99
  email:
@@ -113,7 +113,11 @@ files:
113
113
  - bin/console
114
114
  - bin/setup
115
115
  - lib/sql_metrics.rb
116
+ - lib/sql_metrics/config.rb
117
+ - lib/sql_metrics/railtie.rb
118
+ - lib/sql_metrics/sql_metrics.rb
116
119
  - lib/sql_metrics/version.rb
120
+ - lib/tasks/sql_metrics.rake
117
121
  - sql_metrics.gemspec
118
122
  homepage: https://github.com/KaktusLab/sql_metrics
119
123
  licenses: