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 +7 -0
- data/README.md +0 -0
- data/lib/uc3-dmp-event-bridge/publisher.rb +82 -0
- data/lib/uc3-dmp-event-bridge/version.rb +5 -0
- data/lib/uc3-dmp-event-bridge.rb +11 -0
- metadata +146 -0
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
|
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: []
|