newrelic-management 0.1.1
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 +7 -0
- data/.gitignore +9 -0
- data/.gitlab-ci.yml +36 -0
- data/.rubocop.yml +18 -0
- data/.travis.yml +38 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +84 -0
- data/LICENSE.txt +21 -0
- data/README.md +105 -0
- data/Rakefile +6 -0
- data/bin/console +32 -0
- data/bin/setup +8 -0
- data/exe/newrelic-management +15 -0
- data/lib/newrelic-management.rb +10 -0
- data/lib/newrelic-management/cli.rb +91 -0
- data/lib/newrelic-management/client.rb +138 -0
- data/lib/newrelic-management/config.rb +107 -0
- data/lib/newrelic-management/controller.rb +61 -0
- data/lib/newrelic-management/helpers/configuration.rb +57 -0
- data/lib/newrelic-management/manager.rb +171 -0
- data/lib/newrelic-management/notifier.rb +64 -0
- data/lib/newrelic-management/util.rb +101 -0
- data/lib/newrelic-management/version.rb +3 -0
- data/newrelic-management.gemspec +51 -0
- metadata +252 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
# rubocop: disable LineLength
|
3
|
+
#
|
4
|
+
# Gem Name:: newrelic-management
|
5
|
+
# NewRelicManagement:: Notifier
|
6
|
+
#
|
7
|
+
# Copyright (C) 2017 Brian Dwyer - Intelligent Digital Services
|
8
|
+
#
|
9
|
+
# All rights reserved - Do Not Redistribute
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'newrelic-management/config'
|
13
|
+
require 'newrelic-management/util'
|
14
|
+
require 'os'
|
15
|
+
require 'terminal-notifier'
|
16
|
+
|
17
|
+
module NewRelicManagement
|
18
|
+
# => Notification Methods
|
19
|
+
module Notifier
|
20
|
+
module_function
|
21
|
+
|
22
|
+
# => Primary Notification Message Controller
|
23
|
+
def msg(message, subtitle = message, title = 'NewRelic Management')
|
24
|
+
# => Stdout Messages
|
25
|
+
terminal_notification(message, subtitle)
|
26
|
+
|
27
|
+
return if Config.silent
|
28
|
+
|
29
|
+
# => Pretty GUI Messages
|
30
|
+
osx_notification(message, subtitle, title) if OS.x?
|
31
|
+
end
|
32
|
+
|
33
|
+
# => Console Messages
|
34
|
+
def terminal_notification(message, subtitle = nil)
|
35
|
+
message = "#{subtitle}: #{message}" if subtitle && (message != subtitle)
|
36
|
+
puts message
|
37
|
+
end
|
38
|
+
|
39
|
+
# => OS X Cocoa Messages
|
40
|
+
def osx_notification(message, subtitle, title)
|
41
|
+
TerminalNotifier.notify(message, title: title, subtitle: subtitle)
|
42
|
+
end
|
43
|
+
|
44
|
+
# => Application-Specific Messages
|
45
|
+
def add_servers(servers)
|
46
|
+
servers(servers, 'Adding Server(s) to Alert')
|
47
|
+
end
|
48
|
+
|
49
|
+
def remove_servers(servers)
|
50
|
+
servers(servers, 'Removing Server(s) from Alert')
|
51
|
+
end
|
52
|
+
|
53
|
+
def remove_stale(servers)
|
54
|
+
servers(servers, 'Removing Server(s) from Alert')
|
55
|
+
end
|
56
|
+
|
57
|
+
private def servers(servers, subtitle)
|
58
|
+
list = Manager.list_servers
|
59
|
+
msg = list.select { |svr| Array(servers).include?(svr[:id]) }.map { |x| x[:name] }
|
60
|
+
|
61
|
+
msg(msg, subtitle)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
# rubocop: disable LineLength
|
3
|
+
#
|
4
|
+
# Gem Name:: newrelic-management
|
5
|
+
# NewRelicManagement:: Util
|
6
|
+
#
|
7
|
+
# Copyright (C) 2017 Brian Dwyer - Intelligent Digital Services
|
8
|
+
#
|
9
|
+
# All rights reserved - Do Not Redistribute
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'json'
|
13
|
+
|
14
|
+
module NewRelicManagement
|
15
|
+
# => Utility Methods
|
16
|
+
module Util
|
17
|
+
module_function
|
18
|
+
|
19
|
+
#####################
|
20
|
+
# => Cache <= #
|
21
|
+
#####################
|
22
|
+
|
23
|
+
# => Cache Return of a Function
|
24
|
+
def cachier(label, time = 30, &block)
|
25
|
+
var = "@_cachier_#{label}"
|
26
|
+
cache = instance_variable_get(var) || {}
|
27
|
+
return cache['data'] if cache['timestamp'] && Time.now <= cache['timestamp'] + time
|
28
|
+
cache['timestamp'] = Time.now
|
29
|
+
cache['data'] = block.yield
|
30
|
+
instance_variable_set(var, cache)
|
31
|
+
cache['data']
|
32
|
+
end
|
33
|
+
|
34
|
+
# => Clear Cache
|
35
|
+
def cachier!(var = nil)
|
36
|
+
if var && instance_variable_get("@#{var}")
|
37
|
+
# => Clear the Single Variable
|
38
|
+
remove_instance_variable("@#{var}")
|
39
|
+
else
|
40
|
+
# => Clear the Whole Damned Cache
|
41
|
+
instance_variables.each { |x| remove_instance_variable(x) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
########################
|
46
|
+
# => File I/O <= #
|
47
|
+
########################
|
48
|
+
|
49
|
+
# => Define JSON Parser
|
50
|
+
def parse_json(file = nil, symbolize = true)
|
51
|
+
return unless file && ::File.exist?(file.to_s)
|
52
|
+
begin
|
53
|
+
::JSON.parse(::File.read(file.to_s), symbolize_names: symbolize)
|
54
|
+
rescue JSON::ParserError
|
55
|
+
return
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# => Define JSON Writer
|
60
|
+
def write_json(file, object)
|
61
|
+
return unless file && object
|
62
|
+
begin
|
63
|
+
File.open(file, 'w') { |f| f.write(JSON.pretty_generate(object)) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# => Check if a string is an existing file, and return it's content
|
68
|
+
def filestring(file, size = 8192)
|
69
|
+
return unless file
|
70
|
+
return file unless file.is_a?(String) && File.file?(file) && File.size(file) <= size
|
71
|
+
File.read(file)
|
72
|
+
end
|
73
|
+
|
74
|
+
#############################
|
75
|
+
# => Serialization <= #
|
76
|
+
#############################
|
77
|
+
|
78
|
+
def serialize(response)
|
79
|
+
# => Serialize Object into JSON Array
|
80
|
+
JSON.pretty_generate(response.map(&:name).sort_by(&:downcase))
|
81
|
+
end
|
82
|
+
|
83
|
+
def serialize_csv(csv)
|
84
|
+
# => Serialize a CSV String into an Array
|
85
|
+
return unless csv && csv.is_a?(String)
|
86
|
+
csv.split(',')
|
87
|
+
end
|
88
|
+
|
89
|
+
# => Return Common Elements of an Array
|
90
|
+
def common_array(ary) # rubocop: disable AbcSize
|
91
|
+
return ary unless ary.is_a? Array
|
92
|
+
count = ary.count
|
93
|
+
return ary if count.zero?
|
94
|
+
return ary.flatten.uniq if count == 1
|
95
|
+
common = ary[0] & ary[1]
|
96
|
+
return common if count == 2
|
97
|
+
(count - 2).times { |x| common &= ary[x + 2] } if count > 2
|
98
|
+
common
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# rubocop: disable LineLength
|
3
|
+
|
4
|
+
lib = File.expand_path('../lib', __FILE__)
|
5
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
+
require 'newrelic-management/version'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = 'newrelic-management'
|
10
|
+
spec.version = NewRelicManagement::VERSION
|
11
|
+
spec.authors = ['Brian Dwyer']
|
12
|
+
spec.email = ['bdwyer@IEEE.org']
|
13
|
+
|
14
|
+
spec.summary = %(NewRelic Management Utility)
|
15
|
+
spec.homepage = 'https://github.com/bdwyertech/newrelic-management'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
19
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
20
|
+
if spec.respond_to?(:metadata)
|
21
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
22
|
+
else
|
23
|
+
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
24
|
+
end
|
25
|
+
|
26
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
|
+
spec.bindir = 'exe'
|
28
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
|
+
spec.require_paths = ['lib']
|
30
|
+
|
31
|
+
# => Dependencies
|
32
|
+
spec.add_runtime_dependency 'chronic_duration', '~> 0.10'
|
33
|
+
spec.add_runtime_dependency 'faraday', '~> 0.9'
|
34
|
+
spec.add_runtime_dependency 'faraday_middleware', '~> 0.9'
|
35
|
+
spec.add_runtime_dependency 'net-http-persistent', '~> 2.9.4'
|
36
|
+
spec.add_runtime_dependency 'mixlib-cli', '~> 1.7'
|
37
|
+
|
38
|
+
# => Daemonized Background Tasks
|
39
|
+
spec.add_runtime_dependency 'rufus-scheduler', '~> 3.3.2'
|
40
|
+
|
41
|
+
# => Notifications
|
42
|
+
spec.add_runtime_dependency 'os'
|
43
|
+
spec.add_runtime_dependency 'terminal-notifier'
|
44
|
+
|
45
|
+
# => Development Dependencies
|
46
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
47
|
+
spec.add_development_dependency 'pry'
|
48
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
49
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
50
|
+
spec.add_development_dependency 'rubocop'
|
51
|
+
end
|
metadata
ADDED
@@ -0,0 +1,252 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: newrelic-management
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brian Dwyer
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: chronic_duration
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.10'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.9'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday_middleware
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.9'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: net-http-persistent
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.9.4
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.9.4
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mixlib-cli
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.7'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.7'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rufus-scheduler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.3.2
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.3.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: os
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: terminal-notifier
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: bundler
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.12'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.12'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rake
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '10.0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '10.0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rspec
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3.0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3.0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rubocop
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
description:
|
196
|
+
email:
|
197
|
+
- bdwyer@IEEE.org
|
198
|
+
executables:
|
199
|
+
- newrelic-management
|
200
|
+
extensions: []
|
201
|
+
extra_rdoc_files: []
|
202
|
+
files:
|
203
|
+
- ".gitignore"
|
204
|
+
- ".gitlab-ci.yml"
|
205
|
+
- ".rubocop.yml"
|
206
|
+
- ".travis.yml"
|
207
|
+
- CHANGELOG.md
|
208
|
+
- Gemfile
|
209
|
+
- Gemfile.lock
|
210
|
+
- LICENSE.txt
|
211
|
+
- README.md
|
212
|
+
- Rakefile
|
213
|
+
- bin/console
|
214
|
+
- bin/setup
|
215
|
+
- exe/newrelic-management
|
216
|
+
- lib/newrelic-management.rb
|
217
|
+
- lib/newrelic-management/cli.rb
|
218
|
+
- lib/newrelic-management/client.rb
|
219
|
+
- lib/newrelic-management/config.rb
|
220
|
+
- lib/newrelic-management/controller.rb
|
221
|
+
- lib/newrelic-management/helpers/configuration.rb
|
222
|
+
- lib/newrelic-management/manager.rb
|
223
|
+
- lib/newrelic-management/notifier.rb
|
224
|
+
- lib/newrelic-management/util.rb
|
225
|
+
- lib/newrelic-management/version.rb
|
226
|
+
- newrelic-management.gemspec
|
227
|
+
homepage: https://github.com/bdwyertech/newrelic-management
|
228
|
+
licenses:
|
229
|
+
- MIT
|
230
|
+
metadata:
|
231
|
+
allowed_push_host: https://rubygems.org
|
232
|
+
post_install_message:
|
233
|
+
rdoc_options: []
|
234
|
+
require_paths:
|
235
|
+
- lib
|
236
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
237
|
+
requirements:
|
238
|
+
- - ">="
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
version: '0'
|
241
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
|
+
requirements:
|
243
|
+
- - ">="
|
244
|
+
- !ruby/object:Gem::Version
|
245
|
+
version: '0'
|
246
|
+
requirements: []
|
247
|
+
rubyforge_project:
|
248
|
+
rubygems_version: 2.5.1
|
249
|
+
signing_key:
|
250
|
+
specification_version: 4
|
251
|
+
summary: NewRelic Management Utility
|
252
|
+
test_files: []
|