Bubbles
Daemonized file uploader that watch a folder and uploads any files files to AWS S3 or Local directory (e.g. mounted NAS volume). Designed for Raspberry pi zero
Notes:
- for AWS S3 upload we use AWS-SDK s3 put_object the single file upload should not exceed 5GB. I'm not planing to introduce S3 multipart uploads but Pull Requests are welcome.
Installation
Add this line to your application's Gemfile:
gem 'bubbles'And then execute:
$ bundle
Or install it yourself as:
$ gem install bubbles
Usage
The easy way
Gem by default looks into to two locations for configuration file. So
either create ~/.bubbles/config or /var/lib/bubbles/config.yml
note: make sure you have correct read access permission so that ruby can read that file
...with content similar to this:
s3_access_key_id: xxxxxxxxxxxxxxxxxxxx
s3_secret_access_key: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
s3_bucket: bucket_name
s3_region: eu-west-1
source_dir: /home/myuser/source_folder
processing_dir: /home/myuser/processing_folderNow all is left is to lunch bubbles with bubbles or bundle exec bubbles
note: files in
source_folderwill get removed after successful upload
More advanced config
source_dir: /var/myuser/source_folder # source from where to pick up files
processing_dir: /home/myuser/processing_folder
log_level: 0 # debug log level
log_path: /var/log/bubbles.log # default is STDOOT
sleep_interval: 1 # sleep between next command
num_of_files_to_schedule: 1 # how many files schedule for processing at the same time
uploaders:
- 'Bubbles::Uploaders::S3EnsureConnection' # this will check if s3 connection can be established
- 'Bubbles::Uploaders::S3' # by default only S3 uploader is used
- 'Bubbles::Uploaders::LocalDir'
s3_access_key_id: xxxxxxxxxxxxxxxxxxxx
s3_secret_access_key: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
s3_bucket: bucket_name
s3_region: eu-west-1
s3_path: foo_folder/bar_folder/car_folder # will upload to s3://bucket/foo_folder/bar_folder/car_folder
s3_acl: private # # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
local_dir_uploader_path: /mnt/network_smb_storage/
local_dir_metadata_file_path: /var/log/uploads_metadata.yamlLook into lib/bubbles/config.rb for more details.
Full Ruby way
You can create custom ruby file and you initialize custom
Bubbles::Config.new instance and set all the options you want there:
# ~/my_bubbles_runner.rb
require 'bubbles'
c = Bubbles::Config.new
c.log_level = 0
c.source_dir = /var/myuser/source_folder
c.processing_dir = /var/myuser/processing_folder
c.uploader_classes = [Bubbles::Uploaders::S3, Bubbles::Uploaders::LocalDir]
c.local_dir_uploader_path = /mnt/network_smb_storage
c.s3_region = 'eu-west-1'
c.s3_bucket = 'mybckt'
c.s3_access_key_id = 'xxxxxxxxxxx'
c.s3_secret_access_key = 'yyyyyyyyyyy'
# ...
command_queue = Bubbles::CommandQueue.new(config: c)
command_queue << Bubbles::DirWatcher.new(config: c, command_queue: command_queue)
loop do
command_queue.call_next
sleep c.sleep_interval
end..and execute:
ruby my_bubbles_runner.rb
# or
bundle exec ruby my_bubbles_runner.rbLook into lib/bubbles/config.rb for more details.
Development
After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/equivalent/bubbles.