sisfc 0.0.1 → 0.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4db7cb93e8cfd8e52ef91b888359f61d513761a0
4
- data.tar.gz: 3370237ff41037080a11ce54c4efb04510d24cab
3
+ metadata.gz: ee8e44bf402532fa027e91c284013a1044da5190
4
+ data.tar.gz: 779b1cfc0560936edb1c75efe381d321c9407476
5
5
  SHA512:
6
- metadata.gz: 153d84d057e7011351998a401f44139827b72edb6051d274b8ab09bd9aaefc2a61083e26807073bd0e0a9ccfa5b53f5f4f66d654d0415cfa4743ebb2a84d0e90
7
- data.tar.gz: f59a60e8c490cca293ef9836fbc990ce56663d55c681f9ecc32017ace690947a6d9ecc06728e5f1fd004762f9c87afeb050a02b790cec82079cc1ae1af244160
6
+ metadata.gz: bd44dc6c5480ce6e2f23418315148a186c7106ede73bcc0e3320b5794a97f64e934a74c356641dc02dfb710e7746e81377359b4c4481ca1e6447f5aad4524d1e
7
+ data.tar.gz: a927ec9bb0a5a8cc0f5e89259220358acb4d7f19712ba65f071813a07c5e6b77c8a4b3c680207a31809fb7facc2da6ceb3d47a7485b950b4471b8607f69dde0a
data/bin/sisfc CHANGED
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # should we actually decomment these lines?
4
- # require 'rubygems'
5
- # require 'bundler/setup'
6
-
7
- require 'awesome_print'
8
-
9
- require 'sisfc'
10
- require 'sisfc/evaluation'
3
+ begin
4
+ require 'sisfc'
5
+ require 'sisfc/evaluation'
6
+ require 'awesome_print'
7
+ rescue LoadError
8
+ require 'rubygems'
9
+ require 'sisfc'
10
+ require 'sisfc/evaluation'
11
+ require 'awesome_print'
12
+ end
11
13
 
12
14
 
13
15
  if __FILE__ == $0
@@ -14,7 +14,7 @@ module SISFC
14
14
  cost = vm_allocation.inject(0.0) do |s,x|
15
15
  hc = @vm_hourly_cost.find{|i| i[:data_center] == x[:dc_id] and i[:vm_type] == x[:vm_size] }
16
16
  unless hc
17
- raise Error, "Cannot find hourly cost for data center #{x[:dc_id]} and VM size #{x[:vm_size]}!"
17
+ raise "Cannot find hourly cost for data center #{x[:dc_id]} and VM size #{x[:vm_size]}!"
18
18
  end
19
19
  s += x[:vm_num] * hc[:cost]
20
20
  end
@@ -23,7 +23,7 @@ module SISFC
23
23
  # puts "vm allocation cost: #{cost}"
24
24
 
25
25
  # consider SLO violations
26
- penalties = (@penalties_func.nil? ? 0.0 : @penalties_func.call(kpis, dc_kpis))
26
+ penalties = (@penalties_func.nil? ? 0.0 : (@penalties_func.call(kpis, dc_kpis) or 0.0))
27
27
  kpis[:penalties] = penalties
28
28
  # puts "slo penalties cost: #{penalties}"
29
29
  cost += penalties
@@ -195,7 +195,7 @@ module SISFC
195
195
  fitness = @evaluator.evaluate_business_impact(kpis, dc_kpis, vm_allocation)
196
196
  puts "====== Evaluating new allocation ======\n" +
197
197
  vm_allocation.map{|x| x.except(:service_time_distribution) }.inspect + "\n" +
198
- "kpis #{kpis.to_s}\n" +
198
+ "kpis: #{kpis.to_s}\n" +
199
199
  "dc_kpis: #{dc_kpis.to_s}\n" +
200
200
  "=======================================\n"
201
201
  fitness
data/lib/sisfc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SISFC
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.0'
3
3
  end
data/lib/sisfc.rb CHANGED
@@ -2,3 +2,4 @@ require 'active_support/time'
2
2
 
3
3
  require 'sisfc/configuration'
4
4
  require 'sisfc/simulation'
5
+ require 'sisfc/evaluation'
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ require 'sisfc/reference_configuration'
4
+
5
+
6
+ describe SISFC::Evaluator do
7
+ describe '.penalties' do
8
+ EXAMPLE_ALLOCATION = [
9
+ { dc_id: 1, vm_size: :medium, vm_num: 20 },
10
+ { dc_id: 1, vm_size: :large, vm_num: 30 },
11
+ { dc_id: 2, vm_size: :medium, vm_num: 50 },
12
+ { dc_id: 2, vm_size: :large, vm_num: 60 },
13
+ ]
14
+
15
+ it 'should work if no penalty function is provided' do
16
+ evaluation_no_penalties = EVALUATION.reject {|x| x == :penalties }
17
+ with_reference_config(evaluation: evaluation_no_penalties) do |conf|
18
+ SISFC::Evaluator.new(conf)
19
+ end
20
+ end
21
+
22
+ it 'should work if penalty function returns something' do
23
+ evaluator = with_reference_config do |conf|
24
+ SISFC::Evaluator.new(conf)
25
+ end
26
+ evaluator.evaluate_business_impact({ mttr: 0.075 }, nil, EXAMPLE_ALLOCATION)
27
+ end
28
+
29
+ it 'should work if penalty function returns nil' do
30
+ evaluator = with_reference_config do |conf|
31
+ SISFC::Evaluator.new(conf)
32
+ end
33
+ evaluator.evaluate_business_impact({ mttr: 0.025 }, nil, EXAMPLE_ALLOCATION)
34
+ end
35
+ end
36
+ end
@@ -131,6 +131,17 @@ request_generation \
131
131
  command: "<pwd>/generator.R"
132
132
  END
133
133
 
134
+ EVALUATION_CHARACTERIZATION = <<END
135
+ evaluation \
136
+ :vm_hourly_cost => [
137
+ { :data_center => 1, :vm_type => :medium, :cost => 0.160 },
138
+ { :data_center => 1, :vm_type => :large, :cost => 0.320 },
139
+ { :data_center => 2, :vm_type => :medium, :cost => 0.184 },
140
+ { :data_center => 2, :vm_type => :large, :cost => 0.368 }
141
+ ],
142
+ # 500$ penalties if MTTR takes more than 50 msecs
143
+ :penalties => lambda {|kpis,dc_kpis| 500.0 if kpis[:mttr] > 0.050 }
144
+ END
134
145
 
135
146
  # this is the whole reference configuration
136
147
  # (useful for spec'ing configuration.rb)
@@ -139,7 +150,8 @@ REFERENCE_CONFIGURATION =
139
150
  DATA_CENTERS_CHARACTERIZATION +
140
151
  SERVICE_COMPONENT_TYPES_CHARACTERIZATION +
141
152
  WORKFLOW_TYPES_CHARACTERIZATION +
142
- REQUEST_GENERATION_CHARACTERIZATION
153
+ REQUEST_GENERATION_CHARACTERIZATION +
154
+ EVALUATION_CHARACTERIZATION
143
155
 
144
156
 
145
157
  evaluator = Object.new
@@ -151,6 +163,7 @@ evaluator.instance_eval(REFERENCE_CONFIGURATION)
151
163
  DATA_CENTERS = evaluator.data_centers
152
164
  SERVICE_COMPONENT_TYPES = evaluator.service_component_types
153
165
  WORKFLOW_TYPES = evaluator.workflow_types
166
+ EVALUATION = evaluator.evaluation
154
167
 
155
168
 
156
169
  def with_reference_config(opts={})
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sisfc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mauro Tortonesi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-14 00:00:00.000000000 Z
11
+ date: 2014-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
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
14
  requirement: !ruby/object:Gem::Requirement
21
15
  requirements:
22
16
  - - ~>
23
17
  - !ruby/object:Gem::Version
24
18
  version: 4.0.0
19
+ name: activesupport
25
20
  prerelease: false
26
21
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: awesome_print
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
23
  requirements:
31
24
  - - ~>
32
25
  - !ruby/object:Gem::Version
33
- version: 1.2.0
26
+ version: 4.0.0
27
+ - !ruby/object:Gem::Dependency
34
28
  requirement: !ruby/object:Gem::Requirement
35
29
  requirements:
36
30
  - - ~>
37
31
  - !ruby/object:Gem::Version
38
32
  version: 1.2.0
33
+ name: awesome_print
39
34
  prerelease: false
40
35
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: erv
43
36
  version_requirements: !ruby/object:Gem::Requirement
44
37
  requirements:
45
38
  - - ~>
46
39
  - !ruby/object:Gem::Version
47
- version: 0.0.2
40
+ version: 1.2.0
41
+ - !ruby/object:Gem::Dependency
48
42
  requirement: !ruby/object:Gem::Requirement
49
43
  requirements:
50
44
  - - ~>
51
45
  - !ruby/object:Gem::Version
52
46
  version: 0.0.2
47
+ name: erv
53
48
  prerelease: false
54
49
  type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
50
  version_requirements: !ruby/object:Gem::Requirement
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
61
- version: 1.5.3
54
+ version: 0.0.2
55
+ - !ruby/object:Gem::Dependency
62
56
  requirement: !ruby/object:Gem::Requirement
63
57
  requirements:
64
58
  - - ~>
65
59
  - !ruby/object:Gem::Version
66
60
  version: 1.5.3
61
+ name: bundler
67
62
  prerelease: false
68
63
  type: :development
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
64
  version_requirements: !ruby/object:Gem::Requirement
72
65
  requirements:
73
66
  - - ~>
74
67
  - !ruby/object:Gem::Version
75
- version: 10.1.1
68
+ version: 1.5.3
69
+ - !ruby/object:Gem::Dependency
76
70
  requirement: !ruby/object:Gem::Requirement
77
71
  requirements:
78
72
  - - ~>
79
73
  - !ruby/object:Gem::Version
80
74
  version: 10.1.1
75
+ name: rake
81
76
  prerelease: false
82
77
  type: :development
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 10.1.1
83
83
  description: Simulator for IT Services in Federated Clouds
84
84
  email:
85
85
  - mauro.tortonesi@unife.it
@@ -112,6 +112,7 @@ files:
112
112
  - lib/sisfc/vm.rb
113
113
  - sisfc.gemspec
114
114
  - test/sisfc/configuration_test.rb
115
+ - test/sisfc/evaluation_test.rb
115
116
  - test/sisfc/generator_test.rb
116
117
  - test/sisfc/reference_configuration.rb
117
118
  - test/sisfc/request_test.rb
@@ -136,12 +137,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
137
  version: '0'
137
138
  requirements: []
138
139
  rubyforge_project:
139
- rubygems_version: 2.2.1
140
+ rubygems_version: 2.1.9
140
141
  signing_key:
141
142
  specification_version: 4
142
143
  summary: A simulator for business-driven IT management research capable of evaluating IT service component placement in federated Cloud environments
143
144
  test_files:
144
145
  - test/sisfc/configuration_test.rb
146
+ - test/sisfc/evaluation_test.rb
145
147
  - test/sisfc/generator_test.rb
146
148
  - test/sisfc/reference_configuration.rb
147
149
  - test/sisfc/request_test.rb