huginn_s3_file_agent 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
+ SHA1:
3
+ metadata.gz: 503b9d14836803e3313021cfd8bbca9f536f5a7e
4
+ data.tar.gz: 78b971b20a571ff35ab8ee9c069d804790c32cfb
5
+ SHA512:
6
+ metadata.gz: 44b0033da7ba3d086999b9bfdd3d04a5f66016f802603e33c62229d3b99a45a323c6ca0157ce95c92248373c223e92c2e1292a2827d9fc259cf92fae08ed61d3
7
+ data.tar.gz: d1ded59b85ae5ab7f0dac6a10fe58ca054666d8b581d332f265315cfd9104bb230e0a384adc32c389aee3af9e9906b1c9666ed9a0169fdc69ca0555957b18c43
@@ -0,0 +1,99 @@
1
+ module Agents
2
+ class S3FileAgent < Agent
3
+ include FormConfigurable
4
+
5
+ cannot_be_scheduled!
6
+
7
+ description <<-MD
8
+ Uploading files to S3.
9
+ MD
10
+
11
+ def default_options
12
+ {
13
+ 'access_key_id': '',
14
+ 'access_key_secret': '',
15
+ 'bucket': '',
16
+ 'local_path': '',
17
+ 'remote_path': '',
18
+ 'acl': 'Public'
19
+ }
20
+ end
21
+
22
+ form_configurable :access_key_id, roles: :validatable
23
+ form_configurable :access_key_secret, roles: :validatable
24
+ form_configurable :bucket, roles: :completable
25
+ form_configurable :local_path
26
+ form_configurable :remote_path
27
+ form_configurable :acl, type: :array, values: ['Public', 'Private']
28
+ form_configurable :region, type: :array, values: %w(us-east-1 us-west-1 us-west-2 eu-west-1 eu-central-1 ap-southeast-1 ap-southeast-2 ap-northeast-1 ap-northeast-2 sa-east-1)
29
+
30
+ def validate_options
31
+ errors.add(:base, '\'local_path\' needs to be present') if options['local_path'].blank?
32
+ errors.add(:base, '\'remote_path\' needs to be present') if options['remote_path'].blank?
33
+ errors.add(:base, '\'region\' needs to be present') if options['region'].blank?
34
+ errors.add(:base, '\'acl\' needs to be present') if options['acl'].blank?
35
+ end
36
+
37
+ def validate_access_key_id
38
+ !!buckets
39
+ end
40
+
41
+ def validate_access_key_secret
42
+ !!buckets
43
+ end
44
+
45
+ def complete_bucket
46
+ (buckets || []).collect { |room| {text: room.name, id: room.name} }
47
+ end
48
+
49
+ def working?
50
+ received_event_without_error?
51
+ end
52
+
53
+ def receive(incoming_events)
54
+ log('S3 File Agent - Received event')
55
+
56
+ incoming_events.each do |event|
57
+ interpolate_with(event) do
58
+ log("Uploading \"#{interpolated['local_path']}\" to \"#{interpolated['bucket']}##{interpolated['remote_path']}\"")
59
+
60
+ event_data = interpolated(event)
61
+
62
+ safely do
63
+ client.put_object(
64
+ acl: 'private',
65
+ bucket: interpolated['bucket'],
66
+ key: event_data['remote_path'],
67
+ body: File.read(event_data['local_path'])
68
+ )
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ def client
75
+ @client ||= Aws::S3::Client.new(
76
+ credentials: aws_credentials,
77
+ region: interpolated['region']
78
+ )
79
+ end
80
+
81
+ def aws_credentials
82
+ Aws::Credentials.new(interpolated['access_key_id'], interpolated['access_key_secret'])
83
+ end
84
+
85
+ def safely
86
+ yield
87
+ rescue Aws::S3::Errors::AccessDenied => e
88
+ error("Could not access '#{interpolated['bucket']}' #{e.class} #{e.message}")
89
+ rescue Aws::S3::Errors::ServiceError =>e
90
+ error("#{e.class}: #{e.message}")
91
+ end
92
+
93
+ def buckets(log = false)
94
+ @buckets ||= client.list_buckets.buckets
95
+ rescue Aws::S3::Errors::ServiceError => e
96
+ false
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,4 @@
1
+ require 'huginn_agent'
2
+
3
+ #HuginnAgent.load 'huginn_s3_file_agent/concerns/my_agent_concern'
4
+ HuginnAgent.register 'huginn_s3_file_agent/s3_file_agent'
@@ -0,0 +1,11 @@
1
+ require 'rails_helper'
2
+ require 'huginn_agent/spec_helper'
3
+
4
+ describe Agents::S3FileAgent do
5
+ before(:each) do
6
+ @valid_options = Agents::S3FileAgent.new.default_options
7
+ @checker = Agents::S3FileAgent.new(name: 'S3FileAgent', options: @valid_options)
8
+ @checker.user = users(:bob)
9
+ @checker.save!
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: huginn_s3_file_agent
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Samuel Garneau
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-11-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: huginn_agent
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Write a longer description or delete this line.
56
+ email:
57
+ - sam@garno.me
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/huginn_s3_file_agent.rb
63
+ - lib/huginn_s3_file_agent/s3_file_agent.rb
64
+ - spec/s3_file_agent_spec.rb
65
+ homepage:
66
+ licenses: []
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 2.5.1
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: Write a short summary, because Rubygems requires one.
88
+ test_files:
89
+ - spec/s3_file_agent_spec.rb