cknife 0.1.8 → 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.
@@ -0,0 +1,88 @@
1
+ require 'thor'
2
+ require 'daemons'
3
+ require 'active_support/all'
4
+ require 'rest_client'
5
+
6
+ require 'cknife/config'
7
+ require 'cknife/monitor'
8
+ require 'cknife/repetition'
9
+
10
+ module CKnife
11
+ class CKnifeMon < Thor
12
+
13
+ no_tasks do
14
+ def config
15
+ @config ||= Config
16
+ end
17
+
18
+ def conf
19
+ @conf ||= {
20
+ :url => config['mon.url'],
21
+ :api_key => config['mon.api_key']
22
+ }
23
+ end
24
+
25
+ def monitor
26
+ @monitor ||= CKnife::Monitor.new(conf[:url], :api_key => conf[:api_key])
27
+ end
28
+
29
+ def daemonized_task
30
+ conf # cache file before we lose descriptor
31
+
32
+ if @daemonized_task.nil?
33
+
34
+ p = proc do
35
+ while true
36
+ sleep 5
37
+ monitor.poll_background
38
+ end
39
+ end
40
+
41
+ options = {
42
+ :app_name => 'cknife_monitor',
43
+ :mode => :proc,
44
+ :proc => p,
45
+ :log_output => true,
46
+ :output_logfilename => "cknife_monitor.log",
47
+ :dir_mode => :normal,
48
+ :dir => File.expand_path('.')
49
+ }
50
+ @group ||= Daemons::ApplicationGroup.new(options[:app_name], options)
51
+
52
+
53
+ @daemonized_task = @group.new_application(options)
54
+ end
55
+
56
+ @daemonized_task
57
+ end
58
+ end
59
+
60
+ desc "start", "Start monitor."
61
+ def start
62
+ say("Starting.")
63
+ daemonized_task.start
64
+ end
65
+
66
+ desc "status", "Show status of monitor."
67
+ def status
68
+ daemonized_task.show_status
69
+ end
70
+
71
+ desc "restart", "Restart monitor."
72
+ def restart
73
+ stop
74
+ start
75
+ end
76
+
77
+ desc "stop", "Stop monitor."
78
+ def stop
79
+ if !daemonized_task.running?
80
+ say("Not running.", :red)
81
+ return
82
+ end
83
+
84
+ daemonized_task.stop
85
+ say("Stopped.")
86
+ end
87
+ end
88
+ end
@@ -32,7 +32,6 @@ module CKnife
32
32
  def command_line
33
33
  @command_line ||= CommandLine.new(option_file, "[client]\npassword=\"#{conf[:password]}\"", self)
34
34
  end
35
-
36
35
  end
37
36
 
38
37
  desc "capture", "Capture a dump of the database to db(current timestamp).sql."
@@ -67,7 +67,7 @@ class CKnifePg < Thor
67
67
  # pgpass format
68
68
  File.open(pg_pass_file, "w", 0600) { |f| f.write "#{conf[:host]}:#{conf[:port]}:*:#{conf[:username]}:#{conf[:password]}" }
69
69
 
70
- result = yield
70
+ result = yield # don't know what we're planning to do with the result here...
71
71
 
72
72
  FileUtils.rm(pg_pass_file)
73
73
  if File.exists?(pg_pass_file)
@@ -109,12 +109,17 @@ class CKnifePg < Thor
109
109
  with_pg_pass_file do
110
110
  my_pid = pg_pass_file_execute(psql_invocation, "select pg_backend_pid();").split.first
111
111
  ids_output = pg_pass_file_execute(psql_invocation, "SELECT procpid, application_name FROM pg_stat_activity WHERE datname = '#{conf[:database]}' AND procpid != #{my_pid};")
112
- table = ids_output.split.map { |line| line.split("|") }
113
- print_table([["PID", "Application Name"]] + table, :indent => 2)
114
- ids = table.map { |row| row.first }
115
112
 
