gargor 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +49 -66
- data/README_ja.md +256 -0
- data/gargor.gemspec +2 -2
- data/lib/gargor/version.rb +2 -1
- metadata +7 -6
data/README.md
CHANGED
@@ -1,84 +1,81 @@
|
|
1
1
|
# gargor
|
2
2
|
|
3
|
-
`gargor
|
3
|
+
`gargor` is software which uses genetic algorithm to support parameter tuning of the servers controlled by Chef.Using this software, you are able to optimize and automate the server tuning, which you did until now based on a combination of my experience and intuition.
|
4
4
|
|
5
|
-
##
|
5
|
+
## Install
|
6
6
|
|
7
|
-
Ruby 1.9
|
7
|
+
Ruby 1.9-
|
8
8
|
|
9
|
-
$ gem install gargor
|
9
|
+
$ [sudo] gem install gargor
|
10
10
|
|
11
|
-
##
|
11
|
+
## How it works
|
12
12
|
|
13
|
-
1.
|
14
|
-
2.
|
15
|
-
3.
|
16
|
-
4.
|
17
|
-
5.
|
18
|
-
6.
|
13
|
+
1. Create a individual from current Chef settings (JSON file).
|
14
|
+
2. Create remaining individuals by mutation.
|
15
|
+
3. By performing stress-test (deloy by Chef and Attack by some stress tool) for each individuals to evaluate fitness.
|
16
|
+
4. To create Individuals of Next-generation, Individuals of current generation are crossovered or mutated each other.
|
17
|
+
5. Treat individuals of Next-generation as current generation. return to 3. Repeat until the max generations number of times.
|
18
|
+
6. It ends with a deployment to the server with a individual which has the highest fitness.
|
19
19
|
|
20
|
-
##
|
20
|
+
## Usage
|
21
21
|
|
22
22
|
$ gargor [dsl-file]
|
23
23
|
|
24
|
-
`gargor
|
24
|
+
The dsl-file of `gargor` should be written as belows:
|
25
25
|
|
26
26
|
```ruby
|
27
|
-
#
|
27
|
+
# generations: set > 1
|
28
28
|
max_generations 10
|
29
29
|
|
30
|
-
#
|
30
|
+
# individuals number of some generation.
|
31
31
|
population 10
|
32
32
|
|
33
|
-
#
|
33
|
+
# elite number of some generation.(carried over)
|
34
34
|
elite 1
|
35
35
|
|
36
|
-
#
|
36
|
+
# Probability of mutation set "0.01" to "1%" (when crossover)
|
37
37
|
mutation 0.01
|
38
38
|
|
39
|
-
#
|
39
|
+
# target cook command : '%s' will replace by node name.
|
40
40
|
target_cooking_cmd "knife solo cook %s"
|
41
41
|
|
42
|
-
#
|
43
|
-
#
|
42
|
+
# target nodes
|
43
|
+
# performing target_cooking_command before the attack.
|
44
44
|
target_nodes ["www-1.example","www-2.example","db-1.example"]
|
45
45
|
|
46
|
-
#
|
46
|
+
# attack command
|
47
47
|
attack_cmd "ssh attacker.example ./bin/ghakai www-1.example.yml 2>/dev/null"
|
48
48
|
|
49
49
|
|
50
|
-
#
|
51
|
-
# code: attack_cmd
|
52
|
-
# out: attack_cmd
|
53
|
-
# time: attack_cmd
|
50
|
+
# evalute of the attack
|
51
|
+
# code: exit code of attack_cmd command (0 => succees)
|
52
|
+
# out: standard output of attack_cmd command
|
53
|
+
# time: execute time of attack_cmd
|
54
54
|
evaluate do |code,out,time|
|
55
55
|
puts out
|
56
56
|
fitness = 0
|
57
|
-
|
58
|
-
#
|
59
|
-
# FAILEDの値を抜き出し0以外は適応値0としている
|
57
|
+
# get "FAILED" count from stadard output of stress-tool,
|
58
|
+
# and set fitess to 0 when FAILED > 0.
|
60
59
|
if time > 0 && code == 0 && /^FAILED (\d+)/ =~ out && $1 == "0"
|
61
|
-
#
|
62
|
-
#
|
63
|
-
# request count:200, concurrenry:20, 45.060816 req/s
|
60
|
+
# get fitness from stadard output of stress-tool.
|
61
|
+
# e.g.: request count:200, concurrenry:20, 45.060816 req/s
|
64
62
|
if /, ([\.\d]+) req\/s/ =~ out
|
65
63
|
fitness = $1.to_f
|
66
64
|
end
|
67
|
-
#
|
65
|
+
# To get fitness simply,to use execution time
|
68
66
|
# fitness = 1/time
|
69
67
|
end
|
70
|
-
#
|
68
|
+
# This block must return the fitness.(integer or float)
|
71
69
|
fitness
|
72
70
|
end
|
73
71
|
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
78
|
-
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
# mutaion: 突然変異時の値の設定
|
72
|
+
# definition of parameters(GA)
|
73
|
+
#
|
74
|
+
# param _name_ do
|
75
|
+
# json_file: Chef parameter(JSON) file (such as nodes/*.json or roles/*.json)
|
76
|
+
# (Warning!) gargor will overwrite their json files.
|
77
|
+
# json_path: to locate the value by JSONPath
|
78
|
+
# mutaion: to set value when mutaion
|
82
79
|
param "max_clients" do
|
83
80
|
json_file "roles/www.json"
|
84
81
|
json_path '$.httpd.max_clients'
|
@@ -110,21 +107,16 @@ param "query_cache_size" do
|
|
110
107
|
end
|
111
108
|
```
|
112
109
|
|
113
|
-
|
114
|
-
|
115
|
-
### 注意
|
116
|
-
|
117
|
-
`gargor`は、DSLファイルで指定されたChefのJSONを直接(問答無用で)書き換えます。`git stash`を使うなりしてオリジナルが消えないように配慮ください。
|
110
|
+
### Warning
|
118
111
|
|
119
|
-
|
112
|
+
The `gargor` will overwrite Chef JSON files.So you should take care of original files.
|
120
113
|
|
121
|
-
|
114
|
+
## Sample Chef recipe
|
122
115
|
|
123
116
|
### mysql
|
124
117
|
|
125
118
|
|
126
119
|
```ruby
|
127
|
-
# この時点で起動しようとすると以前の設定ファイルがおかしい場合にエラーが出てしまう
|
128
120
|
service "mysqld" do
|
129
121
|
action :nothing
|
130
122
|
end
|
@@ -134,7 +126,6 @@ template "/etc/my.cnf" do
|
|
134
126
|
notifies :restart,"service[mysqld]"
|
135
127
|
end
|
136
128
|
|
137
|
-
# ib_logfile0,1はib_logfile1はinnodb_log_file_sizeを変えるとエラーになるので毎回消す
|
138
129
|
file "/var/lib/mysql/ib_logfile0" do
|
139
130
|
action :delete
|
140
131
|
notifies :restart,"service[mysqld]"
|
@@ -145,7 +136,7 @@ file "/var/lib/mysql/ib_logfile1" do
|
|
145
136
|
end
|
146
137
|
```
|
147
138
|
|
148
|
-
|
139
|
+
my.conf.erb
|
149
140
|
|
150
141
|
```
|
151
142
|
[mysqld]
|
@@ -205,7 +196,7 @@ pid-file=/var/run/mysqld/mysqld.pid
|
|
205
196
|
|
206
197
|
### httpd
|
207
198
|
|
208
|
-
Apache
|
199
|
+
When I tune Apache httpd servers ,The Chef recipe is as below:
|
209
200
|
|
210
201
|
```
|
211
202
|
service "httpd" do
|
@@ -218,7 +209,7 @@ template "/etc/httpd/conf/httpd.conf" do
|
|
218
209
|
end
|
219
210
|
```
|
220
211
|
|
221
|
-
|
212
|
+
httpd.conf.erb
|
222
213
|
|
223
214
|
```
|
224
215
|
<IfModule prefork.c>
|
@@ -231,21 +222,11 @@ MaxRequestsPerChild <%= node["httpd"]["max_request_per_child"] %>
|
|
231
222
|
</IfModule>
|
232
223
|
```
|
233
224
|
|
234
|
-
##
|
235
|
-
|
236
|
-
コマンドラインで使えるものであれば、大体使うことができます。サンプルでは、[グリーン破壊](https://github.com/KLab/green-hakai/)を使わせて頂きました。
|
237
|
-
|
238
|
-
負荷試験の厳しさによって個体が全滅することがあります。すると以下のように表示され、プログラムが終了します。
|
225
|
+
## Stress Tools
|
239
226
|
|
240
|
-
|
241
|
-
|
242
|
-
これは、個体の環境が厳しすぎるためで負荷の条件を緩めて再度実施してください。
|
243
|
-
|
244
|
-
## FAQ
|
245
|
-
|
246
|
-
##### `gargor`はなんて読むの?
|
227
|
+
I use [green hakai](https://github.com/KLab/green-hakai/).
|
247
228
|
|
248
|
-
|
229
|
+
You can use ab(Apache bench) and so on.
|
249
230
|
|
250
231
|
## Contributing
|
251
232
|
|
@@ -254,3 +235,5 @@ MaxRequestsPerChild <%= node["httpd"]["max_request_per_child"] %>
|
|
254
235
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
255
236
|
4. Push to the branch (`git push origin my-new-feature`)
|
256
237
|
5. Create new Pull Request
|
238
|
+
|
239
|
+
|
data/README_ja.md
ADDED
@@ -0,0 +1,256 @@
|
|
1
|
+
# gargor
|
2
|
+
|
3
|
+
`gargor`はChefで管理されたサーバのパラメータと負荷試験結果を遺伝的アルゴリズム(genetic algorithm)によ探索し、最適値を探索します。本ソフトウェアをうまく使うことで今まで勘と経験に頼っていたサーバチューニングをより最適にかつ自動化することができます。
|
4
|
+
|
5
|
+
## インストール
|
6
|
+
|
7
|
+
Ruby 1.9以降が必要です
|
8
|
+
|
9
|
+
$ gem install gargor
|
10
|
+
|
11
|
+
## どのように動くのか
|
12
|
+
|
13
|
+
1. 現在のChefの設定ファイル(JSON)から個体を一つ作ります。
|
14
|
+
2. 残りの個体を突然変異により作ります。
|
15
|
+
3. 各個体に対し負荷試験(Chefによる配備→攻撃)を実施し、適応値を算出します。
|
16
|
+
4. 現世代の個体群に対して、エリートと残りを交叉および突然変異により次世代の個体群をつくります。
|
17
|
+
5. 次世代の個体群を現世代として`3.`に戻ります。これを指定した世代分実施します。
|
18
|
+
6. 最後に最も高い適応値の個体をサーバに配備して終了します
|
19
|
+
|
20
|
+
## 使い方
|
21
|
+
|
22
|
+
$ gargor [dsl-file]
|
23
|
+
|
24
|
+
`gargor`の設定情報は、内部DSLによりに以下のように記述します。
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
# 世代数: 1以上を指定してください
|
28
|
+
max_generations 10
|
29
|
+
|
30
|
+
# 個体数: 1世代あたりの個体数
|
31
|
+
population 10
|
32
|
+
|
33
|
+
# エリート: 世代交代の時に適応値の高い個体をそのまま次世代に引き継ぐ数
|
34
|
+
elite 1
|
35
|
+
|
36
|
+
# 突然変異の確率: "0.01"で"1%"
|
37
|
+
mutation 0.01
|
38
|
+
|
39
|
+
# ターゲットをChefで料理するコマンド %sには、ノード名が入る
|
40
|
+
target_cooking_cmd "knife solo cook %s"
|
41
|
+
|
42
|
+
# ターゲットのノード
|
43
|
+
# 攻撃前に以下のノードすべてに対してtarget_cooking_cmdが実施される
|
44
|
+
target_nodes ["www-1.example","www-2.example","db-1.example"]
|
45
|
+
|
46
|
+
# 攻撃コマンド
|
47
|
+
attack_cmd "ssh attacker.example ./bin/ghakai www-1.example.yml 2>/dev/null"
|
48
|
+
|
49
|
+
|
50
|
+
# 攻撃結果の評価
|
51
|
+
# code: attack_cmdのプロセス終了コード(普通は0:成功)
|
52
|
+
# out: attack_cmdの標準出力
|
53
|
+
# time: attack_cmdの実行時間
|
54
|
+
evaluate do |code,out,time|
|
55
|
+
puts out
|
56
|
+
fitness = 0
|
57
|
+
|
58
|
+
# 攻撃コマンドで使っている、グリーン破壊の標準出力から
|
59
|
+
# FAILEDの値を抜き出し0以外は適応値0としている
|
60
|
+
if time > 0 && code == 0 && /^FAILED (\d+)/ =~ out && $1 == "0"
|
61
|
+
# 攻撃コマンドで使っている、グリーン破壊の標準出力から
|
62
|
+
# 適応値に代用できそうなものを正規表現で取得する
|
63
|
+
# request count:200, concurrenry:20, 45.060816 req/s
|
64
|
+
if /, ([\.\d]+) req\/s/ =~ out
|
65
|
+
fitness = $1.to_f
|
66
|
+
end
|
67
|
+
# 単純に実行時間で適応値を設定したいなら以下のようにしても良い
|
68
|
+
# fitness = 1/time
|
69
|
+
end
|
70
|
+
# このブロックは必ず適応値を返すこと(整数or浮動小数)
|
71
|
+
fitness
|
72
|
+
end
|
73
|
+
|
74
|
+
# パラメータ定義
|
75
|
+
# GAにより変動されるパラメータをここで定義する
|
76
|
+
#
|
77
|
+
# param 名前 do
|
78
|
+
# json_file: 値を上書くJSONファイル nodes/*.jsonやroles/*.json
|
79
|
+
# (注意!) gargorはこのjsonファイルを容赦なく書き換える
|
80
|
+
# json_path: json_fileの中から書変える値の場所をJSONPath形式で指定する
|
81
|
+
# mutaion: 突然変異時の値の設定
|
82
|
+
param "max_clients" do
|
83
|
+
json_file "roles/www.json"
|
84
|
+
json_path '$.httpd.max_clients'
|
85
|
+
mutation rand(500)+10
|
86
|
+
end
|
87
|
+
|
88
|
+
param "innodb_log_file_size" do
|
89
|
+
json_file "nodes/db-1.example.json"
|
90
|
+
json_path '$.mysqld.innodb_log_file_size'
|
91
|
+
mutation rand(200)
|
92
|
+
end
|
93
|
+
|
94
|
+
param "sort_buffer_size" do
|
95
|
+
json_file "nodes/db-1.example.json"
|
96
|
+
json_path '$.mysqld.sort_buffer_size'
|
97
|
+
mutation rand(1000)
|
98
|
+
end
|
99
|
+
|
100
|
+
param "read_buffer_size" do
|
101
|
+
json_file "nodes/db-1.example.json"
|
102
|
+
json_path '$.mysqld.read_buffer_size'
|
103
|
+
mutation rand(1000)
|
104
|
+
end
|
105
|
+
|
106
|
+
param "query_cache_size" do
|
107
|
+
json_file "nodes/db-1.example.json"
|
108
|
+
json_path '$.mysqld.query_cache_size'
|
109
|
+
mutation rand(100)
|
110
|
+
end
|
111
|
+
```
|
112
|
+
|
113
|
+
このDSLファイルは任意のファイル名でChefのリポジトリに含めてしまうことを推奨します。`dsl-file`を省略した場合は、カレントディレクトリの`gargor.rb`を探します。
|
114
|
+
|
115
|
+
### 注意
|
116
|
+
|
117
|
+
`gargor`は、DSLファイルで指定されたChefのJSONを直接(問答無用で)書き換えます。`git stash`を使うなりしてオリジナルが消えないように配慮ください。
|
118
|
+
|
119
|
+
## サンプルレシピ
|
120
|
+
|
121
|
+
`Chef`のサンプルレシピをTipsを交えてご紹介します。
|
122
|
+
|
123
|
+
### mysql
|
124
|
+
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
# この時点で起動しようとすると以前の設定ファイルがおかしい場合にエラーが出てしまう
|
128
|
+
service "mysqld" do
|
129
|
+
action :nothing
|
130
|
+
end
|
131
|
+
|
132
|
+
template "/etc/my.cnf" do
|
133
|
+
source "www/my.cnf.erb"
|
134
|
+
notifies :restart,"service[mysqld]"
|
135
|
+
end
|
136
|
+
|
137
|
+
# ib_logfile0,1はib_logfile1はinnodb_log_file_sizeを変えるとエラーになるので毎回消す
|
138
|
+
file "/var/lib/mysql/ib_logfile0" do
|
139
|
+
action :delete
|
140
|
+
notifies :restart,"service[mysqld]"
|
141
|
+
end
|
142
|
+
file "/var/lib/mysql/ib_logfile1" do
|
143
|
+
action :delete
|
144
|
+
notifies :restart,"service[mysqld]"
|
145
|
+
end
|
146
|
+
```
|
147
|
+
|
148
|
+
このテンプレートは以下のようになっています。`innodb_buffer_pool_size`を探索対象のパラメータにしたいのですが、「`innodb_log_file_size`を`innodb_buffer_pool_size`の25%にすべし」と注意書きがあるので、`innodb_log_file_size`を設定対象にして、`innodb_buffer_pool_size`をその4倍にしています。
|
149
|
+
|
150
|
+
```
|
151
|
+
[mysqld]
|
152
|
+
datadir=/var/lib/mysql
|
153
|
+
socket=/var/lib/mysql/mysql.sock
|
154
|
+
user=mysql
|
155
|
+
# Default to using old password format for compatibility with mysql 3.x
|
156
|
+
# clients (those using the mysqlclient10 compatibility package).
|
157
|
+
old_passwords=1
|
158
|
+
|
159
|
+
# Disabling symbolic-links is recommended to prevent assorted security risks;
|
160
|
+
# to do so, uncomment this line:
|
161
|
+
# symbolic-links=0
|
162
|
+
|
163
|
+
skip-locking
|
164
|
+
query_cache_size = <%= node["mysqld"]["query_cache_size"] %>M
|
165
|
+
key_buffer = <%= node["mysqld"]["key_buffer"] %>K
|
166
|
+
max_allowed_packet = <%= node["mysqld"]["max_allowed_packet"] %>M
|
167
|
+
table_cache = <%= node["mysqld"]["table_cache"] %>
|
168
|
+
sort_buffer_size = <%= node["mysqld"]["sort_buffer_size"] %>K
|
169
|
+
read_buffer_size = <%= node["mysqld"]["read_buffer_size"] %>K
|
170
|
+
read_rnd_buffer_size = <%= node["mysqld"]["read_rnd_buffer_size"] %>K
|
171
|
+
net_buffer_length = <%= node["mysqld"]["net_buffer_length"] %>K
|
172
|
+
thread_stack = <%= node["mysqld"]["thread_stack"] %>K
|
173
|
+
|
174
|
+
skip-networking
|
175
|
+
server-id = 1
|
176
|
+
|
177
|
+
# Uncomment the following if you want to log updates
|
178
|
+
#log-bin=mysql-bin
|
179
|
+
|
180
|
+
# Disable Federated by default
|
181
|
+
skip-federated
|
182
|
+
|
183
|
+
# Uncomment the following if you are NOT using BDB tables
|
184
|
+
#skip-bdb
|
185
|
+
|
186
|
+
# Uncomment the following if you are using InnoDB tables
|
187
|
+
innodb_data_home_dir = /var/lib/mysql/
|
188
|
+
innodb_data_file_path = ibdata1:10M:autoextend
|
189
|
+
innodb_log_group_home_dir = /var/lib/mysql/
|
190
|
+
innodb_log_arch_dir = /var/lib/mysql/
|
191
|
+
# You can set .._buffer_pool_size up to 50 - 80 %
|
192
|
+
# of RAM but beware of setting memory usage too high
|
193
|
+
innodb_buffer_pool_size = <%= node["mysqld"]["innodb_log_file_size"]*4 %>M
|
194
|
+
innodb_additional_mem_pool_size = <%= node["mysqld"]["innodb_additional_mem_pool_size"] %>M
|
195
|
+
# Set .._log_file_size to 25 % of buffer pool size
|
196
|
+
innodb_log_file_size = <%= node["mysqld"]["innodb_log_file_size"] %>M
|
197
|
+
innodb_log_buffer_size = <%= node["mysqld"]["innodb_log_buffer_size"] %>M
|
198
|
+
innodb_flush_log_at_trx_commit = 1
|
199
|
+
innodb_lock_wait_timeout = 50
|
200
|
+
|
201
|
+
[mysqld_safe]
|
202
|
+
log-error=/var/log/mysqld.log
|
203
|
+
pid-file=/var/run/mysqld/mysqld.pid
|
204
|
+
```
|
205
|
+
|
206
|
+
### httpd
|
207
|
+
|
208
|
+
Apacheのパフォーマンスチューニングでは以下の様にしています。レシピには全く工夫はありません。
|
209
|
+
|
210
|
+
```
|
211
|
+
service "httpd" do
|
212
|
+
action :nothing
|
213
|
+
end
|
214
|
+
|
215
|
+
template "/etc/httpd/conf/httpd.conf" do
|
216
|
+
source "www/httpd.conf.erb"
|
217
|
+
notifies :restart,"service[httpd]"
|
218
|
+
end
|
219
|
+
```
|
220
|
+
|
221
|
+
ポイントは`MinSpareServers`と`MaxSpareServers`のように上下関係のあるパラメータの決定方法を以下のように`min_spare_servers`と`range_spare_servers`としている点です。また、`ServerLimit`=`MaxClients`としています。
|
222
|
+
|
223
|
+
```
|
224
|
+
<IfModule prefork.c>
|
225
|
+
StartServers <%= node["httpd"]["start_servers"] %>
|
226
|
+
MinSpareServers <%= node["httpd"]["min_spare_servers"] %>
|
227
|
+
MaxSpareServers <%= node["httpd"]["min_spare_servers"] + node["httpd"]["range_spare_servers"] %>
|
228
|
+
ServerLimit <%= node["httpd"]["max_clients"] %>
|
229
|
+
MaxClients <%= node["httpd"]["max_clients"] %>
|
230
|
+
MaxRequestsPerChild <%= node["httpd"]["max_request_per_child"] %>
|
231
|
+
</IfModule>
|
232
|
+
```
|
233
|
+
|
234
|
+
## 負荷試験ツール
|
235
|
+
|
236
|
+
コマンドラインで使えるものであれば、大体使うことができます。サンプルでは、[グリーン破壊](https://github.com/KLab/green-hakai/)を使わせて頂きました。
|
237
|
+
|
238
|
+
負荷試験の厳しさによって個体が全滅することがあります。すると以下のように表示され、プログラムが終了します。
|
239
|
+
|
240
|
+
***** EXTERMINATION ******
|
241
|
+
|
242
|
+
これは、個体の環境が厳しすぎるためで負荷の条件を緩めて再度実施してください。
|
243
|
+
|
244
|
+
## FAQ
|
245
|
+
|
246
|
+
##### `gargor`はなんて読むの?
|
247
|
+
|
248
|
+
「がるごる」
|
249
|
+
|
250
|
+
## Contributing
|
251
|
+
|
252
|
+
1. Fork it
|
253
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
254
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
255
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
256
|
+
5. Create new Pull Request
|
data/gargor.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Gargor::VERSION
|
9
9
|
spec.authors = ["Yoshihiro TAKAHARA"]
|
10
10
|
spec.email = ["y.takahara@gmail.com"]
|
11
|
-
spec.description = %q{
|
12
|
-
spec.summary = %q{
|
11
|
+
spec.description = %q{An auto-tuning tool for internet servers w/ Genetic Algorithm and Chef. You can get good settings during sleeping ;) }
|
12
|
+
spec.summary = %q{It is software which uses generic algorithm to support parameter tuning of the servers controlled by Chef.}
|
13
13
|
spec.homepage = "https://github.com/tumf/gargor"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
data/lib/gargor/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gargor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -43,8 +43,8 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
-
description:
|
47
|
-
|
46
|
+
description: ! 'An auto-tuning tool for internet servers w/ Genetic Algorithm and
|
47
|
+
Chef. You can get good settings during sleeping ;) '
|
48
48
|
email:
|
49
49
|
- y.takahara@gmail.com
|
50
50
|
executables:
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- Gemfile
|
57
57
|
- LICENSE.txt
|
58
58
|
- README.md
|
59
|
+
- README_ja.md
|
59
60
|
- Rakefile
|
60
61
|
- bin/gargor
|
61
62
|
- gargor.gemspec
|
@@ -87,6 +88,6 @@ rubyforge_project:
|
|
87
88
|
rubygems_version: 1.8.25
|
88
89
|
signing_key:
|
89
90
|
specification_version: 3
|
90
|
-
summary:
|
91
|
-
|
91
|
+
summary: It is software which uses generic algorithm to support parameter tuning of
|
92
|
+
the servers controlled by Chef.
|
92
93
|
test_files: []
|