cfn-guardian 0.11.10 → 0.11.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bd6e97a40ddb635e1b77930c9c86aa955f31dc2dc31025706a51c14aa71ac88
4
- data.tar.gz: 1b04f751759f877ea32cf8470249712af0054e94cb208f314884287534b5fa56
3
+ metadata.gz: 21cb58528975cc592785f0ca44fe361afd0b9594d7323525f818a97811a3ba4b
4
+ data.tar.gz: 2e2696e21720d357e96fc5ec5c188c0cc843c274a097759409eb93b555853be4
5
5
  SHA512:
6
- metadata.gz: d293b763c17981ec283bab6ddd3262a7c5c5fef4df50af6f934f6a408c29a8f75cf1615ea64080dc743154afe6e25a5595cd744bf3415f6200a0b72e02143498
7
- data.tar.gz: e296b1a03e226c0fbef8699573f5e4a1c3c5268538200d6307e9a76bdbb377ed711c20b302bdbc4a8a72df44b3d7c4d92953cdb56c0e7c3a7502edf4bca0814e
6
+ metadata.gz: 797f9f5716587ad2882ec691169b7e360e5c2adfae5854c3877be5e164450a942b82afeb1bdf4a68859b21d87ea10ddb7c147138f575325e12c15b72cbed9c53
7
+ data.tar.gz: 42427429d68e4382bf3e541c6cef4d2740394079698582fa7304efff9a71ba5deb39f3e221c7046f1b194d97e9c96a13e07184d215b4cf889b9fc0d8c464cc5a
@@ -18,17 +18,17 @@ jobs:
18
18
  uses: rlespinasse/github-slug-action@v3.x
19
19
 
20
20
  - name: Set up Docker Buildx
21
- uses: docker/setup-buildx-action@v1
21
+ uses: docker/setup-buildx-action@v3
22
22
 
23
23
  - name: Login to GitHub Container Repository
24
- uses: docker/login-action@v1
24
+ uses: docker/login-action@v3
25
25
  with:
26
26
  registry: ghcr.io
27
- username: ${{ github.repository_owner }}
28
- password: ${{ secrets.GHCR_PUSH_TOKEN }}
27
+ username: ${{ github.actor }}
28
+ password: ${{ secrets.GITHUB_TOKEN }}
29
29
 
30
30
  - name: Build and push Container Image to GitHub Container Repository
31
- uses: docker/build-push-action@v2
31
+ uses: docker/build-push-action@v6
32
32
  with:
33
33
  context: .
34
34
  file: ./Dockerfile
@@ -20,8 +20,8 @@ jobs:
20
20
  uses: docker/login-action@v1
21
21
  with:
22
22
  registry: ghcr.io
23
- username: ${{ github.repository_owner }}
24
- password: ${{ secrets.GHCR_PUSH_TOKEN }}
23
+ username: ${{ github.actor }}
24
+ password: ${{ secrets.GITHUB_TOKEN }}
25
25
 
26
26
  - name: Build and push Container Image to GitHub Container Repository
27
27
  uses: docker/build-push-action@v2
data/Dockerfile CHANGED
@@ -8,7 +8,7 @@ COPY . /src
8
8
 
9
9
  WORKDIR /src
10
10
 
11
- RUN apk add --no-cache git \
11
+ RUN apk add --no-cache git build-base \
12
12
  && gem build cfn-guardian.gemspec \
13
13
  && gem install cfn-guardian-${GUARDIAN_VERSION}.gem \
14
14
  && rm -rf /src
data/cfn-guardian.gemspec CHANGED
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_dependency 'aws-sdk-codecommit', '~> 1.53', '<2'
39
39
  spec.add_dependency 'aws-sdk-codepipeline', '~> 1.55', '<2'
40
40
 
41
- spec.add_runtime_dependency('rexml', '>= 0')
41
+ spec.add_runtime_dependency('rexml', '3.3.0')
42
42
 
43
43
  spec.add_development_dependency "bundler", "~> 2.0"
44
44
  spec.add_development_dependency "rake", "~> 13.0"
@@ -29,6 +29,7 @@ cfn-guardian show-alarms --defaults --group ApplicationTargetGroup --alarm Targe
29
29
  | ActionsEnabled | true |
30
30
  | AlarmAction | Critical |