116
- say("If you would like to kill these sessions, you can do so with this command:")
117
- say("kill -9 #{ids.join(' ')}")
113
+ if ids_output.nil?
114
+ say("Error while looking for session information. Possibly a failed login.")
115
+ else
116
+ table = ids_output.split.map { |line| line.split("|") }
117
+ print_table([["PID", "Application Name"]] + table, :indent => 2)
118
+ ids = table.map { |row| row.first }
119
+
120
+ say("If you would like to kill these sessions, you can do so with this command:")
121
+ say("kill -9 #{ids.join(' ')}")
122
+ end
118
123
  end
119
124
  end
120
125
 
@@ -1,5 +1,6 @@
1
1
  require 'action_view'
2
2
  require 'pathname'
3
+ require 'yaml'
3
4
 
4
5
  module CKnife
5
6
  class Formatter
@@ -29,7 +30,7 @@ module CKnife
29
30
  begin
30
31
  @config.merge!(YAML.load(config_file.read))
31
32
  rescue
32
- say ("Found, but could not parse config: #{config_file}")
33
+ puts "Found, but could not parse config: #{config_file}"
33
34
  end
34
35
  end
35
36
 
@@ -0,0 +1,42 @@
1
+ require 'cknife/backgrounded_polling'
2
+
3
+ module CKnife
4
+ class Monitor
5
+ attr_accessor :url, :api_key, :last_error, :last_result, :last_polled_at, :consecutive_error_count, :active
6
+
7
+ include BackgroundedPolling
8
+
9
+ def initialize(url, options = {})
10
+ self.url = url
11
+ self.active = true
12
+ self.consecutive_error_count = 0
13
+ self.last_polled_at = nil
14
+ self.api_key = options[:api_key] if options[:api_key]
15
+ end
16
+
17
+ def target_endpoint
18
+ u = URI.parse(url)
19
+ u.userinfo = "#{api_key}:#{api_key}" if api_key
20
+ u.to_s
21
+ end
22
+
23
+ def before_poll
24
+ self.last_result = nil
25
+ end
26
+
27
+ def handle_poll_result(response, request, result)
28
+ self.last_result = response.net_http_res.code.to_i
29
+ end
30
+
31
+ def payload
32
+ res = `cat /proc/meminfo`
33
+ lines = res.split("\n")
34
+ matcher = /:\s+(\d+)/
35
+ lines[0] =~ matcher
36
+ total = $1
37
+ lines[1] =~ matcher
38
+ free = $1
39
+ stats = { :free => free.to_i, :total => total.to_i }
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,12 @@
1
+
2
+ #
3
+ # This used to be in the morality directory in the MRivera CRM app.
4
+ # It may be refactored to retain that name again in some fashion
5
+ # in the future. - M. Rivera 12/15/15
6
+ #
7
+
8
+ module CKnife
9
+ class Repetition
10
+ MAX_CONSECUTIVE = 3
11
+ end
12
+ end
metadata CHANGED
@@ -1,220 +1,228 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cknife
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Mike De La Loza
7
+ - Michael Rivera
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-01 00:00:00.000000000 Z
11
+ date: 2018-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
20
- - - ~>
19
+ version: 1.8.0
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '1.6'
30
- - - ~>
29
+ version: 1.8.0
30
+ - - "~>"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '1'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: nokogiri
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - '>='
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '1.6'
40
- - - ~>
39
+ version: 1.8.2
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '1'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: '1.6'
50
- - - ~>
49
+ version: 1.8.2
50
+ - - "~>"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '1'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: i18n
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - ~>
57
+ - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: '0'
59
+ version: 0.6.6
60
60
  type: :runtime
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - ~>
64
+ - - ">="
65
65
  - !ruby/object:Gem::Version
