kubernetes_health_checker 0.0.0.15 → 0.0.0.19

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09d7238c246fa7fe8230a07dbdcc2da7f3eef27842128ced1b0205af91e9af36'
4
- data.tar.gz: 32bb227701569860e563cc83662b5499c956e043853cc1f8497790e963e5a405
3
+ metadata.gz: 3d25309097896471d9d14d0a5b6a93dcb4d4fd854bcc551ce701b698d6b3238e
4
+ data.tar.gz: fa80370d7d7c083668965e35d660d39cc68fbdae9cad9f923400274cc626af15
5
5
  SHA512:
6
- metadata.gz: b2f15ae78ea5dedc7627f94da06b293b1d90e88c607429884e4284f8684c90adaec1d20356c1e630a51d43756af4aab42f97b7b02a137cc3753824536f769164
7
- data.tar.gz: 4154fd591f34fcf037bc151bf0f7014162cc289fec01e7fb2807c29fcadccc6fa1b6150f5161a691c7e8e94c9829283eee331e0b6db6a57a7ecb58750f5cde8c
6
+ metadata.gz: 452102d69202d30e85f7ebdd6cc52f9f99b6376e3cb534847ee609314c5c3a7744e5b45b56b9d9cab09b47d04482f5affb93110bbf0513b6bfa145fe4e9a04c5
7
+ data.tar.gz: 1f9f93cdbc6de8481265f992e9d033f7b45d0e9ce73d6cb96a33b50768a0a14d50dc80faaa0652a59c38756a46025d51185919dbf1d2d44582e9b5ec28e05d0c
@@ -3,6 +3,7 @@
3
3
  require 'rubygems'
4
4
  require 'thor'
5
5
  require 'json'
6
+ require 'syslog/logger'
6
7
 
7
8
  module KubernetesHealthChecker
8
9
  class Runner < Thor
@@ -15,46 +16,51 @@ module KubernetesHealthChecker
15
16
  method_option :url, aliases: '-u', type: :string, desc: 'Specify the slack url you would like the alert POSTed to'
16
17
  method_option :test, aliases: '-t', type: :boolean, desc: 'Specify if running the gem in test mode'
17
18
 
18
- ALERT_STATUSES = [
19
- 'crashloopbackoff',
20
- 'error',
21
- 'errimagepull',
22
- 'runconatinererror',
23
- ].freeze
19
+ ALERT_STATUSES = %w[crashloopbackoff
20
+ error
21
+ runcontainererror
22
+ createcontainerconfigerror
23
+ oomkilled].freeze
24
24
 
25
25
  # time is in seconds
26
26
  TIMED_ALERT_STATUSES = {
27
27
  'pending' => 120,
28
- 'containercreating' => 120,
29
- }
28
+ 'errimagepull' => 120,
29
+ 'containercreating' => 120
30
+ }.freeze
30
31
 
31
32
  RUN_INTERVAL = 10
32
33
 
33
34
  def start
34
- set_defaults(options)
35
- run_validations if !@test
36
- while true
37
- puts 'starting...'
38
- output = get_cli_output
39
- message = construct_message(output)
40
- send_alert(message) if !message.empty?
41
- puts 'sleeping...'
42
- sleep RUN_INTERVAL
35
+ log = Syslog::Logger.new 'kubernetes_health_checker'
36
+
37
+ begin
38
+ set_defaults(options)
39
+ run_validations if !@test
40
+ while true
41
+ puts 'starting...'
42
+ output = get_cli_output
43
+ message = construct_message(output)
44
+ send_alert(message) if !message.empty?
45
+ puts 'sleeping...'
46
+ sleep RUN_INTERVAL
47
+ end
48
+ rescue => e
49
+ log.error(e)
43
50
  end
44
51
  end
45
52
 
46
53
  desc 'version', 'Prints version'
47
54
  def version
48
- say "KubernetesHealthChecker 0.0.0"
55
+ say 'KubernetesHealthChecker 0.0.0'
49
56
  end
50
57
 
51
58
  no_commands do
52
59
  def set_defaults(options)
53
- opts = options.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
60
+ opts = options.inject({}) { |memo, (k, v)| memo[k.to_sym] = v; memo }
54
61
  @alert_threshold = opts[:alert_threshold] || 5
55
62
  @slack_channel = opts[:channel] || '@rohan'
56
- puts options
57
- @namespace = opts[:namespace].split(',') || ['default']
63
+ @namespace = opts[:namespace]&.split(',') || ['default']
58
64
  @test = opts[:test] || false
