cknife 0.1.8 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []