sisfc 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.
@@ -0,0 +1,178 @@
1
+ require 'sisfc/configuration'
2
+
3
+ START_TIME = Time.utc(1978, 'Aug', 12, 14, 30, 0).to_f
4
+ DURATION = 1.minute.to_f
5
+ WARMUP_DURATION = 10.seconds.to_f
6
+ SIMULATION_CHARACTERIZATION = <<END
7
+ # start time, duration, and warmup time for simulations
8
+ start_time Time.utc(1978, 'Aug', 12, 14, 30, 0)
9
+ duration 1.minute
10
+ warmup_duration 10.seconds
11
+ END
12
+
13
+
14
+ # characterization of data centers
15
+ DATA_CENTERS_CHARACTERIZATION = <<END
16
+ data_centers \
17
+ 1 => {
18
+ :maximum_vm_capacity => {
19
+ :tiny => 300,
20
+ :small => 300,
21
+ :medium => 300,
22
+ :large => 300,
23
+ :huge => 300,
24
+ },
25
+ },
26
+ 2 => {
27
+ :maximum_vm_capacity => {
28
+ :tiny => 300,
29
+ :small => 300,
30
+ :medium => 300,
31
+ :large => 300,
32
+ :huge => 300,
33
+ },
34
+ },
35
+ 3 => {
36
+ :maximum_vm_capacity => {
37
+ :tiny => 300,
38
+ :small => 300,
39
+ :medium => 300,
40
+ :large => 300,
41
+ :huge => 300,
42
+ },
43
+ },
44
+ 4 => {
45
+ :maximum_vm_capacity => {
46
+ :tiny => 300,
47
+ :small => 300,
48
+ :medium => 300,
49
+ :large => 300,
50
+ :huge => 300,
51
+ },
52
+ },
53
+ 5 => {
54
+ :maximum_vm_capacity => {
55
+ :tiny => 300,
56
+ :small => 300,
57
+ :medium => 300,
58
+ :large => 300,
59
+ :huge => 300,
60
+ },
61
+ }
62
+ END
63
+
64
+
65
+ # characterization of component types
66
+ SERVICE_COMPONENT_TYPES_CHARACTERIZATION = <<END
67
+ service_component_types \
68
+ 'Web Server' => {
69
+ :allowed_vm_types => [ :medium, :large ],
70
+ :service_time_distribution => {
71
+ :medium => { :distribution => :gaussian,
72
+ :mu => 0.009, # 1 request processed every 9ms
73
+ :sigma => 0.001 },
74
+ :large => { :distribution => :gaussian,
75
+ :mu => 0.007, # 1 request processed every 7ms
76
+ :sigma => 0.001 } },
77
+ :estimated_workload => 50,
78
+ },
79
+ 'App Server' => {
80
+ :allowed_vm_types => [ :medium, :large, :huge ],
81
+ :service_time_distribution => {
82
+ :medium => { :distribution => :gaussian,
83
+ :mu => 0.015, # 1 request processed every 15ms
84
+ :sigma => 0.005 },
85
+ :large => { :distribution => :gaussian,
86
+ :mu => 0.012, # 1 request processed every 12ms
87
+ :sigma => 0.003 },
88
+ :huge => { :distribution => :gaussian,
89
+ :mu => 0.009, # 1 request processed every 7ms
90
+ :sigma => 0.002 } },
91
+ :estimated_workload => 70,
92
+ },
93
+ 'Financial Transaction Server' => {
94
+ :allowed_vm_types => [ :large, :huge ],
95
+ :service_time_distribution => {
96
+ :large => { :distribution => :gaussian,
97
+ :mu => 0.015, # 1 request processed every 15ms
98
+ :sigma => 0.004 },
99
+ :huge => { :distribution => :gaussian,
100
+ :mu => 0.008, # 1 request processed every 8ms
101
+ :sigma => 0.003 } },
102
+ :estimated_workload => 80,
103
+ }
104
+ END
105
+
106
+
107
+ # workflow (or job) types descriptions
108
+ WORKFLOW_TYPES_CHARACTERIZATION = <<END
109
+ workflow_types \
110
+ 1 => {
111
+ :component_sequence => [
112
+ { :name => 'Web Server' }, # no need for :type => dedicated / shared
113
+ { :name => 'App Server' },
114
+ { :name => 'Financial Transaction Server' },
115
+ ],
116
+ :next_component_selection => :random,
117
+ },
118
+ 2 => {
119
+ :component_sequence => [
120
+ { :name => 'Web Server' }, # no need for :type => dedicated / shared
121
+ { :name => 'App Server' },
122
+ ],
123
+ # :next_component_selection => :least_loaded,
124
+ :next_component_selection => :random,
125
+ }
126
+ END
127
+
128
+
129
+ REQUEST_GENERATION_CHARACTERIZATION = <<END
130
+ request_generation \
131
+ command: "<pwd>/generator.R"
132
+ END
133
+
134
+
135
+ # this is the whole reference configuration
136
+ # (useful for spec'ing configuration.rb)
137
+ REFERENCE_CONFIGURATION =
138
+ SIMULATION_CHARACTERIZATION +
139
+ DATA_CENTERS_CHARACTERIZATION +
140
+ SERVICE_COMPONENT_TYPES_CHARACTERIZATION +
141
+ WORKFLOW_TYPES_CHARACTERIZATION +
142
+ REQUEST_GENERATION_CHARACTERIZATION
143
+
144
+
145
+ evaluator = Object.new
146
+ evaluator.extend SISFC::Configurable
147
+ evaluator.instance_eval(REFERENCE_CONFIGURATION)
148
+
149
+ # these are preprocessed portions of the reference configuration
150
+ # (useful for spec'ing everything else)
151
+ DATA_CENTERS = evaluator.data_centers
152
+ SERVICE_COMPONENT_TYPES = evaluator.service_component_types
153
+ WORKFLOW_TYPES = evaluator.workflow_types
154
+
155
+
156
+ def with_reference_config(opts={})
157
+ begin
158
+ # create temporary file with reference configuration
159
+ tf = Tempfile.open('REFERENCE_CONFIGURATION')
160
+ tf.write(REFERENCE_CONFIGURATION)
161
+ tf.close
162
+
163
+ # create a configuration object from the reference configuration file
164
+ conf = SISFC::Configuration.load_from_file(tf.path)
165
+
166
+ # apply any change from the opts parameter and validate the modified configuration
167
+ opts.each do |k,v|
168
+ conf.send(k, v)
169
+ end
170
+ conf.validate
171
+
172
+ # pass the configuration object to the block
173
+ yield conf
174
+ ensure
175
+ # delete temporary file
176
+ tf.delete
177
+ end
178
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ describe SISFC::Request do
4
+
5
+ it 'should create a valid request' do
6
+ r = SISFC::Request.new(rand(100),
7
+ (Time.now - 1.hour).to_f,
8
+ rand(10),
9
+ Time.now.to_f,
10
+ rand(4))
11
+ end
12
+
13
+ end
@@ -0,0 +1,4 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/spec'
3
+
4
+ require 'sisfc'
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sisfc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mauro Tortonesi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 4.0.0
25
+ prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: awesome_print
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.0
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 1.2.0
39
+ prerelease: false
40
+ type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: erv
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.2
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ version: 0.0.2
53
+ prerelease: false
54
+ type: :runtime
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.5.3
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 1.5.3
67
+ prerelease: false
68
+ type: :development
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 10.1.1
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ~>
79
+ - !ruby/object:Gem::Version
80
+ version: 10.1.1
81
+ prerelease: false
82
+ type: :development
83
+ description: Simulator for IT Services in Federated Clouds
84
+ email:
85
+ - mauro.tortonesi@unife.it
86
+ executables:
87
+ - sisfc
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - Gemfile
92
+ - LICENSE
93
+ - README.md
94
+ - Rakefile
95
+ - bin/sisfc
96
+ - examples/generator.R
97
+ - examples/simulator.conf
98
+ - examples/vm_allocation.conf
99
+ - lib/sisfc.rb
100
+ - lib/sisfc/configuration.rb
101
+ - lib/sisfc/data_center.rb
102
+ - lib/sisfc/evaluation.rb
103
+ - lib/sisfc/event.rb
104
+ - lib/sisfc/generator.rb
105
+ - lib/sisfc/request.rb
106
+ - lib/sisfc/service_type.rb
107
+ - lib/sisfc/simulation.rb
108
+ - lib/sisfc/sorted_array.rb
109
+ - lib/sisfc/statistics.rb
110
+ - lib/sisfc/support/dsl_helper.rb
111
+ - lib/sisfc/version.rb
112
+ - lib/sisfc/vm.rb
113
+ - sisfc.gemspec
114
+ - test/sisfc/configuration_test.rb
115
+ - test/sisfc/generator_test.rb
116
+ - test/sisfc/reference_configuration.rb
117
+ - test/sisfc/request_test.rb
118
+ - test/test_helper.rb
119
+ homepage: https://github.com/mtortonesi/sisfc
120
+ licenses:
121
+ - MIT
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 2.2.1
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: A simulator for business-driven IT management research capable of evaluating IT service component placement in federated Cloud environments
143
+ test_files:
144
+ - test/sisfc/configuration_test.rb
145
+ - test/sisfc/generator_test.rb
146
+ - test/sisfc/reference_configuration.rb
147
+ - test/sisfc/request_test.rb
148
+ - test/test_helper.rb