pg_application_name 1.0.0 → 1.1.0
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.
- data/Gemfile.lock +1 -1
- data/lib/pg_application_name/postgres_monkey_patch.rb +7 -5
- data/lib/pg_application_name/version.rb +1 -1
- data/pg_application_name.gemspec +1 -1
- data/spec/pg_application_name/connection_pool_monkey_patch_spec.rb +54 -0
- data/spec/pg_application_name/postgres_monkey_patch_spec.rb +40 -0
- metadata +2 -2
data/Gemfile.lock
CHANGED
@@ -5,14 +5,16 @@ require 'active_record/connection_adapters/abstract_adapter'
|
|
5
5
|
module ActiveRecord::ConnectionAdapters
|
6
6
|
class PostgreSQLAdapter < AbstractAdapter
|
7
7
|
def set_server_variable(var, value)
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
if var[0...63].to_s.split(' ').size == 1
|
9
|
+
value = value[0...63].to_s.gsub(/'/, "''")
|
10
|
+
execute("set #{var} = '#{value}'")
|
11
|
+
end
|
11
12
|
end
|
12
13
|
|
13
14
|
def get_user_variable(var)
|
14
|
-
|
15
|
-
|
15
|
+
if var[0...63].split(' ').size == 1
|
16
|
+
return execute("show #{var}").values[0][0]
|
17
|
+
end
|
16
18
|
end
|
17
19
|
|
18
20
|
def set_server_application_name(value)
|
data/pg_application_name.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.name = 'pg_application_name'
|
8
8
|
s.version = PgApplicationName::VERSION
|
9
9
|
s.license = 'New BSD License'
|
10
|
-
s.date = '2012-09-
|
10
|
+
s.date = '2012-09-18'
|
11
11
|
s.summary = "Stamp an ActiveRecord connection to a postgres database with an appropriate application_name."
|
12
12
|
s.description = "This gem stamps an identification mark on the postgres database connection using the postgres connection variable 'application_name'. Such a stamp can be viewed in pg_stat_activity."
|
13
13
|
s.authors = ["Keith Gabryelski"]
|
@@ -3,5 +3,59 @@ require 'spec_helper'
|
|
3
3
|
module ActiveRecord::ConnectionAdapters
|
4
4
|
describe ConnectionPool do
|
5
5
|
|
6
|
+
describe "#connection_application_name=" do
|
7
|
+
it "sets @connection_application_name" do
|
8
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.connection_application_name = "New name"
|
9
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.
|
10
|
+
instance_variable_get(:@connection_application_name).should == "New name"
|
11
|
+
end
|
12
|
+
end # #connection_application_name=
|
13
|
+
|
14
|
+
describe "#connection_application_name" do
|
15
|
+
context "when @connection_application_name is set" do
|
16
|
+
it "returns @connection_application_name value" do
|
17
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.connection_application_name.should == "New name"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when @connection_application_name isn't set" do
|
22
|
+
it "sets and returns @connection_application_name" do
|
23
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.connection_application_name = nil
|
24
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.connection_application_name.
|
25
|
+
should == "#{Rails.application.class.name}/#{Process.pid}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end # #connection_application_name
|
29
|
+
|
30
|
+
describe "#initialize_connection_application_name" do
|
31
|
+
it "sets @connection_application_name and sets server_application_name" do
|
32
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.initialize_connection_application_name("New application name")
|
33
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.
|
34
|
+
instance_variable_get(:@connection_application_name).should == "New application name"
|
35
|
+
ActiveRecord::Base.connection.get_user_variable("application_name").should == "New application name"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "alias_method_chain :new_connection, :set_application_name" do
|
40
|
+
context "new_connection_without_set_application_name" do
|
41
|
+
it "calls new_connection method" do
|
42
|
+
ActiveRecord::Base.connection.set_server_variable(:application_name, "foo")
|
43
|
+
ActiveRecord::Base.connection_pool.send(:new_connection_without_set_application_name)
|
44
|
+
ActiveRecord::Base.connection.execute("select application_name from pg_stat_activity;").
|
45
|
+
values.flatten.select{|app_name| app_name == "foo"}.should have(1).item
|
46
|
+
end
|
47
|
+
end # new_connection_without_set_application_name
|
48
|
+
|
49
|
+
context "new_connection" do
|
50
|
+
it "calls new_connection_with_set_application_name method" do
|
51
|
+
ActiveRecord::Base.connection.set_server_variable(:application_name, "foo")
|
52
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.connection_application_name = "bar"
|
53
|
+
ActiveRecord::Base.connection_pool.send(:new_connection)
|
54
|
+
ActiveRecord::Base.connection.execute("select application_name from pg_stat_activity;").
|
55
|
+
values.flatten.select{|app_name| app_name == "bar"}.should have(1).item
|
56
|
+
end
|
57
|
+
end # new_connection
|
58
|
+
end # new_connection_without_set_application_name
|
59
|
+
|
6
60
|
end # ConnectionPool
|
7
61
|
end # ActiveRecord::ConnectionAdapters
|
@@ -3,5 +3,45 @@ require 'spec_helper'
|
|
3
3
|
module ActiveRecord::ConnectionAdapters
|
4
4
|
describe PostgreSQLAdapter do
|
5
5
|
|
6
|
+
describe "set_server_variable" do
|
7
|
+
context "when call the method with safe params" do
|
8
|
+
it "sets application name to the 'New name'" do
|
9
|
+
ActiveRecord::Base.connection.set_server_variable(:application_name, "New name")
|
10
|
+
ActiveRecord::Base.connection.execute("select application_name from pg_stat_activity;").
|
11
|
+
values.flatten.select{|app_name| app_name == "New name"}.should have(1).item
|
12
|
+
end
|
13
|
+
end # when call the method with safe params
|
14
|
+
|
15
|
+
context "when call the method without safe params" do
|
16
|
+
it "injection did not work" do
|
17
|
+
ActiveRecord::Base.connection.
|
18
|
+
set_server_variable(:application_name, "New name'; select * from pg_stat_activity where application_name = 'New name").
|
19
|
+
values.should be_blank
|
20
|
+
end
|
21
|
+
end # when call the method without safe params
|
22
|
+
end # set_server_variable
|
23
|
+
|
24
|
+
describe "get_user_variable" do
|
25
|
+
context "when call the method with safe param" do
|
26
|
+
it "returns user variable" do
|
27
|
+
ActiveRecord::Base.connection.get_user_variable("application_name").
|
28
|
+
should == "#{Rails.application.class.name}/#{Process.pid}"
|
29
|
+
end
|
30
|
+
end # when call the method with safe param
|
31
|
+
|
32
|
+
context "when parameter has blank space" do
|
33
|
+
it "returns nil" do
|
34
|
+
ActiveRecord::Base.connection.get_user_variable("application name'").should be_nil
|
35
|
+
end
|
36
|
+
end # when parameter has blank space
|
37
|
+
end # get_user_variable
|
38
|
+
|
39
|
+
describe "set_server_application_name" do
|
40
|
+
it "should receive set_server_variable method" do
|
41
|
+
ActiveRecord::Base.connection.should_receive(:set_server_variable).with(:application_name, "new name")
|
42
|
+
ActiveRecord::Base.connection.set_server_application_name("new name")
|
43
|
+
end
|
44
|
+
end # set_server_application_name
|
45
|
+
|
6
46
|
end # PostgreSQLAdapter
|
7
47
|
end # ActiveRecord::ConnectionAdapters
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_application_name
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pg
|