31
31
  | TreatMissingData | notBreaching |
32
+ | OkActionDisabled | false |
32
33
  +-------------------------+----------------------------------+
33
34
  ```
34
35
 
@@ -113,6 +114,19 @@ Templates:
113
114
  CPUUtilizationHigh: false
114
115
  ```
115
116
 
117
+ ## Disabling The OK Action On An Alarm
118
+
119
+ You can disable the OK action on an alarm by setting the OkActionDisabled flag to `true`. You might want to do this if you just want to receive alarm notifications rather than treat it as stateful.
120
+
121
+ ```yaml
122
+ Templates:
123
+ # define the resource group
124
+ Ec2Instance:
125
+ # define the Alarm and set the OkActionDisabled value to true
126
+ CPUUtilizationHigh:
127
+ OkActionDisabled: true
128
+ ```
129
+
116
130
  ## M Out Of N Metric Data Points
117
131
 
118
132
  This can be good to alert on groups of spikes with in a certain time frame without getting alerts for individual spikes.
@@ -30,6 +30,8 @@ require 'cfnguardian/resources/internal_http'
30
30
  require 'cfnguardian/resources/port'
31
31
  require 'cfnguardian/resources/internal_port'
32
32
  require 'cfnguardian/resources/nrpe'
33
+ require 'cfnguardian/resources/kafka_cluster'
34
+ require 'cfnguardian/resources/kafka_topic'
33
35
  require 'cfnguardian/resources/lambda'
34
36
  require 'cfnguardian/resources/network_targetgroup'
35
37
  require 'cfnguardian/resources/rds_cluster'
@@ -32,6 +32,7 @@ module CfnGuardian
32
32
  ['EvaluateLowSampleCountPercentile', alarm.evaluate_low_sample_count_percentile],
33
33
  ['Unit', alarm.unit],
34
34
  ['AlarmAction', alarm.alarm_action],
35
+ ['OkActionDisabled', alarm.ok_action_disabled],
35
36
  ['TreatMissingData', alarm.treat_missing_data]
36
37
  ]
37
38
 
@@ -72,7 +73,8 @@ module CfnGuardian
72
73
  ['EvaluateLowSampleCountPercentile', alarm.evaluate_low_sample_count_percentile, metric_alarm.evaluate_low_sample_count_percentile],
73
74
  ['Unit', alarm.unit, metric_alarm.unit],
74
75
  ['TreatMissingData', alarm.treat_missing_data, metric_alarm.treat_missing_data],
75
- ['AlarmAction', alarm.alarm_action, alarm.alarm_action]
76
+ ['AlarmAction', alarm.alarm_action, alarm.alarm_action],
77
+ ['OkActionDisabled', alarm.ok_action_disabled]
76
78
  ]
77
79
 
78
80
  rows.select! {|row| !row[1].nil?}.each {|row| colour_compare_row(row)}
@@ -19,6 +19,7 @@ module CfnGuardian
19
19
  :comparison_operator,
20
20
  :statistic,
21
21
  :actions_enabled,
22
+ :ok_action_disabled,
22
23
  :enabled,
23
24
  :resource_id,
24
25
  :resource_name,
@@ -45,6 +46,7 @@ module CfnGuardian
45
46
  @comparison_operator = 'GreaterThanThreshold'
46
47
  @statistic = 'Maximum'
47
48
  @actions_enabled = true
49
+ @ok_action_disabled = false
48
50
  @datapoints_to_alarm = nil
49
51
  @extended_statistic = nil
50
52
  @evaluate_low_sample_count_percentile = nil
@@ -394,6 +396,34 @@ module CfnGuardian
394
396
  end
395
397
  end
396
398
 
399
+ class KafkaClusterAlarm < BaseAlarm
400
+ def initialize(resource,broker)
401
+ super(resource)
402
+ @group = 'KafkaCluster'
403
+ @namespace = 'AWS/Kafka'
404
+ @dimensions = { 'Cluster Name': resource['Id'], 'Broker ID': broker }
405
+ @statistic = 'Average'
406
+ @evaluation_periods = 1
407
+ @datapoints_to_alarm = 1
408
+ @period = 300
409
+ @treat_missing_data = 'breaching'
410
+ end
411
+ end
412
+
413
+ class KafkaTopicAlarm < BaseAlarm
414
+ def initialize(resource,broker)
415
+ super(resource)
416
+ @group = 'KafkaTopic'
417
+ @namespace = 'AWS/Kafka'
418
+ @dimensions = { 'Cluster Name': resource['ClusterName'], 'Broker ID': broker, Topic: resource['Id'] }
419
+ @statistic = 'Average'
420
+ @evaluation_periods = 1
421
+ @datapoints_to_alarm = 1
422
+ @period = 300
423
+ @treat_missing_data = 'breaching'
424
+ end
425
+ end
426
+
397
427
  class LambdaAlarm < BaseAlarm