66
- version: '0'
66
+ version: 0.6.6
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: activesupport
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - ~>
71
+ - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '3'
73
+ version: 4.2.9
74
74
  type: :runtime
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
- - - ~>
78
+ - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: '3'
80
+ version: 4.2.9
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: actionpack
83
83
  requirement: !ruby/object:Gem::Requirement
84
84
  requirements:
85
- - - ~>
85
+ - - "~>"
86
86
  - !ruby/object:Gem::Version
87
- version: '3'
87
+ version: 4.2.9
88
88
  type: :runtime
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - ~>
92
+ - - "~>"
93
93
  - !ruby/object:Gem::Version
94
- version: '3'
94
+ version: 4.2.9
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: mail
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - ~>
99
+ - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: '2.4'
101
+ version: 2.5.5
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - ~>
106
+ - - "~>"
107
107
  - !ruby/object:Gem::Version
108
- version: '2.4'
108
+ version: 2.5.5
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: thor
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
- - - '>='
113
+ - - ">="
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0.14'
116
- - - ~>
116
+ - - "~>"
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0'
119
119
  type: :runtime
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - '>='
123
+ - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0.14'
126
- - - ~>
126
+ - - "~>"
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  - !ruby/object:Gem::Dependency
130
130
  name: builder
131
131
  requirement: !ruby/object:Gem::Requirement
132
132
  requirements:
133
- - - ~>
133
+ - - "~>"
134
134
  - !ruby/object:Gem::Version
135
135
  version: '3.0'
136
136
  type: :runtime
137
137
  prerelease: false
138
138
  version_requirements: !ruby/object:Gem::Requirement
139
139
  requirements:
140
- - - ~>
140
+ - - "~>"
141
141
  - !ruby/object:Gem::Version
142
142
  version: '3.0'
143
143
  - !ruby/object:Gem::Dependency
144
- name: fog
144
+ name: fog-aws
145
145
  requirement: !ruby/object:Gem::Requirement
146
146
  requirements:
147
- - - <=
148
- - !ruby/object:Gem::Version
149
- version: '1.17'
150
- - - '>='
147
+ - - "<"
151
148
  - !ruby/object:Gem::Version
152
- version: '1.15'
149
+ version: '3.0'
153
150
  type: :runtime
154
151
  prerelease: false
155
152
  version_requirements: !ruby/object:Gem::Requirement
156
153
  requirements:
157
- - - <=
158
- - !ruby/object:Gem::Version
159
- version: '1.17'
160
- - - '>='
154
+ - - "<"
161
155
  - !ruby/object:Gem::Version
162
- version: '1.15'
156
+ version: '3.0'
163
157
  - !ruby/object:Gem::Dependency
164
158
  name: unf
165
159
  requirement: !ruby/object:Gem::Requirement
166
160
  requirements:
167
- - - '>='
161
+ - - ">="
168
162
  - !ruby/object:Gem::Version
169
163
  version: '0.1'
170
- - - ~>
164
+ - - "~>"
171
165
  - !ruby/object:Gem::Version
172
166
  version: '0'
173
167
  type: :runtime
174
168
  prerelease: false
175
169
  version_requirements: !ruby/object:Gem::Requirement
176
170
  requirements:
177
- - - '>='
171
+ - - ">="
178
172
  - !ruby/object:Gem::Version
179
173
  version: '0.1'
180
- - - ~>
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ - !ruby/object:Gem::Dependency
178
+ name: daemons
179
+ requirement: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ type: :runtime
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
181
189
  - !ruby/object:Gem::Version
182
190
  version: '0'
183
191
  - !ruby/object:Gem::Dependency
184
192
  name: bundler
185
193
  requirement: !ruby/object:Gem::Requirement
186
194
  requirements:
187
- - - ~>
195
+ - - "~>"
188
196
  - !ruby/object:Gem::Version
189
197
  version: '1.0'
190
198
  type: :development
191
199
  prerelease: false
