fog-digitalocean 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.document +3 -0
- data/.gitignore +30 -0
- data/.irbrc +82 -0
- data/.rubocop.yml +20 -0
- data/.rubocop_todo.yml +606 -0
- data/.travis.yml +35 -0
- data/CHANGELOG.md +3 -0
- data/CONTRIBUTING.md +276 -0
- data/CONTRIBUTORS.md +898 -0
- data/Gemfile +5 -0
- data/LICENSE.md +20 -0
- data/README.md +130 -0
- data/RELEASE.md +40 -0
- data/Rakefile +12 -0
- data/benchs/each_provider.sh +6 -0
- data/benchs/each_service.sh +6 -0
- data/benchs/fog_vs.rb +106 -0
- data/benchs/load_times.rb +37 -0
- data/benchs/params.rb +43 -0
- data/benchs/parse_vs_push.rb +67 -0
- data/bin/fog +78 -0
- data/fog-digitalocean.gemspec +61 -0
- data/gemfiles/Gemfile-edge +14 -0
- data/lib/fog/digitalocean.rb +1 -0
- data/lib/fog/digitalocean/CHANGELOG.md +6 -0
- data/lib/fog/digitalocean/compute.rb +109 -0
- data/lib/fog/digitalocean/core.rb +9 -0
- data/lib/fog/digitalocean/examples/getting_started.md +123 -0
- data/lib/fog/digitalocean/models/compute/flavor.rb +17 -0
- data/lib/fog/digitalocean/models/compute/flavors.rb +21 -0
- data/lib/fog/digitalocean/models/compute/image.rb +25 -0
- data/lib/fog/digitalocean/models/compute/images.rb +42 -0
- data/lib/fog/digitalocean/models/compute/region.rb +13 -0
- data/lib/fog/digitalocean/models/compute/regions.rb +21 -0
- data/lib/fog/digitalocean/models/compute/server.rb +170 -0
- data/lib/fog/digitalocean/models/compute/servers.rb +43 -0
- data/lib/fog/digitalocean/models/compute/ssh_key.rb +31 -0
- data/lib/fog/digitalocean/models/compute/ssh_keys.rb +40 -0
- data/lib/fog/digitalocean/models/paging_collection.rb +42 -0
- data/lib/fog/digitalocean/requests/compute/change_kernel.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/convert_to_snapshot.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/create_server.rb +93 -0
- data/lib/fog/digitalocean/requests/compute/create_ssh_key.rb +49 -0
- data/lib/fog/digitalocean/requests/compute/delete_ssh_key.rb +32 -0
- data/lib/fog/digitalocean/requests/compute/destroy_server.rb +35 -0
- data/lib/fog/digitalocean/requests/compute/disable_backups.rb +45 -0
- data/lib/fog/digitalocean/requests/compute/enable_ipv6.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/enable_private_networking.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/get_droplet_action.rb +36 -0
- data/lib/fog/digitalocean/requests/compute/get_image_details.rb +42 -0
- data/lib/fog/digitalocean/requests/compute/get_server_details.rb +84 -0
- data/lib/fog/digitalocean/requests/compute/get_ssh_key.rb +34 -0
- data/lib/fog/digitalocean/requests/compute/list_droplet_actions.rb +38 -0
- data/lib/fog/digitalocean/requests/compute/list_flavors.rb +132 -0
- data/lib/fog/digitalocean/requests/compute/list_images.rb +51 -0
- data/lib/fog/digitalocean/requests/compute/list_regions.rb +95 -0
- data/lib/fog/digitalocean/requests/compute/list_servers.rb +33 -0
- data/lib/fog/digitalocean/requests/compute/list_ssh_keys.rb +41 -0
- data/lib/fog/digitalocean/requests/compute/password_reset.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/power_cycle.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/power_off.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/power_on.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/reboot_server.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/rebuild.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/rename.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/resize.rb +48 -0
- data/lib/fog/digitalocean/requests/compute/restore.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/shutdown.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/snapshot.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/transfer_image.rb +44 -0
- data/lib/fog/digitalocean/requests/compute/update_ssh_key.rb +46 -0
- data/lib/fog/digitalocean/requests/compute/upgrade.rb +44 -0
- data/lib/fog/digitalocean/service.rb +51 -0
- data/lib/fog/digitalocean/version.rb +5 -0
- data/spec/fog/account_spec.rb +14 -0
- data/spec/fog/billing_spec.rb +14 -0
- data/spec/fog/bin/atmos_spec.rb +33 -0
- data/spec/fog/bin/aws_spec.rb +98 -0
- data/spec/fog/bin/baremetalcloud_spec.rb +33 -0
- data/spec/fog/bin/bluebox_spec.rb +55 -0
- data/spec/fog/bin/brightbox_spec.rb +30 -0
- data/spec/fog/bin/clodo_spec.rb +9 -0
- data/spec/fog/bin/cloudsigma_spec.rb +9 -0
- data/spec/fog/bin/cloudstack_spec.rb +9 -0
- data/spec/fog/bin/digitalocean_spec.rb +9 -0
- data/spec/fog/bin/dnsimple_spec.rb +9 -0
- data/spec/fog/bin/dnsmadeeasy_spec.rb +9 -0
- data/spec/fog/bin/dreamhost_spec.rb +9 -0
- data/spec/fog/bin/dynect_spec.rb +9 -0
- data/spec/fog/bin/ecloud_spec.rb +10 -0
- data/spec/fog/bin/fogdocker_spec.rb +10 -0
- data/spec/fog/bin/glesys_spec.rb +10 -0
- data/spec/fog/bin/gogrid_spec.rb +10 -0
- data/spec/fog/bin/google_spec.rb +10 -0
- data/spec/fog/bin/ibm_spec.rb +10 -0
- data/spec/fog/bin/internetarchive_spec.rb +10 -0
- data/spec/fog/bin/joyent_spec.rb +10 -0
- data/spec/fog/bin/linode_spec.rb +10 -0
- data/spec/fog/bin/local_spec.rb +10 -0
- data/spec/fog/bin/ninefold_spec.rb +10 -0
- data/spec/fog/bin/opennebula_spec.rb +10 -0
- data/spec/fog/bin/openstack_spec.rb +10 -0
- data/spec/fog/bin/openvz_spec.rb +10 -0
- data/spec/fog/bin/ovirt_spec.rb +10 -0
- data/spec/fog/bin/powerdns_spec.rb +9 -0
- data/spec/fog/bin/profitbricks_spec.rb +10 -0
- data/spec/fog/bin/rackspace_spec.rb +10 -0
- data/spec/fog/bin/rage4_spec.rb +10 -0
- data/spec/fog/bin/riakcs_spec.rb +10 -0
- data/spec/fog/bin/sakuracloud_spec.rb +10 -0
- data/spec/fog/bin/serverlove_spec.rb +10 -0
- data/spec/fog/bin/softlayer_spec.rb +10 -0
- data/spec/fog/bin/stormondemand_spec.rb +10 -0
- data/spec/fog/bin/vcloud_spec.rb +10 -0
- data/spec/fog/bin/vclouddirector_spec.rb +10 -0
- data/spec/fog/bin/vmfusion_spec.rb +10 -0
- data/spec/fog/bin/voxel_spec.rb +10 -0
- data/spec/fog/bin/vsphere_spec.rb +10 -0
- data/spec/fog/bin/xenserver_spec.rb +10 -0
- data/spec/fog/bin/zerigo_spec.rb +10 -0
- data/spec/fog/bin_spec.rb +161 -0
- data/spec/fog/cdn_spec.rb +14 -0
- data/spec/fog/compute_spec.rb +19 -0
- data/spec/fog/dns_spec.rb +19 -0
- data/spec/fog/identity_spec.rb +14 -0
- data/spec/fog/image_spec.rb +14 -0
- data/spec/fog/metering_spec.rb +14 -0
- data/spec/fog/monitoring_spec.rb +14 -0
- data/spec/fog/network_spec.rb +14 -0
- data/spec/fog/orchestration_spec.rb +14 -0
- data/spec/fog/storage_spec.rb +14 -0
- data/spec/fog/support_spec.rb +14 -0
- data/spec/fog/volume_spec.rb +14 -0
- data/spec/fog/vpn_spec.rb +14 -0
- data/spec/fog/xml/connection_spec.rb +33 -0
- data/spec/helpers/bin.rb +34 -0
- data/spec/spec_helper.rb +18 -0
- data/tests/digitalocean/helper.rb +56 -0
- data/tests/digitalocean/requests/compute/list_flavors_tests.rb +25 -0
- data/tests/digitalocean/requests/compute/list_images_tests.rb +25 -0
- data/tests/digitalocean/requests/compute/list_regions_tests.rb +21 -0
- data/tests/digitalocean/requests/compute/server_tests.rb +77 -0
- data/tests/digitalocean/requests/compute_v2/list_ssh_keys_tests.rb +20 -0
- data/tests/helper.rb +25 -0
- data/tests/helpers/format_helper.rb +100 -0
- data/tests/helpers/mock_helper.rb +14 -0
- data/tests/helpers/succeeds_helper.rb +10 -0
- data/tests/lorem.txt +1 -0
- data/tests/watchr.rb +22 -0
- metadata +428 -0
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2009-2015 [CONTRIBUTORS.md](https://github.com/fog/fog/blob/master/CONTRIBUTORS.md)
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
# Fog::DigitalOcean
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/fog-digitalocean.svg)](http://badge.fury.io/rb/fog-digitalocean) [![Build Status](https://travis-ci.org/fog/fog-digitalocean.svg?branch=master)](https://travis-ci.org/fog/fog-digitalocean) [![Dependency Status](https://gemnasium.com/fog/fog-digitalocean.svg)](https://gemnasium.com/fog/fog-digitalocean) [![Coverage Status](https://coveralls.io/repos/github/fog/fog-digitalocean/badge.svg?branch=master)](https://coveralls.io/github/fog/fog-digitalocean?branch=master) [![Code Climate](https://codeclimate.com/github/fog/fog-digitalocean/badges/gpa.svg)](https://codeclimate.com/github/fog/fog-digitalocean) [![Join the chat at https://gitter.im/fog/fog-digitalocean](https://badges.gitter.im/fog/fog-digitalocean.svg)](https://gitter.im/fog/fog-digitalocean?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
|
+
|
5
|
+
This is the plugin Gem to talk to [Digitalocean](http://digitalocean.org) clouds via fog.
|
6
|
+
|
7
|
+
The main maintainers for the Digitalocean sections are @jjasghar and @h0lyalg0rithm. Please send CC them on pull requests.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'fog-digitalocean'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install fog-digitalocean
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
### Initial Setup
|
28
|
+
|
29
|
+
|
30
|
+
# Getting started: the compute service
|
31
|
+
|
32
|
+
You'll need a DigitalOcean account and an API token to use this provider.
|
33
|
+
|
34
|
+
Get one from https://cloud.digitalocean.com/settings/tokens/new
|
35
|
+
|
36
|
+
Write down the Access Token.
|
37
|
+
|
38
|
+
## Connecting, retrieving and managing server objects
|
39
|
+
|
40
|
+
Before we start, I guess it will be useful to the reader to know
|
41
|
+
that Fog servers are 'droplets' in DigitalOcean's parlance.
|
42
|
+
'Server' is the Fog way to name VMs, and we have
|
43
|
+
respected that in the DigitalOcean's Fog provider.
|
44
|
+
|
45
|
+
First, create a connection to the host:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
require 'fog'
|
49
|
+
|
50
|
+
docean = Fog::Compute.new({
|
51
|
+
:provider => 'DigitalOcean',
|
52
|
+
:version => 'V2',
|
53
|
+
:digitalocean_token => 'poiuweoruwoeiuroiwuer', # your Access Token here
|
54
|
+
})
|
55
|
+
```
|
56
|
+
|
57
|
+
## SSH Key Management
|
58
|
+
|
59
|
+
Access to DigitalOcean servers can be managed with SSH keys. These can be assigned to servers at creation time so you can access them without having to use a password.
|
60
|
+
|
61
|
+
Creating a key:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
docean.ssh_keys.create(
|
65
|
+
:name => 'Default SSH Key',
|
66
|
+
:ssh_pub_key => File.read('~/.ssh/id_rsa.pub'))
|
67
|
+
)
|
68
|
+
```
|
69
|
+
|
70
|
+
Listing all keys:
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
docean.ssh_keys.each do | key |
|
74
|
+
puts key.name
|
75
|
+
puts key.public_key
|
76
|
+
puts key.id
|
77
|
+
end
|
78
|
+
```
|
79
|
+
|
80
|
+
Destroying a key:
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
docean.ssh_keys.destroy(:id => '27100')
|
84
|
+
```
|
85
|
+
## Listing servers
|
86
|
+
|
87
|
+
Listing servers and attributes:
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
docean.servers.each do |server|
|
91
|
+
# remember, servers are droplets
|
92
|
+
puts server.id
|
93
|
+
puts server.name
|
94
|
+
puts server.status
|
95
|
+
puts (server.image['slug'] || server.image['name']) # slug is only for public images, private images use name
|
96
|
+
puts server.size['slug']
|
97
|
+
puts server.region['slug']
|
98
|
+
end
|
99
|
+
```
|
100
|
+
|
101
|
+
## Server creation and life-cycle management
|
102
|
+
|
103
|
+
Creating a new server (droplet):
|
104
|
+
|
105
|
+
```ruby
|
106
|
+
server = docean.servers.create :name => 'foobar',
|
107
|
+
# use the last image listed
|
108
|
+
:image => docean.images.last.id,
|
109
|
+
# use the first flavor (aka size) listed
|
110
|
+
:size => docean.flavors.first.slug,
|
111
|
+
# use the first region listed
|
112
|
+
:region => docean.regions.first.slug
|
113
|
+
```
|
114
|
+
|
115
|
+
The server is automatically started after that.
|
116
|
+
|
117
|
+
## Development
|
118
|
+
|
119
|
+
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.
|
120
|
+
|
121
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
122
|
+
|
123
|
+
## Contributing
|
124
|
+
|
125
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/fog-digitalocean. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
126
|
+
|
127
|
+
|
128
|
+
## License
|
129
|
+
|
130
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/RELEASE.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Release process
|
2
|
+
|
3
|
+
This is fog's current release process, documented so people know what is
|
4
|
+
currently done.
|
5
|
+
|
6
|
+
## Versioning
|
7
|
+
|
8
|
+
fog uses semantic versioning (http://semver.org/)
|
9
|
+
|
10
|
+
## When we release
|
11
|
+
|
12
|
+
Releases occur monthly and are manually handled by fog's Benevolent
|
13
|
+
Dictator Wes (@geemus).
|
14
|
+
|
15
|
+
To request a new release please raise an issue.
|
16
|
+
|
17
|
+
## Prepare the release
|
18
|
+
|
19
|
+
* Ensure the code is passing on the CI server [![Build Status](https://secure.travis-ci.org/fog/fog.png?branch=master)](http://travis-ci.org/fog/fog)
|
20
|
+
* Ensure the code is passing for live tests (Requires Credentials for all
|
21
|
+
services)
|
22
|
+
* Ensure working on **master**
|
23
|
+
* Update the version number (`lib/fog/version.rb`)
|
24
|
+
* Run `rake changelog` to update `CHANGELOG.md`
|
25
|
+
* Run `rake release` to prepare the release which does:
|
26
|
+
* Prepares the release (`rake release:prepare`)
|
27
|
+
* Builds the gem
|
28
|
+
* Tags the commit
|
29
|
+
* Creates commits for version
|
30
|
+
* Publishes the release (`rake release:publish`)
|
31
|
+
* Pushes commit and tag to Github (Requires Credentials)
|
32
|
+
* Pushes gem to Rubygems (Requires Credentials)
|
33
|
+
* Run `rake github_release` to add release to [github release feed](https://github.com/fog/fog/releases.atom) (Requires Credentials)
|
34
|
+
|
35
|
+
## Announce the release
|
36
|
+
|
37
|
+
Once the release is prepared and uploaded it needs to be announced.
|
38
|
+
|
39
|
+
* Send an email to https://groups.google.com/forum/?fromgroups#!forum/ruby-fog
|
40
|
+
* Tweet as @fog on Twitter (Requires Credentials)
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rubocop/rake_task'
|
3
|
+
|
4
|
+
RuboCop::RakeTask.new
|
5
|
+
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Run fog-digitalocean unit tests'
|
9
|
+
mock = ENV['FOG_MOCK'] || 'true'
|
10
|
+
task :test do
|
11
|
+
sh("export FOG_MOCK=#{mock} && bundle exec shindont")
|
12
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# for each provider
|
4
|
+
grep -lr "< Fog::Service$" lib/fog | xargs -L1 dirname | sort | uniq | sed -e 's/lib\///' |
|
5
|
+
# trigger rubygem cost then benchmark the load time
|
6
|
+
xargs -I{} ruby -Ilib -rbenchmark -e 'Gem::Specification._all; puts "{}: #{Benchmark.realtime{require "{}" }}"'
|
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# for each service
|
4
|
+
grep -lr "< Fog::Service$" lib/fog | sed -e 's/lib\///' -e 's/.rb$//' |
|
5
|
+
# trigger rubygem cost then benchmark the load time
|
6
|
+
xargs -I{} ruby -Ilib -rbenchmark -e 'Gem::Specification._all; puts "{}: #{Benchmark.realtime{ require "{}" }}"'
|
data/benchs/fog_vs.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'aws/s3'
|
3
|
+
require 'benchmark'
|
4
|
+
require 'right_aws'
|
5
|
+
|
6
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'fog')
|
7
|
+
|
8
|
+
data = File.open(File.expand_path('~/.fog')).read
|
9
|
+
config = YAML.load(data)[:default]
|
10
|
+
fog = Fog::AWS::S3.new(
|
11
|
+
:aws_access_key_id => config[:aws_access_key_id],
|
12
|
+
:aws_secret_access_key => config[:aws_secret_access_key]
|
13
|
+
)
|
14
|
+
raws = RightAws::S3Interface.new(
|
15
|
+
config[:aws_access_key_id],
|
16
|
+
config[:aws_secret_access_key]
|
17
|
+
)
|
18
|
+
raws.logger.level = 3 # ERROR
|
19
|
+
awss3 = AWS::S3::Base.establish_connection!(
|
20
|
+
:access_key_id => config[:aws_access_key_id],
|
21
|
+
:secret_access_key => config[:aws_secret_access_key],
|
22
|
+
:persistent => true
|
23
|
+
)
|
24
|
+
|
25
|
+
TIMES = 10
|
26
|
+
|
27
|
+
Benchmark.bmbm(25) do |bench|
|
28
|
+
bench.report('fog.put_bucket') do
|
29
|
+
TIMES.times do |x|
|
30
|
+
fog.put_bucket("fogbench#{x}")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
bench.report('raws.create_bucket') do
|
34
|
+
TIMES.times do |x|
|
35
|
+
raws.create_bucket("rawsbench#{x}")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
bench.report('awss3::Bucket.create') do
|
39
|
+
TIMES.times do |x|
|
40
|
+
AWS::S3::Bucket.create("awss3bench#{x}")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
bench.report('fog.put_object') do
|
45
|
+
TIMES.times do |x|
|
46
|
+
TIMES.times do |y|
|
47
|
+
file = File.open(File.dirname(__FILE__) + '/../spec/lorem.txt', 'r')
|
48
|
+
fog.put_object("fogbench#{x}", "lorem_#{y}", file)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
bench.report('raws.put') do
|
53
|
+
TIMES.times do |x|
|
54
|
+
TIMES.times do |y|
|
55
|
+
file = File.open(File.dirname(__FILE__) + '/../spec/lorem.txt', 'r')
|
56
|
+
raws.put("rawsbench#{x}", "lorem_#{y}", file)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
bench.report('awss3::S3Object.create') do
|
61
|
+
TIMES.times do |x|
|
62
|
+
TIMES.times do |y|
|
63
|
+
file = File.open(File.dirname(__FILE__) + '/../spec/lorem.txt', 'r')
|
64
|
+
AWS::S3::S3Object.create("lorem_#{y}", file, "awss3bench#{x}")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
bench.report('fog.delete_object') do
|
70
|
+
TIMES.times do |x|
|
71
|
+
TIMES.times do |y|
|
72
|
+
fog.delete_object("fogbench#{x}", "lorem_#{y}")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
bench.report('raws.delete') do
|
77
|
+
TIMES.times do |x|
|
78
|
+
TIMES.times do |y|
|
79
|
+
raws.delete("rawsbench#{x}", "lorem_#{y}")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
bench.report('awss3::S3Object.delete') do
|
84
|
+
TIMES.times do |x|
|
85
|
+
TIMES.times do |y|
|
86
|
+
AWS::S3::S3Object.delete("lorem_#{y}", "awss3bench#{x}")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
bench.report('fog.delete_bucket') do
|
92
|
+
TIMES.times do |x|
|
93
|
+
fog.delete_bucket("fogbench#{x}")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
bench.report('raws.delete_bucket') do
|
97
|
+
TIMES.times do |x|
|
98
|
+
raws.delete_bucket("rawsbench#{x}")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
bench.report('awss3::Bucket.delete') do
|
102
|
+
TIMES.times do |x|
|
103
|
+
AWS::S3::Bucket.delete("awss3bench#{x}")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__) + '/../lib'
|
3
|
+
|
4
|
+
def time_in_fork(&block)
|
5
|
+
read, write = IO.pipe
|
6
|
+
Process.fork do
|
7
|
+
write.puts Benchmark.realtime{ block.call }
|
8
|
+
end
|
9
|
+
Process.wait
|
10
|
+
write.close
|
11
|
+
read.read.tap do
|
12
|
+
read.close
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Array
|
17
|
+
def avg
|
18
|
+
map(&:to_f).inject(:+) / size
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def report(label, n = 10, &block)
|
23
|
+
puts label
|
24
|
+
puts "%.4f" % n.times.map{ time_in_fork &block }.avg
|
25
|
+
puts
|
26
|
+
end
|
27
|
+
|
28
|
+
# make rubygems load specifications now so the
|
29
|
+
# time is not included below.
|
30
|
+
Gem::Specification._all
|
31
|
+
|
32
|
+
N = 10
|
33
|
+
|
34
|
+
report("require fog:", N) { require 'fog' }
|
35
|
+
report("require fog/aws:", N) { require 'fog/aws' }
|
36
|
+
report("require fog/aws/compute:", N) { require 'fog/aws/compute' }
|
37
|
+
report("require fog/aws/core:", N) { require 'fog/aws/core'}
|
data/benchs/params.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
|
3
|
+
def hash(options)
|
4
|
+
result = "#{options.delete(:name)}"
|
5
|
+
for key, value in options
|
6
|
+
result << " #{key} => #{value} "
|
7
|
+
end
|
8
|
+
result
|
9
|
+
end
|
10
|
+
|
11
|
+
def optional(name, a = nil, b = nil, c = nil)
|
12
|
+
result = "#{name}"
|
13
|
+
options = { :a => a, :b => b, :c => c }
|
14
|
+
for key, value in options
|
15
|
+
result << " #{key} => #{value} "
|
16
|
+
end
|
17
|
+
result
|
18
|
+
end
|
19
|
+
|
20
|
+
COUNT = 100_000
|
21
|
+
data = "Content-Length: 100"
|
22
|
+
Benchmark.bmbm(25) do |bench|
|
23
|
+
bench.report('hash') do
|
24
|
+
COUNT.times do
|
25
|
+
hash({:name => 'name'})
|
26
|
+
end
|
27
|
+
end
|
28
|
+
bench.report('optional') do
|
29
|
+
COUNT.times do
|
30
|
+
optional('name')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
bench.report('hash_with_option') do
|
34
|
+
COUNT.times do
|
35
|
+
hash({:name => 'name', :a => 'a', :b => 'b', :c => 'c'})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
bench.report('optional_with_option') do
|
39
|
+
COUNT.times do
|
40
|
+
optional('name', :a => 'a', :b => 'b', :c => 'c')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
class Parser < Nokogiri::XML::SAX::Document
|
6
|
+
attr_reader :response
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
reset
|
10
|
+
end
|
11
|
+
|
12
|
+
def reset
|
13
|
+
@item = {}
|
14
|
+
@response = { :items => [] }
|
15
|
+
end
|
16
|
+
|
17
|
+
def characters(string)
|
18
|
+
@value ||= ''
|
19
|
+
@value << string.strip
|
20
|
+
end
|
21
|
+
|
22
|
+
def start_element(name, attrs = [])
|
23
|
+
@value = nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def end_element(name)
|
27
|
+
case name
|
28
|
+
when 'item'
|
29
|
+
@response[:items] << @item
|
30
|
+
@item = {}
|
31
|
+
when 'key'
|
32
|
+
@item[:key] = value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def value
|
37
|
+
@value.dup
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
data = <<-DATA
|
42
|
+
<items>
|
43
|
+
<item>
|
44
|
+
<key>value</key>
|
45
|
+
</item>
|
46
|
+
</items>
|
47
|
+
DATA
|
48
|
+
|
49
|
+
COUNT = 10_000
|
50
|
+
|
51
|
+
Benchmark.bmbm(25) do |bench|
|
52
|
+
bench.report('parse') do
|
53
|
+
COUNT.times do
|
54
|
+
parser = Parser.new
|
55
|
+
Nokogiri::XML::SAX::Parser.new(parser).parse(data)
|
56
|
+
parser.response
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
bench.report('push') do
|
61
|
+
COUNT.times do
|
62
|
+
parser = Parser.new
|
63
|
+
Nokogiri::XML::SAX::PushParser.new(parser).write(data, true)
|
64
|
+
parser.response
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|