59
65
  @url = opts[:url]
60
66
  @pods_data = {}
@@ -68,7 +74,7 @@ module KubernetesHealthChecker
68
74
  if @test
69
75
  # so hacky, but pulls from second mock output if
70
76
  # it's the second time running to test state changes
71
- file_name = @pods_data.empty? ? '../mock_output.txt' : '../mock_output_three.txt'
77
+ file_name = @pods_data.empty? ? '../mock_output.txt' : '../mock_output_two.txt'
72
78
  path = File.expand_path(file_name, __FILE__)
73
79
  output = File.read(path)
74
80
  else
@@ -89,7 +95,7 @@ module KubernetesHealthChecker
89
95
  channel: @slack_channel,
90
96
  username: 'kubernetes_health_check_bot',
91
97
  text: message,
92
- icon_emoji: ":face_with_thermometer:"
98
+ icon_emoji: ':face_with_thermometer:'
93
99
  }
94
100
 
95
101
  `curl -X POST --data-urlencode 'payload=#{JSON.generate(payload)}' #{@url}`
@@ -98,7 +104,7 @@ module KubernetesHealthChecker
98
104
  def get_pod_message(pod_name:, new_status:, new_restarts:, age:)
99
105
  old_restarts = @pods_data[pod_name][:restarts]
100
106
  old_status = @pods_data[pod_name][:status]
101
- text = ""
107
+ text = ''
102
108
 
103
109
  if !@pods_data[pod_name].empty? && old_restarts == new_restarts && old_status == new_status
104
110
  # we've already alerted from this state, skip
@@ -118,20 +124,22 @@ module KubernetesHealthChecker
118
124
 
119
125
  def construct_message(output)
120
126
  message = ''
121
- new_pod_store = {}
122
127
 
123
128
  rows = output.split("\n")
124
129
  rows.each_with_index do |row, index|
125
130
  next if index == 0
126
131
 
127
- row = row.split(" ")
132
+ row = row.split(' ')
128
133
  pod_name = row[0]
129
134
  status = row[2]
130
135
  restarts = row[3].to_i
131
136
  age = get_age_in_seconds(row[4])
132
137
 
133
138
  @pods_data[pod_name] ||= {}
134
- message += get_pod_message(pod_name: pod_name, new_status: status, new_restarts: restarts, age: age)
139
+ message += get_pod_message(pod_name: pod_name,
140
+ new_status: status,
141
+ new_restarts: restarts,
142
+ age: age)
135
143
 
136
144
  # update our data store for the pods
137
145
  @pods_data[pod_name][:status] = status
@@ -162,4 +170,4 @@ module KubernetesHealthChecker
162
170
  end
163
171
  end
164
172
 
165
- KubernetesHealthChecker::Runner.start
173
+ KubernetesHealthChecker::Runner.start
@@ -2,5 +2,5 @@
2
2
 
3
3
  require 'daemons'
4
4
 
5
- filename = "#{File.expand_path(File.dirname(__FILE__))}/kubernetes_health_checker"
6
- Daemons.run(filename, log_output: true)
5
+ filename = "#{__dir__}/kubernetes_health_checker"
6
+ Daemons.run(filename)
data/bin/mock_output.txt CHANGED
@@ -6,7 +6,7 @@ affinity-external-api-dep-1624144290-zqsfb 0/2 Evicted 0
6
6
  affinity-external-api-dep-3283253972-ttgft 2/2 Running 0 1d
7
7
  automate-affinity-pipeline-rc-l6zb0 1/1 Running 0 1d
8
8
  compute-relationship-strengths-rc-x8mv1 1/1 Running 0 1d
9
- convert-html-to-text-consumer-rc-lx0s5 1/1 Running 0 1d
9
+ convert-html-to-text-consumer-rc-lx0s5 1/1 Pending 0 1d
10
10
  create-contacts-consumer-rc-h5hj7 1/1 Running 0 1d
11
11
  create-deal-emails-consumer-rc-qd7n4 1/1 Running 10 22h
12
12
  create-smart-alert-notifications-rc-d87p2 1/1 Running 0 1d
@@ -19,8 +19,8 @@ ditto2-rc-ffj0s 1/1 Running 3
19
19
  ditto3-rc-ntdz9 1/1 Running 1 22h
20
20
  dump-new-persons-for-labeling-rc-p043f 1/1 Running 0 1d
21
21
  extract-introductions-consumer-rc-32d29 1/1 Running 1 1d