192
200
  version_requirements: !ruby/object:Gem::Requirement
193
201
  requirements:
194
- - - ~>
202
+ - - "~>"
195
203
  - !ruby/object:Gem::Version
196
204
  version: '1.0'
197
205
  - !ruby/object:Gem::Dependency
198
206
  name: jeweler
199
207
  requirement: !ruby/object:Gem::Requirement
200
208
  requirements:
201
- - - ~>
209
+ - - "~>"
202
210
  - !ruby/object:Gem::Version
203
- version: '2.0'
211
+ version: '2.1'
204
212
  type: :development
205
213
  prerelease: false
206
214
  version_requirements: !ruby/object:Gem::Requirement
207
215
  requirements:
208
- - - ~>
216
+ - - "~>"
209
217
  - !ruby/object:Gem::Version
210
- version: '2.0'
211
- description: Cali Army Knife, a collection of command line tools, especially for popular
212
- API services.
213
- email: mikedll@mikedll.com
218
+ version: '2.1'
219
+ description: A collection of command line tools, especially for popular API services.
220
+ email: soymrmike@gmail.com
214
221
  executables:
215
222
  - cknifeaws
216
223
  - cknifedub
217
224
  - cknifemail
225
+ - cknifemon
218
226
  - cknifemysql
219
227
  - cknifenowtimestamp
220
228
  - cknifepg
@@ -225,8 +233,8 @@ extra_rdoc_files:
225
233
  - LICENSE
226
234
  - README.md
227
235
  files:
228
- - .ruby-gemset
229
- - .ruby-version
236
+ - ".ruby-gemset"
237
+ - ".ruby-version"
230
238
  - Gemfile
231
239
  - Gemfile.lock
232
240
  - LICENSE
@@ -236,6 +244,7 @@ files:
236
244
  - bin/cknifeaws
237
245
  - bin/cknifedub
238
246
  - bin/cknifemail
247
+ - bin/cknifemon
239
248
  - bin/cknifemysql
240
249
  - bin/cknifenowtimestamp
241
250
  - bin/cknifepg
@@ -243,13 +252,19 @@ files:
243
252
  - bin/cknifezerigo
244
253
  - cknife.gemspec
245
254
  - cknife.yml.sample
255
+ - doc/remote_ubuntu_machine.md
256
+ - lib/cknife/backgrounded_polling.rb
257
+ - lib/cknife/cknife_aws.rb
258
+ - lib/cknife/cknife_mon.rb
246
259
  - lib/cknife/cknife_mysql.rb
247
260
  - lib/cknife/cknife_pg.rb
248
261
  - lib/cknife/command_line.rb
249
262
  - lib/cknife/config.rb
250
- homepage: http://github.com/mikedll/cali-army-knife
263
+ - lib/cknife/monitor.rb
264
+ - lib/cknife/repetition.rb
265
+ homepage: http://github.com/mikedll/cknife
251
266
  licenses:
252
- - MIT
267
+ - ''
253
268
  metadata: {}
254
269
  post_install_message:
255
270
  rdoc_options: []
@@ -257,18 +272,18 @@ require_paths:
257
272
  - lib
258
273
  required_ruby_version: !ruby/object:Gem::Requirement
259
274
  requirements:
260
- - - '>='
275
+ - - ">="
261
276
  - !ruby/object:Gem::Version
262
277
  version: '0'
263
278
  required_rubygems_version: !ruby/object:Gem::Requirement
264
279
  requirements:
265
- - - '>='
280
+ - - ">="
266
281
  - !ruby/object:Gem::Version
267
282
  version: '0'
268
283
  requirements: []
269
284
  rubyforge_project:
270
- rubygems_version: 2.4.7
285
+ rubygems_version: 2.6.14.1
271
286
  signing_key:
272
287
  specification_version: 4
273
- summary: Cali Army Knife
288
+ summary: CKnife
274
289
  test_files: []