uc3-dmp-event-bridge 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []