smart_proxy_host_reports 0.0.3 → 0.0.4

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: 31db56842815a4fb7e8993d34067184b5f5e4741e04deae9602fb35412f22908
4
- data.tar.gz: 88716c3d354cc8577e3e38b4da9943e2e03a7a64e4d46b9e3c722cb3f548ae12
3
+ metadata.gz: 420e319032a6847e1c551cb77ba7e973e3ebf2a06382cd20f5ff7ac69bea9845
4
+ data.tar.gz: 2a4a082c0c60b70362dcf6966aebf4cb10ca2e7133bfb29587319c5f35a74b82
5
5
  SHA512:
6
- metadata.gz: ce94b16ab66001a358f1f31fae1457a8f708f4adb69169cbc8c4fe05cb0c69fe639eb187478329eeb8765aabfcc5a9d1e6b13ea8c57c22367195256f690180eb
7
- data.tar.gz: 9602d2e30cd2e156724144cc09c163fe765f8add6502455dc1824a723d549dbbe0351061fd8aa8c1b45a58f611924cc072f35b1693161376f494b6b423e56781
6
+ metadata.gz: 23b7897c6ea66c90183cf31484b93bfb6b342e907ae5a3397c84055488e8c6ea8e41cefa16d0a9d275dee0e99fd075d83ce0bc48bf51a45b36038599e80e29bb
7
+ data.tar.gz: c61f0a3f6ec03f189ed5a54777324d1dd27b7bf8f57082faa57fedb2ad7c41a62e3ac6240938ef6f8b09e8f36430b2bcebe2649d1f791d5fca45a14ba97a57c1
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Smart Proxy Host Reports
1
+ Smart Proxy Host Reports
2
2
 
3
3
  Transforms configuration and security management reports into Foreman-friendly
4
4
  JSON and sends them to a Foreman instance. For more information about Foreman
@@ -29,7 +29,8 @@ Ansible collection path to the build directory:
29
29
  collection_path = /home/lzap/work/foreman-ansible-modules/build
30
30
  callback_whitelist = foreman
31
31
  [callback_foreman]
32
- url = http://localhost:8448/host_reports
32
+ report_type = proxy
33
+ proxy_url = http://localhost:8000/host_reports
33
34
  verify_certs = 0
34
35
  client_cert = /home/lzap/DummyX509/client-one.crt
35
36
  client_key = /home/lzap/DummyX509/client-one.key
@@ -48,7 +49,7 @@ For testing, there are several example data. Before importing them into Foreman,
48
49
  $ contrib/upload-fixture
49
50
  Usage:
50
51
  contrib/upload-fixture -h Display this help message