398
428
  def initialize(resource)
399
429
  super(resource)
@@ -9,7 +9,6 @@ module CfnGuardian::Resource
9
9
  alarm.statistic = 'Minimum'
10
10
  alarm.threshold = 2
11
11
  alarm.evaluation_periods = 1
12
- alarm.comparison_operator = 'LessThanThreshold'
13
12
  @alarms.push(alarm)
14
13
 
15
14
  alarm = CfnGuardian::Models::ApplicationTargetGroupAlarm.new(@resource)
@@ -0,0 +1,74 @@
1
+ module CfnGuardian::Resource
2
+ class KafkaCluster < Base
3
+
4
+ def initialize(resource, override_group = nil)
5
+ super(resource, override_group)
6
+ @brokers_list = resource['Brokers']
7
+ end
8
+
9
+ def default_alarms
10
+ @brokers_list.each do |broker|
11
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
12
+ alarm.name = "Broker#{broker}-CPUUserCritical"
13
+ alarm.metric_name = 'CpuUser'
14
+ alarm.threshold = 80
15
+ @alarms.push(alarm)
16
+
17
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
18
+ alarm.name = "Broker#{broker}-CPUUserWarning"
19
+ alarm.metric_name = 'CpuUser'
20
+ alarm.threshold = 50
21
+ alarm.alarm_action = 'Warning'
22
+ @alarms.push(alarm)
23
+
24
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
25
+ alarm.name = "Broker#{broker}-KafkaDataLogsDiskUsedCritical"
26
+ alarm.metric_name = 'KafkaDataLogsDiskUsed'
27
+ alarm.threshold = 85
28
+ @alarms.push(alarm)
29
+
30
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
31
+ alarm.name = "Broker#{broker}-KafkaDataLogsDiskUsedWarning"
32
+ alarm.metric_name = 'KafkaDataLogsDiskUsed'
33
+ alarm.threshold = 70
34
+ alarm.alarm_action = 'Warning'
35
+ @alarms.push(alarm)
36
+
37
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
38
+ alarm.name = "Broker#{broker}-BurstBalance"
39
+ alarm.metric_name = 'BurstBalance'
40
+ alarm.threshold = 1
41
+ alarm.comparison_operator = 'LessThanThreshold'
42
+ @alarms.push(alarm)
43
+
44
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
45
+ alarm.name = "Broker#{broker}-MemoryFreeCritical"
46
+ alarm.metric_name = 'MemoryFree'
47
+ alarm.threshold = 10
48
+ alarm.comparison_operator = 'LessThanThreshold'
49
+ @alarms.push(alarm)
50
+
51
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
52
+ alarm.name = "Broker#{broker}-MemoryFreeWarning"
53
+ alarm.metric_name = 'MemoryFree'
54
+ alarm.threshold = 50
55
+ alarm.alarm_action = 'Warning'
56
+ alarm.comparison_operator = 'LessThanThreshold'
57
+ @alarms.push(alarm)
58
+
59
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
60
+ alarm.name = "Broker#{broker}-NetworkRxErrorsCritical"
61
+ alarm.metric_name = 'NetworkRxErrors'
62
+ alarm.threshold = 10
63
+ @alarms.push(alarm)
64
+
65
+ alarm = CfnGuardian::Models::KafkaClusterAlarm.new(@resource,broker)
66
+ alarm.name = "Broker#{broker}-NetworkRxErrorsWarning"
67
+ alarm.metric_name = 'NetworkRxErrors'
68
+ alarm.threshold = 5
69
+ alarm.alarm_action = 'Warning'
70
+ @alarms.push(alarm)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,20 @@
1
+ module CfnGuardian::Resource
2
+ class KafkaTopic < Base
3
+
4
+ def initialize(resource, override_group = nil)
5
+ super(resource, override_group)
6
+ @brokers_list = resource['Brokers']
7
+ end
8
+
9
+ def default_alarms
10
+ @brokers_list.each do |broker|
11
+ alarm = CfnGuardian::Models::KafkaTopicAlarm.new(@resource,broker)
12
+ alarm.name = "Broker#{broker}-MessagesInPerSec"
13
+ alarm.metric_name = 'MessagesInPerSec'
14
+ alarm.threshold = 5
15
+ alarm.comparison_operator = 'LessThanThreshold'
16
+ @alarms.push(alarm)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -48,7 +48,7 @@ module CfnGuardian
48
48
  MetricName alarm.metric_name
