kubernetes_health_checker 0.0.0.8 → 0.0.0.9
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 +5 -5
- data/bin/kubernetes_health_checker +34 -3
- data/bin/mock_output.txt +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 58a40f40dddb563becfc52a7ab63d9e3848d8b18fdc167c7bad02880bb1a0d75
|
4
|
+
data.tar.gz: 5264cc5ce67872d52fbc8d545a40eef33a83a24b7ad9d9baea29364b703ce5ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0859e8c5514b2a3d2235005b26e469eeef777b99dbe6ad312e0cf48da1c7ff0516f05a64830bc3df385d0ddd5451aba408e58b3cba38080eb13277656dbfa72c'
|
7
|
+
data.tar.gz: 7f2d7c96cea1dbc26287ceaf5e8cfb0ba41d3c051e4dae7df5e9b6ee46e4b0c6d0b2604d6839cf4890eff085b856fbea309e5fc152800f2e093117743b3b22a0
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'thor'
|
5
5
|
require 'json'
|
6
|
+
require 'byebug'
|
6
7
|
|
7
8
|
module KubernetesHealthChecker
|
8
9
|
class Runner < Thor
|
@@ -15,7 +16,13 @@ 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 = ['crashloopbackoff'
|
19
|
+
ALERT_STATUSES = ['crashloopbackoff'].freeze
|
20
|
+
|
21
|
+
# time is in seconds
|
22
|
+
TIMED_ALERT_STATUSES = {
|
23
|
+
'pending' => 30,
|
24
|
+
'containercreating' => 30,
|
25
|
+
}
|
19
26
|
|
20
27
|
RUN_INTERVAL = 120
|
21
28
|
|
@@ -78,7 +85,7 @@ module KubernetesHealthChecker
|
|
78
85
|
`curl -X POST --data-urlencode 'payload=#{JSON.generate(payload)}' #{@url}`
|
79
86
|
end
|
80
87
|
|
81
|
-
def get_pod_message(pod_name:, new_status:, new_restarts:)
|
88
|
+
def get_pod_message(pod_name:, new_status:, new_restarts:, age:)
|
82
89
|
old_restarts = @pods_data[pod_name][:restarts]
|
83
90
|
old_status = @pods_data[pod_name][:status]
|
84
91
|
text = ""
|
@@ -87,6 +94,11 @@ module KubernetesHealthChecker
|
|
87
94
|
# we've already alerted from this state, skip
|
88
95
|
elsif ALERT_STATUSES.include?(new_status.downcase)
|
89
96
|
text = "Pod *#{pod_name}* is in status: *#{new_status}*.\n"
|
97
|
+
elsif TIMED_ALERT_STATUSES.keys.include?(new_status.downcase)
|
98
|
+
alert_threshold = TIMED_ALERT_STATUSES[new_status.downcase]
|
99
|
+
if age > alert_threshold
|
100
|
+
text = "Pod #{pod_name} has been in status: *#{new_status}* for #{age} seconds :grimacing:."
|
101
|
+
end
|
90
102
|
elsif new_restarts > @alert_threshold
|
91
103
|
text = "Pod *#{pod_name}* has restarted *#{new_restarts}* times and has status: *#{new_status}*.\n"
|
92
104
|
end
|
@@ -106,9 +118,10 @@ module KubernetesHealthChecker
|
|
106
118
|
pod_name = row[0]
|
107
119
|
status = row[2]
|
108
120
|
restarts = row[3].to_i
|
121
|
+
age = get_age_in_seconds(row[4])
|
109
122
|
|
110
123
|
@pods_data[pod_name] ||= {}
|
111
|
-
message += get_pod_message(pod_name: pod_name, new_status: status, new_restarts: restarts)
|
124
|
+
message += get_pod_message(pod_name: pod_name, new_status: status, new_restarts: restarts, age: age)
|
112
125
|
|
113
126
|
# update our data store for the pods
|
114
127
|
@pods_data[pod_name][:status] = status
|
@@ -117,6 +130,24 @@ module KubernetesHealthChecker
|
|
117
130
|
|
118
131
|
message
|
119
132
|
end
|
133
|
+
|
134
|
+
def get_age_in_seconds(raw_age)
|
135
|
+
# this split does: 1d = [1, d]
|
136
|
+
number, unit = raw_age.split(/(?<=\d)(?=[A-Za-z])/)
|
137
|
+
case unit
|
138
|
+
when 's'
|
139
|
+
number.to_i
|
140
|
+
when 'm'
|
141
|
+
number.to_i * 60
|
142
|
+
when 'h'
|
143
|
+
number.to_i * 60 * 60
|
144
|
+
when 'd'
|
145
|
+
number.to_i * 60 * 60 * 24
|
146
|
+
else
|
147
|
+
# I don't think we'll ever get here
|
148
|
+
nil
|
149
|
+
end
|
150
|
+
end
|
120
151
|
end
|
121
152
|
end
|
122
153
|
end
|
data/bin/mock_output.txt
CHANGED
@@ -43,7 +43,7 @@ refresh-cross-org-external-pairs-rc-lbj69 1/1 Running 0
|
|
43
43
|
refresh-email-address-strengths-rc-qnxjl 1/1 Running 0 1d
|
44
44
|
refresh-internal-externals-rc-t88d3 1/1 Running 0 1d
|
45
45
|
refresh-organization-relevant-company-rc-vqzv7 1/1 Running 0 1d
|
46
|
-
refresh-person-smart-attributes-rc-8m1xd 1/1
|
46
|
+
refresh-person-smart-attributes-rc-8m1xd 1/1 ContainerCreating 0 10m
|
47
47
|
reset-reminders-and-create-notifications-rc-w75wt 1/1 Running 0 1d
|
48
48
|
reset-reminders-email-consumer-rc-bvwq7 1/1 Running 0 1d
|
49
49
|
reset-reminders-event-consumer-rc-2fx0g 1/1 Running 1 1d
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kubernetes_health_checker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.0.
|
4
|
+
version: 0.0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rohan Sahai
|
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
85
|
version: '0'
|
86
86
|
requirements: []
|
87
87
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.
|
88
|
+
rubygems_version: 2.7.7
|
89
89
|
signing_key:
|
90
90
|
specification_version: 4
|
91
91
|
summary: Get notifications for unhealthy kubernetes pods
|