uc3-dmp-event-bridge 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 05e37209c45c2d372a5ef9259d16ec0c4e20f9c2a968d0311e34433b260952dc
4
+ data.tar.gz: c1499396710532b8a70ae7ad45bf64a5e63c50106c30637a6d69c373196b0e5e
5
+ SHA512:
6
+ metadata.gz: 5da1a4dfe6f43853d028f71111332eca6887bb43d0d7051deca8398cfc3e407648b4cc7c06bd2b1922380def8d78ef0a040f5bf2e1a1e8ee8b81414b1b133545
7
+ data.tar.gz: d675d6c4881c2188dd38b810af50e36c400362a585f6fdab4de2709cb9446527b8876e80815e3fac0094960df578174faf4a053cc9cf029f2dce4fd089afb46c
data/README.md ADDED
File without changes
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uc3DmpEventBridge
4
+ class PublisherError < StandardError; end
5
+
6
+ # CLass to manage publication of messages on an EventBridge's EventBus
7
+ class Publisher
8
+ SOURCE = 'Uc3DmpEventBridge::Publisher'
9
+
10
+ DEFAULT_EVENT_TYPE = 'DMP change'
11
+
12
+ MSG_BUS_ERROR = 'EventBus Error - %{msg} - %{trace}'
13
+ MSG_INVALID_KEY = 'Invalid message specified. Expecting Hash containing at least a `PK` and `SK`'
14
+ MSG_MISSING_BUS = 'No EventBus defined! Looking for `ENV[\'EVENT_BUS_NAME\']`'
15
+ MSG_MISSING_DOMAIN = 'No domain name defined! Looking for `ENV[\'DOMAIN\']`'
16
+
17
+ attr_accessor :client, :bus, :domain
18
+
19
+ def initialize(**_args)
20
+ @bus = ENV.fetch('EVENT_BUS_NAME', nil)
21
+ @domain = ENV.fetch('DOMAIN', nil)
22
+ raise PublisherError, MSG_MISSING_BUS if @bus.nil?
23
+ raise PublisherError, MSG_MISSING_DOMAIN if @domain.nil?
24
+
25
+ @client = Aws::EventBridge::Client.new(region: ENV.fetch('AWS_REGION', 'us-west-2'))
26
+ end
27
+
28
+ # Publish an event to the EventBus so that other Lambdas can do their thing
29
+ # rubocop:disable Metrics/AbcSize
30
+ def publish(source:, dmp:, event_type: DEFAULT_EVENT_TYPE, debug: false)
31
+ source = "#{source} -> #{SOURCE}.publish"
32
+
33
+ message = {
34
+ entries: [{
35
+ time: Time.now,
36
+ source: "#{ENV.fetch('DOMAIN', nil)}:lambda:event_publisher",
37
+ detail_type: event_type.to_s,
38
+ detail: _generate_detail(dmp: dmp).to_json,
39
+ event_bus_name: ENV.fetch('EVENT_BUS_NAME', nil)
40
+ }]
41
+ }
42
+ puts "#{SOURCE}.publish - Publishing event -> details: #{message}") if debug
43
+ resp = client.put_events(message)
44
+ return true unless resp.failed_entry_count.nil? || resp.failed_entry_count.positive?
45
+
46
+ # The EventBridge returned errors, so log the error
47
+ raise PublisherError, _generate_failure(source: source, response: resp, payload: payload)
48
+ rescue Aws::Errors::ServiceError => e
49
+ puts "#{SOURCE} - #{MSG_BUS_ERROR % { msg: e.message, trace: e.backtrace }}"
50
+ raise PublisherError, MSG_BUS_ERROR % { msg: e.message }
51
+ end
52
+ # rubocop:enable Metrics/AbcSize
53
+
54
+ private
55
+
56
+ # Only post the bits of the DMP that are required for the message to cut down on size
57
+ def _generate_detail(dmp:)
58
+ {
59
+ PK: dmp['PK'],
60
+ SK: dmp['SK'],
61
+ dmphub_provenance_id: dmp.fetch('dmphub_provenance_id', nil),
62
+ dmproadmap_links: dmp.fetch('dmproadmap_links', {}),
63
+ dmphub_updater_is_provenance: dmp.fetch('dmphub_updater_is_provenance', false)
64
+ }
65
+ end
66
+
67
+ # If the EventBus returns an error log everything
68
+ def _generate_failure(source:, response:, payload:)
69
+ {
70
+ source: source,
71
+ message: 'Failed to post message to EventBridge!',
72
+ details: {
73
+ event_bus_name: ENV.fetch('EVENT_BUS_NAME', nil),
74
+ event_id: response.data.entries[0].event_id,
75
+ error_code: response.data.entries[0].error_code,
76
+ error_message: response.data.entries[0].error_message,
77
+ detail: payload
78
+ }
79
+ }
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Uc3DmpEventBridge
4
+ VERSION = '0.0.1'
5
+ end
@@ -0,0 +1,11 @@
1
+ # rubocop:disable Naming/FileName
2
+ # frozen_string_literal: true
3
+
4
+ require 'aws-sdk-eventbridge'
5
+
6
+ require 'uc3-dmp-event-bridge/publisher'
7
+
8
+ # DynamoDB Table helpers for DMPTool
9
+ module Uc3DmpEventBridge
10
+ end
11
+ # rubocop:enable Naming/FileName
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uc3-dmp-event-bridge
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Brian Riley
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-06-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: logger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aws-sdk-eventbridge
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.44'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.44'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 11.1.3
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 11.1.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 3.9.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 3.9.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 1.50.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 1.50.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.20.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.20.0
111
+ description: Helpers for Event Bridge messaging
112
+ email:
113
+ - brian.riley@ucop.edu
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - README.md
119
+ - lib/uc3-dmp-event-bridge.rb
120
+ - lib/uc3-dmp-event-bridge/publisher.rb
121
+ - lib/uc3-dmp-event-bridge/version.rb
122
+ homepage: https://github.com/CDLUC3/dmp-hub-cfn/blob/main/src/sam/gems/uc3-dmp-event-bridge
123
+ licenses:
124
+ - MIT
125
+ metadata:
126
+ rubygems_mfa_required: 'false'
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '2.7'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubygems_version: 3.1.6
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: DMPTool gem that provides support for Event Bridge
146
+ test_files: []