newrelic_postgres_plugin 0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c5dbbac674a6b9755b660189a8bb72673ac49196
4
+ data.tar.gz: 8e8a5df463aba43e10e2a07161f0243646b7ff27
5
+ SHA512:
6
+ metadata.gz: dfac2bed440d8d21e6f84b40841a32990ff2f612ef887a9934d9b9335eabf2bcb761b795677e945798d0834ba49ac18bf27e0983724c468f91e5697134f849da
7
+ data.tar.gz: 9cb90edba403d5bffd8f8baf7a3c1afc872fe0d6c54478e112c51e0599bcc48454b3047a7ca4660989e216c898c6b194653c21c04c43205ba08bb5a0f5c2f3b3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "newrelic_plugin", "~> 1.0.2"
4
+ gem "pg"
data/Gemfile.lock ADDED
@@ -0,0 +1,24 @@
1
+ GIT
2
+ remote: git@github.com:newrelic-platform/newrelic_plugin.git
3
+ revision: 913177005ae53883c73395833f3be0e9c6644eae
4
+ branch: release
5
+ specs:
6
+ newrelic_plugin (1.0.1)
7
+ faraday (>= 0.8.1)
8
+ json
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ faraday (0.8.7)
14
+ multipart-post (~> 1.1)
15
+ json (1.8.0)
16
+ multipart-post (1.2.0)
17
+ pg (0.15.1)
18
+
19
+ PLATFORMS
20
+ ruby
21
+
22
+ DEPENDENCIES
23
+ newrelic_plugin!
24
+ pg
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2013 New Relic, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ newrelic_postgres_plugin
2
+ ========================
3
+
4
+ A NewRelic Platform Postgres Plugin
data/Rakefile ADDED
@@ -0,0 +1,155 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'date'
4
+
5
+ # https://raw.github.com/mojombo/rakegem
6
+
7
+ #############################################################################
8
+ #
9
+ # Helper functions
10
+ #
11
+ #############################################################################
12
+
13
+ def name
14
+ @name ||= Dir['*.gemspec'].first.split('.').first
15
+ end
16
+
17
+ def version
18
+ line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
19
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
20
+ end
21
+
22
+ def date
23
+ Date.today.to_s
24
+ end
25
+
26
+ def rubyforge_project
27
+ name
28
+ end
29
+
30
+ def gemspec_file
31
+ "#{name}.gemspec"
32
+ end
33
+
34
+ def gem_file
35
+ "#{name}-#{version}.gem"
36
+ end
37
+
38
+ def replace_header(head, header_name)
39
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
40
+ end
41
+
42
+ #############################################################################
43
+ #
44
+ # Standard tasks
45
+ #
46
+ #############################################################################
47
+
48
+ task :default => :test
49
+
50
+ require 'rake/testtask'
51
+ Rake::TestTask.new(:test) do |test|
52
+ test.libs << 'lib' << 'test'
53
+ test.pattern = 'test/**/*_test.rb'
54
+ test.verbose = true
55
+ end
56
+
57
+ desc "Generate RCov test coverage and open in your browser"
58
+ task :coverage do
59
+ require 'rcov'
60
+ sh "rm -fr coverage"
61
+ sh "rcov test/test_*.rb"
62
+ sh "open coverage/index.html"
63
+ end
64
+
65
+ require 'rdoc/task'
66
+ Rake::RDocTask.new do |rdoc|
67
+ rdoc.rdoc_dir = 'rdoc'
68
+ rdoc.title = "#{name} #{version}"
69
+ rdoc.rdoc_files.include('lib/**/*.rb')
70
+ rdoc.rdoc_files.include('README.rdoc')
71
+ rdoc.rdoc_files.include('LICENSE')
72
+ rdoc.rdoc_files.include('CHANGES')
73
+ rdoc.main = "README.rdoc"
74
+ end
75
+
76
+ desc "Open an irb session preloaded with this library"
77
+ task :console do
78
+ sh "irb -rubygems -I./lib -r ./lib/#{name}.rb"
79
+ end
80
+
81
+ #############################################################################
82
+ #
83
+ # Custom tasks (add your own tasks here)
84
+ #
85
+ #############################################################################
86
+
87
+
88
+
89
+ #############################################################################
90
+ #
91
+ # Packaging tasks
92
+ #
93
+ #############################################################################
94
+
95
+ desc "Create tag v#{version} and build and push #{gem_file} to Rubgems"
96
+ task :release => :build do
97
+ unless `git branch` =~ /^\* master$/
98
+ puts "You must be on the master branch to release!"
99
+ exit!
100
+ end
101
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
102
+ sh "git tag v#{version}"
103
+ sh "git push origin master"
104
+ sh "git push origin v#{version}"
105
+ sh "gem push pkg/#{name}-#{version}.gem"
106
+ end
107
+
108
+ desc "Build #{gem_file} into the pkg directory"
109
+ task :build => :gemspec do
110
+ sh "mkdir -p pkg"
111
+ sh "gem build #{gemspec_file}"
112
+ sh "mv #{gem_file} pkg"
113
+ end
114
+
115
+ desc "Generate #{gemspec_file}"
116
+ task :gemspec => :validate do
117
+ # read spec file and split out manifest section
118
+ spec = File.read(gemspec_file)
119
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
120
+
121
+ # replace name version and date
122
+ replace_header(head, :name)
123
+ replace_header(head, :version)
124
+ replace_header(head, :date)
125
+ #comment this out if your rubyforge_project has a different name
126
+ replace_header(head, :rubyforge_project)
127
+
128
+ # determine file list from git ls-files
129
+ files = `git ls-files`.
130
+ split("\n").
131
+ sort.
132
+ reject { |file| file =~ /^\./ }.
133
+ reject { |file| file =~ /^(rdoc|pkg)/ }.
134
+ map { |file| " #{file}" }.
135
+ join("\n")
136
+
137
+ # piece file back together and write
138
+ manifest = " s.files = %w[\n#{files}\n ]\n"
139
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
140
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
141
+ puts "Updated #{gemspec_file}"
142
+ end
143
+
144
+ desc "Validate #{gemspec_file}"
145
+ task :validate do
146
+ libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
147
+ unless libfiles.empty?
148
+ puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
149
+ exit!
150
+ end
151
+ unless Dir['VERSION*'].empty?
152
+ puts "A `VERSION` file at root level violates Gem best practices."
153
+ exit!
154
+ end
155
+ end
data/bin/pg_monitor ADDED
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.expand_path "../../lib", __FILE__
3
+ require "newrelic_postgres_plugin"
4
+ require 'optparse'
5
+
6
+ options = OptionParser.new do |opts|
7
+ opts.banner = <<-EOF
8
+ Usage:
9
+ newrelic_postgres_plugin ( run | install ) [options]
10
+ EOF
11
+
12
+ opts.on("-v", "--verbose", "Run verbosely") do
13
+ NewRelic::Plugin::Config.config.newrelic['verbose'] = 1
14
+ end
15
+
16
+ opts.on("-l", "--license LICENSE_KEY", "Your NewRelic account License Key") do | license_key |
17
+ $license_key = license_key
18
+ end
19
+
20
+ opts.on("-c", "--config FILE", "Override the location of the newrelic_plugin.yml") do | filename |
21
+ if !File.exists? filename
22
+ puts "File not found: #{filename.inspect}"
23
+ exit 1
24
+ end
25
+ NewRelic::Plugin::Config.config_file = filename
26
+ end
27
+
28
+ opts.on("-h", "--help") do
29
+ puts opts
30
+ if File.basename($0) == File.basename(__FILE__)
31
+ exit 0
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ args = options.parse!(ARGV)
38
+
39
+ if args.first == "run"
40
+ if $license_key
41
+ NewRelic::Plugin::Config.config.options['newrelic']['license_key'] = $license_key
42
+ end
43
+ NewRelic::PostgresPlugin.run
44
+ elsif args.first == "install"
45
+ config_file = File.read(File.expand_path("../../config/newrelic_plugin.yml", __FILE__))
46
+ if $license_key
47
+ config_file.gsub!("YOUR_LICENSE_KEY_HERE", $license_key)
48
+ end
49
+ require 'fileutils'
50
+ FileUtils.mkdir_p "config"
51
+ File.open("config/newrelic_plugin.yml", "w") do | io |
52
+ io.write(config_file)
53
+ end
54
+ puts "Saved agent config file #{File.expand_path("config/newrelic_plugin.yml")}"
55
+ else
56
+ puts options
57
+ end
@@ -0,0 +1,26 @@
1
+ # Please make sure to update the license_key information with the license key for your New Relic
2
+ # account.
3
+ #
4
+ #
5
+ newrelic:
6
+ #
7
+ # Update with your New Relic account license key:
8
+ #
9
+ license_key: 'YOUR_LICENSE_KEY_HERE'
10
+ #
11
+ # Set to '1' for verbose output, remove for normal output.
12
+ # All output goes to stdout/stderr.
13
+ #
14
+ # verbose: 1
15
+ #
16
+ # Agent Configuration:
17
+ #
18
+ agents:
19
+ # this is where configuration for agents belongs
20
+ postgres:
21
+ host: 'host'
22
+ port: 5432
23
+ user: 'username'
24
+ password: 'password'
25
+ dbname: 'database_name'
26
+ sslmode: 'require'
@@ -0,0 +1,176 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'bundler/setup'
5
+ require 'newrelic_plugin'
6
+ require 'pg'
7
+
8
+ module NewRelic::PostgresPlugin
9
+
10
+ BACKEND_QUERY = %Q(
11
+ SELECT count(*) - ( SELECT count(*) FROM pg_stat_activity WHERE
12
+ #{
13
+ if nine_two?
14
+ "state <> 'idle'"
15
+ else
16
+ "current_query <> '<IDLE>'"
17
+ end
18
+ }
19
+ ) AS backends_active, ( SELECT count(*) FROM pg_stat_activity WHERE
20
+ #{
21
+ if nine_two?
22
+ "AND state = 'idle'"
23
+ else
24
+ "AND current_query = '<IDLE>'"
25
+ end
26
+ }
27
+ ) AS backends_idle FROM pg_stat_activity;
28
+ )
29
+ DATABASE_QUERY = %Q(
30
+ SELECT * FROM pg_stat_database;
31
+ )
32
+ BGWRITER_QUERY = %Q(
33
+ SELECT * FROM pg_stat_bgwriter;
34
+ )
35
+ INDEX_COUNT_QUERY = %Q(
36
+ SELECT count(1) as indexes FROM pg_class WHERE relkind = 'i';
37
+ )
38
+ INDEX_HIT_RATE_QUERY = %Q(
39
+ SELECT
40
+ 'index hit rate' AS name,
41
+ (sum(idx_blks_hit)) / sum(idx_blks_hit + idx_blks_read) AS ratio
42
+ FROM pg_statio_user_indexes
43
+ UNION ALL
44
+ SELECT
45
+ 'cache hit rate' AS name,
46
+ sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) AS ratio
47
+ FROM pg_statio_user_tables;
48
+ )
49
+ INDEX_SIZE_QUERY = %Q(
50
+ SELECT pg_size_pretty(sum(relpages*8192)) AS size
51
+ FROM pg_class
52
+ WHERE reltype = 0;
53
+ )
54
+
55
+ # Register and run the agent
56
+ def self.run
57
+ # Register this agent.
58
+ NewRelic::Plugin::Setup.install_agent :postgres, self
59
+
60
+ # Launch the agent; this never returns.
61
+ NewRelic::Plugin::Run.setup_and_run
62
+ end
63
+
64
+
65
+ class Agent < NewRelic::Plugin::Agent::Base
66
+ agent_guid 'com.boundless.postgres'
67
+ agent_version '1.0.0'
68
+ agent_config_options :host, :port, :user, :password, :dbname, :sslmode
69
+ agent_human_labels('Postgres') { "#{host}" }
70
+
71
+ def initialize name, agent_info, options={}
72
+ @previous_metrics = {}
73
+ super
74
+ end
75
+
76
+ #
77
+ # Required, but not used
78
+ #
79
+ def setup_metrics
80
+ end
81
+
82
+ #
83
+ # You do not have to specify the postgres port in the yaml if you don't want to.
84
+ #
85
+ def port
86
+ @port || 5432
87
+ end
88
+
89
+ #
90
+ # Get a connection to postgres
91
+ #
92
+ def connect
93
+ PG::Connection.new(host: host, port: port, user: user, password: password, sslmode: sslmode, dbname: dbname)
94
+ end
95
+
96
+ #
97
+ # Returns true if we're talking to Postgres version >= 9.2
98
+ #
99
+ def nine_two?
100
+ @connection.send(:postgresql_version) >= 90200
101
+ end
102
+
103
+
104
+ #
105
+ # This is called on every polling cycle
106
+ #
107
+ def poll_cycle
108
+ @connection = self.connect
109
+
110
+ report_backend_metrics
111
+ report_bgwriter_metrics
112
+ report_database_metrics
113
+ report_index_metrics
114
+ rescue => e
115
+ $stderr.puts "#{e}: #{e.backtrace.join("\n ")}"
116
+ end
117
+
118
+ def report_derived_metric(name, units, value)
119
+ if previous_value = @previous_metrics[name]
120
+ report_metric name, units, (value - previous_value)
121
+ else
122
+ report_metric name, units, 0
123
+ end
124
+ @previous_metrics[name] = value
125
+ end
126
+
127
+
128
+ def report_backend_metrics
129
+ @connection.exec(BACKEND_QUERY) do |result|
130
+ report_metric "Backends/Active", 'queries', result[0]['backends_active']
131
+ report_metric "Backends/Idle", 'queries', result[0]['backends_idle']
132
+ end
133
+ end
134
+
135
+ def report_database_metrics
136
+ @connection.exec(DATABASE_QUERY) do |result|
137
+ result.each do |row|
138
+ database_name = row['datname']
139
+ report_metric "Database/#{database_name}/Backends", '', row['numbackends'].to_i
140
+ report_derived_metric "Database/#{database_name}/Transactions/Committed", '', row['xact_commit'].to_i
141
+ report_derived_metric "Database/#{database_name}/Transactions/Rolled Back", '', row['xact_rollback'].to_i
142
+ report_derived_metric "Database/#{database_name}/Tuples/Read from Disk", '', row['blks_read'].to_i
143
+ report_derived_metric "Database/#{database_name}/Tuples/Read Cache Hit", '', row['blks_hit'].to_i
144
+ report_derived_metric "Database/#{database_name}/Tuples/Returned/From Sequential", '', row['tup_returned'].to_i
145
+ report_derived_metric "Database/#{database_name}/Tuples/Returned/From Bitmap", '', row['tup_fetched'].to_i
146
+ report_derived_metric "Database/#{database_name}/Tuples/Writes/Inserts", '', row['tup_inserted'].to_i
147
+ report_derived_metric "Database/#{database_name}/Tuples/Writes/Updates", '', row['tup_updated'].to_i
148
+ report_derived_metric "Database/#{database_name}/Tuples/Writes/Deletes", '', row['tup_deleted'].to_i
149
+ report_derived_metric "Database/#{database_name}/Conflicts", '', row['conflicts'].to_i
150
+ end
151
+ end
152
+ end
153
+
154
+ def report_bgwriter_metrics
155
+ @connection.exec(BGWRITER_QUERY) do |result|
156
+ report_derived_metric "Background Writer/Checkpoints/Scheduled", 'checkpoints', result[0]['checkpoints_timed'].to_i
157
+ report_derived_metric "Background Writer/Checkpoints/Requested", 'checkpoints', result[0]['checkpoints_requests'].to_i
158
+ end
159
+ end
160
+
161
+ def report_index_metrics
162
+ @connection.exec(INDEX_COUNT_QUERY) do |result|
163
+ report_metric "Indexes/Total", 'indexes', result[0]['indexes'].to_i
164
+ report_metric "Indexes/Disk Utilization", 'bytes', result[0]['size_indexes'].to_f
165
+ end
166
+ @connection.exec(INDEX_HIT_RATE_QUERY) do |result|
167
+ report_metric "Indexes/Hit Rate", '%', result[0]['ratio'].to_f
168
+ report_metric "Indexes/Cache Hit Rate", '%', result[1]['ratio'].to_f
169
+ end
170
+ @connection.exec(INDEX_SIZE_QUERY) do |result|
171
+ report_metric "Indexes/Size", 'bytes', result[0]['size'].to_f
172
+ end
173
+ end
174
+
175
+ end
176
+ end
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'newrelic_postgres_plugin/agent'
3
+
4
+ module NewRelic::PostgresPlugin
5
+ VERSION = '0.1.0'
6
+ end
@@ -0,0 +1,84 @@
1
+ ## This is the rakegem gemspec template. Make sure you read and understand
2
+ ## all of the comments. Some sections require modification, and others can
3
+ ## be deleted if you don't need them. Once you understand the contents of
4
+ ## this file, feel free to delete any comments that begin with two hash marks.
5
+ ## You can find comprehensive Gem::Specification documentation, at
6
+ ## http://docs.rubygems.org/read/chapter/20
7
+ Gem::Specification.new do |s|
8
+ s.specification_version = 2 if s.respond_to? :specification_version=
9
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.rubygems_version = '1.3.5'
11
+
12
+ ## Leave these as is they will be modified for you by the rake gemspec task.
13
+ ## If your rubyforge_project name is different, then edit it and comment out
14
+ ## the sub! line in the Rakefile
15
+ s.name = 'newrelic_postgres_plugin'
16
+ s.version = '0.1.0'
17
+ s.date = '2013-06-20'
18
+ s.rubyforge_project = 'newrelic_postgres_plugin'
19
+
20
+ ## Make sure your summary is short. The description may be as long
21
+ ## as you like.
22
+ s.summary = "New Relic Postgres plugin"
23
+ s.description = <<-EOF
24
+ This is the New Relic plugin for monitoring Postgres developed by Boundless Inc.
25
+ EOF
26
+
27
+ ## List the primary authors. If there are a bunch of authors, it's probably
28
+ ## better to set the email to an email list or something. If you don't have
29
+ ## a custom homepage, consider using your GitHub URL or the like.
30
+ s.authors = ["Matt Hodgson"]
31
+ s.email = 'matt@boundless.com'
32
+ s.homepage = 'http://boundless.com'
33
+
34
+ ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
35
+ ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
36
+ s.require_paths = %w[lib]
37
+
38
+ ## This sections is only necessary if you have C extensions.
39
+ # s.require_paths << 'ext'
40
+ # s.extensions = %w[ext/extconf.rb]
41
+
42
+ ## If your gem includes any executables, list them here.
43
+ s.executables = ["pg_monitor"]
44
+
45
+ ## Specify any RDoc options here. You'll want to add your README and
46
+ ## LICENSE files to the extra_rdoc_files list.
47
+ s.rdoc_options = ["--charset=UTF-8",
48
+ "--main", "README.md"]
49
+ s.extra_rdoc_files = %w[README.md LICENSE]
50
+
51
+ ## The newrelic_plugin needs to be installed. Prior to public release, the
52
+ # gem needs to be downloaded from git@github.com:newrelic-platform/newrelic_plugin.git
53
+ # and built using the "rake build" command
54
+ s.add_dependency('newrelic_plugin', ">= 0.2.11")
55
+ s.add_dependency('pg', ">= 0.15.1")
56
+
57
+ s.post_install_message = <<-EOF
58
+ To get started with this plugin, create a working directory and do
59
+ pg_monitor -h
60
+ to find out how to install and run the plugin agent.
61
+ EOF
62
+
63
+ ## Leave this section as-is. It will be automatically generated from the
64
+ ## contents of your Git repository via the gemspec task. DO NOT REMOVE
65
+ ## THE MANIFEST COMMENTS, they are used as delimiters by the task.
66
+ # = MANIFEST =
67
+ s.files = %w[
68
+ Gemfile
69
+ Gemfile.lock
70
+ LICENSE
71
+ README.md
72
+ Rakefile
73
+ bin/pg_monitor
74
+ config/newrelic_plugin.yml
75
+ lib/newrelic_postgres_plugin.rb
76
+ lib/newrelic_postgres_plugin/agent.rb
77
+ newrelic_postgres_plugin.gemspec
78
+ ]
79
+ # = MANIFEST =
80
+
81
+ ## Test files will be grabbed from the file list. Make sure the path glob
82
+ ## matches what you actually use.
83
+ s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
84
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: newrelic_postgres_plugin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Matt Hodgson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: newrelic_plugin
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.11
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.2.11
27
+ - !ruby/object:Gem::Dependency
28
+ name: pg
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.15.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.15.1
41
+ description: |
42
+ This is the New Relic plugin for monitoring Postgres developed by Boundless Inc.
43
+ email: matt@boundless.com
44
+ executables:
45
+ - pg_monitor
46
+ extensions: []
47
+ extra_rdoc_files:
48
+ - README.md
49
+ - LICENSE
50
+ files:
51
+ - Gemfile
52
+ - Gemfile.lock
53
+ - LICENSE
54
+ - README.md
55
+ - Rakefile
56
+ - bin/pg_monitor
57
+ - config/newrelic_plugin.yml
58
+ - lib/newrelic_postgres_plugin.rb
59
+ - lib/newrelic_postgres_plugin/agent.rb
60
+ - newrelic_postgres_plugin.gemspec
61
+ homepage: http://boundless.com
62
+ licenses: []
63
+ metadata: {}
64
+ post_install_message: |
65
+ To get started with this plugin, create a working directory and do
66
+ pg_monitor -h
67
+ to find out how to install and run the plugin agent.
68
+ rdoc_options:
69
+ - --charset=UTF-8
70
+ - --main
71
+ - README.md
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project: newrelic_postgres_plugin
86
+ rubygems_version: 2.0.2
87
+ signing_key:
88
+ specification_version: 2
89
+ summary: New Relic Postgres plugin
90
+ test_files: []