22
- extract-signatures-consumer-rc-4n0wl 1/1 Running 0 1d
23
- fetch-public-metadata-rc-g94b0 1/1 Running 0 1d
22
+ extract-signatures-consumer-rc-4n0wl 1/1 ErrImagePull 0 60s
23
+ fetch-public-metadata-rc-g94b0 1/1 ErrImagePull 0 130s
24
24
  health-check-rc-wkh2t 1/1 Running 0 22h
25
25
  helper-rc-17pmz 1/1 Running 0 22h
26
26
  import-companies-rc-grkkm 1/1 Running 0 1d
@@ -104,4 +104,4 @@ weave-net-h29cn 2/2 R
104
104
  weave-net-mqjcw 2/2 Running 4 68d
105
105
  weave-net-r85qh 2/2 Running 0 2h
106
106
  weave-net-wgsml 2/2 Running 12 68d
107
- weave-net-zdz7j 2/2 Running 4 19d
107
+ weave-net-zdz7j 2/2 Running 4 19d
@@ -25,7 +25,7 @@ health-check-rc-wkh2t 1/1 Running 0
25
25
  helper-rc-17pmz 1/1 Running 0 22h
26
26
  import-companies-rc-grkkm 1/1 Running 0 1d
27
27
  import-company-metadata-rc-n094g 1/1 Running 0 22h
28
- import-crunchbase-metadata-rc-94433 1/1 Running 0 1d
28
+ import-crunchbase-metadata-rc-94433 1/1 OOMKilled 0 1d
29
29
  import-person-metadata-rc-wkvrg 1/1 Running 0 1d
30
30
  match-email-to-persons-consumer-rc-l6cgr 1/1 Running 0 22h
31
31
  match-event-to-persons-consumer-rc-w8jn1 1/1 Running 2 1d
@@ -54,7 +54,7 @@ send-inactive-user-emails-rc-92pf0 1/1 CrashLoopBackO
54
54
  send-weekly-summary-email-rc-vmr8s 1/1 Running 0 1d
55
55
  shoryuken-ews-syncer-rc-rr512 1/1 Running 1 1d
56
56
  shoryuken-ews-syncer-rc-wq76w 1/1 Running 1 1d
57
- shoryuken-insert-emails-rc-65ct6 1/1 Running 2 1d
57
+ shoryuken-insert-emails-rc-65ct6 1/1 Pending 2 1d
58
58
  sidekiq-rc-kz4tc 1/1 Running 0 1d
59
59
  sidekiq-rc-wl7pm 1/1 Running 0 1d
60
60
  sidekiq-web-dep-1155096845-kfs0h 2/2 Running 0 1d
@@ -67,4 +67,4 @@ update-dropped-email-alerts-consumer-rc-n3069 1/1 Running 1
67
67
  update-email-count-rc-s29lk 1/1 Running 0 1d
68
68
  update-primary-emails-rc-6sd8b 1/1 Running 0 1d
69
69
  update-sources-consumer-rc-zrf2f 1/1 Running 0 22h
70
- vacuum-analyze-db-rc-jr14r 1/1 Running 0 1d
70
+ vacuum-analyze-db-rc-jr14r 1/1 Running 0 1d
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubernetes_health_checker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.15
4
+ version: 0.0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rohan Sahai
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-10 00:00:00.000000000 Z
11
+ date: 2021-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: thor
14
+ name: daemons
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: daemons
28
+ name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -65,11 +65,11 @@ files:
65
65
  - bin/kubernetes_health_checkerd
66
66
  - bin/mock_output.txt
67
67
  - bin/mock_output_two.txt
68
- homepage: http://rubygems.org/gems/kubernetes_health_checker
68
+ homepage: https://rubygems.org/gems/kubernetes_health_checker
69
69
  licenses:
70
70
  - MIT
71
71
  metadata: {}
72
- post_install_message:
72
+ post_install_message:
73
73
  rdoc_options: []
74
74
  require_paths:
75
75
  - lib
@@ -77,16 +77,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
- version: '0'
80
+ version: '2.4'
81
81
  required_rubygems_version: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - ">="
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
86
  requirements: []
87
- rubyforge_project:
88
- rubygems_version: 2.7.7
89
- signing_key:
87
+ rubygems_version: 3.2.3
88
+ signing_key:
90
89
  specification_version: 4
91
90
  summary: Get notifications for unhealthy kubernetes pods
92
91
  test_files: []