49
49
  Namespace alarm.namespace
50
50
  AlarmActions actions
51
- OKActions actions
51
+ OKActions actions unless alarm.ok_action_disabled
52
52
  TreatMissingData alarm.treat_missing_data unless alarm.treat_missing_data.nil?
53
53
  DatapointsToAlarm alarm.datapoints_to_alarm unless alarm.datapoints_to_alarm.nil?
54
54
  ExtendedStatistic alarm.extended_statistic unless alarm.extended_statistic.nil?
@@ -63,7 +63,7 @@ module CfnGuardian
63
63
  end
64
64
 
65
65
  def get_tags_to_delete(current_tags, new_tags)
66
- return current_tags.select {|tag| !new_tags.has_key?(tag.key)}.map {|tag| tag.key}
66
+ return current_tags.select {|tag| !new_tags.has_key?(tag.key) && !tag.key.start_with?('aws:') }.map { |tag| tag.key }
67
67
  end
68
68
 
69
69
  def tags_changed?(current_tags, new_tags)
@@ -1,4 +1,4 @@
1
1
  module CfnGuardian
2
- VERSION = "0.11.10"
2
+ VERSION = "0.11.12"
3
3
  CHANGE_SET_VERSION = VERSION.gsub('.', '-').freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn-guardian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.10
4
+ version: 0.11.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guslington
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-23 00:00:00.000000000 Z
11
+ date: 2025-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -228,16 +228,16 @@ dependencies:
228
228
  name: rexml
229
229
  requirement: !ruby/object:Gem::Requirement
230
230
  requirements:
231
- - - ">="
231
+ - - '='
232
232
  - !ruby/object:Gem::Version
233
- version: '0'
233
+ version: 3.3.0
234
234
  type: :runtime
235
235
  prerelease: false
236
236
  version_requirements: !ruby/object:Gem::Requirement
237
237
  requirements:
238
- - - ">="
238
+ - - '='
239
239
  - !ruby/object:Gem::Version
240
- version: '0'
240
+ version: 3.3.0
241
241
  - !ruby/object:Gem::Dependency
242
242
  name: bundler
243
243
  requirement: !ruby/object:Gem::Requirement
@@ -357,6 +357,8 @@ files:
357
357
  - lib/cfnguardian/resources/internal_port.rb
358
358
  - lib/cfnguardian/resources/internal_sftp.rb
359
359
  - lib/cfnguardian/resources/jenkins.rb
360
+ - lib/cfnguardian/resources/kafka_cluster.rb
361
+ - lib/cfnguardian/resources/kafka_topic.rb
360
362
  - lib/cfnguardian/resources/lambda.rb
361
363
  - lib/cfnguardian/resources/log_group.rb
362
364
  - lib/cfnguardian/resources/network_targetgroup.rb
@@ -388,7 +390,7 @@ metadata:
388
390
  homepage_uri: https://github.com/base2Services/cfn-guardian
389
391
  source_code_uri: https://github.com/base2Services/cfn-guardian
390
392
  changelog_uri: https://github.com/base2Services/cfn-guardian
391
- post_install_message:
393
+ post_install_message:
392
394
  rdoc_options: []
393
395
  require_paths:
394
396
  - lib
@@ -404,7 +406,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
404
406
  version: '0'
405
407
  requirements: []
406
408
  rubygems_version: 3.1.6
407
- signing_key:
409
+ signing_key:
408
410
  specification_version: 4
409
411
  summary: Manages AWS cloudwatch alarms with default templates using cloudformation
410
412
  test_files: []