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.
@@ -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,3 @@
1
+ module NewRelicManagement
2
+ VERSION = '0.1.1'.freeze
3
+ 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: []