51
- contrib/upload-fixture -u URL Proxy URL (http://localhost:8448)
52
+ contrib/upload-fixture -u URL Proxy URL (http://localhost:8000)
52
53
  contrib/upload-fixture -f FILE Fixture to upload
53
54
  contrib/upload-fixture -a Upload all fixtures
54
55
 
@@ -119,10 +120,46 @@ puppet config set server $HOSTNAME
119
120
 
120
121
  You can manually trigger a puppet run by using `puppet agent -t`. You may need to look at `/var/log/puppetlabs/puppetserver/puppetserver.log` to see errors.
121
122
 
123
+ ## Status mapping
124
+
125
+ ### Puppet
126
+
127
+ * changed -> applied
128
+ * corrective_change -> applied
129
+ * failed -> failed
130
+ * failed_to_restart -> failed
131
+ * scheduled -> pending
132
+ * restarted -> other
133
+ * skipped -> other
134
+ * out_of_sync
135
+ * total
136
+
137
+ ### Ansible
138
+
139
+ * applied -> applied
140
+ * failed -> failed
141
+ * skipped -> other
142
+ * pending -> pending
143
+
122
144
  ## Contributing
123
145
 
124
146
  Fork and send a Pull Request. Thanks!
125
147
 
148
+ ### Unit tests
149
+
150
+ To run unit tests:
151
+
152
+ bundle exec rake test
153
+
154
+ There are few snapshot tests which compare input JSON/YAML with snapshot fixtures. When they fail, you are asked to delete those fixtures, re-run tests, review and push the changes into git:
155
+
156
+ ```
157
+ rm test/snapshots/*
158
+ bundle exec rake test
159
+ git diff
160
+ git commit
161
+ ```
162
+
126
163
  ## License
127
164
 
128
165
  GNU GPLv3, see LICENSE file for more information.
@@ -57,7 +57,7 @@ class AnsibleProcessor < Processor
57
57
  version: 1,
58
58
  host: @body["host"],
59
59
  reported_at: @body["reported_at"],
60
- status: 0,
60
+ statuses: process_statuses,
61
61
  proxy: @body["proxy"],
62
62
  body: @body,
63
63
  keywords: @body["keywords"],
@@ -132,4 +132,16 @@ class AnsibleProcessor < Processor
132
132
  ensure
133
133
  result["friendly_message"] = msg
134
134
  end
135
+
136
+ def process_statuses
137
+ {
138
+ "applied" => @body["status"]["applied"],
139
+ "failed" => @body["status"]["failed"],
140
+ "pending" => @body["status"]["pending"] || 0, # It's only present in check mode
141
+ "other" => @body["status"]["skipped"],
142
+ }
143
+ rescue StandardError => e
144
+ logger.error "Unable to process statuses", e
145
+ { "applied" => 0, "failed" => 0, "pending" => 0, "other" => 0 }
146
+ end
135
147
  end
@@ -12,7 +12,7 @@ module Proxy::HostReports
12
12
  end
13
13
 
14
14
  class Plugin < ::Proxy::Plugin
15
- plugin :host_reports, Proxy::HostReports::VERSION
15
+ plugin :reports, Proxy::HostReports::VERSION
16
16
 
17
17
  default_settings reported_proxy_hostname: "localhost",
18
18
  debug_payload: false,
@@ -32,18 +32,17 @@ class Processor
32
32
  @hostname_from_config ||= Proxy::HostReports::Plugin.settings.override_hostname
33
33
  end
34
34
 
35
- def build_report_root(format:, version:, host:, reported_at:, status:, proxy:, body:, keywords:)
35
+ def build_report_root(format:, version:, host:, reported_at:, statuses:, proxy:, body:, keywords:)
36
36
  {
37
37
  "host_report" => {
38
38
  "format" => format,
39
39
  "version" => version,
40
40
  "host" => host,
41
41
  "reported_at" => reported_at,
42
- "status" => status,
43
42
  "proxy" => proxy,
44
43
  "body" => @json_body ? body.to_json : body,
45
44
  "keywords" => keywords,
46
- },
45
+ }.merge(statuses),
47
46
  }
48
47
  # TODO add metric with total time
49
48
  end
@@ -86,7 +85,7 @@ class Processor
86
85
  ensure
87
86
  t2 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
88
87
  @telemetry ||= {}
89
- @telemetry[metric] = (t2 - t1) * 1000
88
+ @telemetry[metric.to_s] = (t2 - t1) * 1000
90
89
  end
91
90
 
92
91
  def telemetry_as_string
@@ -107,7 +107,7 @@ class PuppetProcessor < Processor
107
107
  version: 1,
108
108
  host: @body["host"],
109
109
  reported_at: @body["reported_at"],
110
- status: 0,
110
+ statuses: process_statuses,
111
111
  proxy: @body["proxy"],
112
112
  body: @body,
113
113
  keywords: @body["keywords"],
@@ -122,4 +122,19 @@ class PuppetProcessor < Processor
122
122
  end
123
123
  SpooledHttpClient.instance.spool(report_id, payload)
124
124
  end
125
+
126
+ private
127
+
128
+ def process_statuses
129
+ stats = @body["metrics"]["resources"]["values"].collect { |s| [s[0], s[2]] }.to_h
130
+ {
131
+ "applied" => stats["changed"] + stats["corrective_change"],
132
+ "failed" => stats["failed"] + stats["failed_to_restart"],
133
+ "pending" => stats["scheduled"],
134
+ "other" => stats["restarted"] + stats["skipped"] + stats["out_of_sync"],
135
+ }
136
+ rescue StandardError => e
137
+ logger.error "Unable to process statuses", e
138
+ { "applied" => 0, "failed" => 0, "pending" => 0, "other" => 0 }
139
+ end
125
140
  end
@@ -1,5 +1,5 @@
1
1
  module Proxy
2
2
  module HostReports
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_proxy_host_reports
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Zapletal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-15 00:00:00.000000000 Z
11
+ date: 2021-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -58,7 +58,7 @@ files:
58
58
  - lib/smart_proxy_host_reports/puppet_processor.rb
59
59
  - lib/smart_proxy_host_reports/spooled_http_client.rb
60
60
  - lib/smart_proxy_host_reports/version.rb
61
- - settings.d/host_reports.yml.example
61
+ - settings.d/reports.yml.example
62
62
  homepage: http://github.com/theforeman/smart_proxy_host_reports
63
63
  licenses:
64
64
  - GPL-3.0-or-later