Merge lp:~rharding/juju-gui/bundle-counts into lp:juju-gui/experimental
- bundle-counts
- Merge into trunk
Status: | Merged |
---|---|
Merged at revision: | 1208 |
Proposed branch: | lp:~rharding/juju-gui/bundle-counts |
Merge into: | lp:juju-gui/experimental |
Diff against target: |
2636 lines (+1303/-1167) 9 files modified
app/models/bundle.js (+42/-0) app/models/charm.js (+18/-1) app/templates/bundle-token.handlebars (+1/-0) app/templates/bundle.handlebars (+2/-0) test/data/browserbundle.json (+1199/-1155) test/test_bundle_details_view.js (+3/-0) test/test_model_bundle.js (+30/-8) test/test_token.js (+6/-1) test/test_utils.js (+2/-2) |
To merge this branch: | bzr merge lp:~rharding/juju-gui/bundle-counts |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Juju GUI Hackers | Pending | ||
Review via email: mp+196135@code.launchpad.net |
Commit message
Description of the change
Display bundle download counts in the UI.
- Update the model to carry the attribute from the api.
- Update the token to display the "Deployed X times".
- Update the details to also display the count.
- Drive-by to update the attributes in the charm model.
- Update tests with updated api download from the server that includes the
download counts. Required updating tests to the new data.
Richard Harding (rharding) wrote : | # |
- 1209. By Richard Harding
-
Move the deployed text
Richard Harding (rharding) wrote : | # |
Please take a look.
Richard Harding (rharding) wrote : | # |
Reviewer comments
https:/
File app/models/
https:/
app/models/
cfg.downloads_
the api is downloads_
and such. So we map it to a more generic "recent" attr.
https:/
File app/models/charm.js (right):
https:/
app/models/
drive-by, not sure how this attr was missing from before.
https:/
File app/templates/
https:/
app/templates/
{{pluralize 'time' downloads}}</div>
per UX, make the first item in the metadata list.
https:/
File test/data/
https:/
test/data/
IGNORE ME: Updated test file due to api changes. It's a mechanical
change of downloading new api result.
https:/
File test/test_
https:/
test/test_
the rest of these are making the old tests match the updated api
response.
https:/
test/test_
the test data from the server.
this was manually tweaked in that api response so noted it here for
future test failures.
Jeff Pihach (hatch) wrote : | # |
LGTM Thanks for adding this to the UI.
Using a valueFn here looks to be an unnecessary performance hit.
https:/
File app/models/
https:/
app/models/
Why can't you just set the initial value to 0 vs a valueFn?
https:/
app/models/
Same as above
https:/
File app/models/charm.js (right):
https:/
app/models/
same as in the bundle.js
Richard Harding (rharding) wrote : | # |
*** Submitted:
Display bundle download counts in the UI.
- Update the model to carry the attribute from the api.
- Update the token to display the "Deployed X times".
- Update the details to also display the count.
- Drive-by to update the attributes in the charm model.
- Update tests with updated api download from the server that includes
the
download counts. Required updating tests to the new data.
R=jeff.pihach
CC=
https:/
Preview Diff
1 | === modified file 'app/models/bundle.js' |
2 | --- app/models/bundle.js 2013-11-05 16:53:21 +0000 |
3 | +++ app/models/bundle.js 2013-11-21 18:07:56 +0000 |
4 | @@ -51,6 +51,12 @@ |
5 | * @param {Object} cfg The configuration object. |
6 | */ |
7 | initializer: function(cfg) { |
8 | + // Map this to a name that we can change as the timeframes change |
9 | + // without having to update all users of the code. |
10 | + if (cfg && cfg.downloads_in_past_30_days) { |
11 | + this.set('recent_download_count', cfg.downloads_in_past_30_days); |
12 | + } |
13 | + |
14 | this.loaded = false; |
15 | this.on('load', function() { this.loaded = true; }); |
16 | }, |
17 | @@ -137,6 +143,42 @@ |
18 | }, |
19 | data: {}, |
20 | deployer_file_url: {}, |
21 | + |
22 | + /** |
23 | + @attribute downloads |
24 | + @default 0 |
25 | + @type {Integer} |
26 | + |
27 | + */ |
28 | + downloads: { |
29 | + /** |
30 | + @method downloads.valueFn |
31 | + @return {Integer} the number of downloads for the bundle. |
32 | + |
33 | + */ |
34 | + valueFn: function() { |
35 | + return 0; |
36 | + } |
37 | + }, |
38 | + |
39 | + /** |
40 | + @attribute recent_download_count |
41 | + @default 0 |
42 | + @type {Integer} |
43 | + |
44 | + */ |
45 | + recent_download_count: { |
46 | + /** |
47 | + @method recent_download_count.valueFn |
48 | + @return {Integer} the number of downloads in the 'recent' time |
49 | + frame. |
50 | + |
51 | + */ |
52 | + valueFn: function() { |
53 | + return 0; |
54 | + } |
55 | + }, |
56 | + |
57 | relations: { |
58 | /** |
59 | Return the relations data as a list of objects. |
60 | |
61 | === modified file 'app/models/charm.js' |
62 | --- app/models/charm.js 2013-11-01 23:04:50 +0000 |
63 | +++ app/models/charm.js 2013-11-21 18:07:56 +0000 |
64 | @@ -467,6 +467,23 @@ |
65 | } |
66 | } |
67 | }, |
68 | + /** |
69 | + @attribute downloads |
70 | + @default 0 |
71 | + @type {Integer} |
72 | + |
73 | + */ |
74 | + downloads: { |
75 | + /** |
76 | + @method downloads.valueFn |
77 | + @return {Integer} the number of downloads for the charm. |
78 | + |
79 | + */ |
80 | + valueFn: function() { |
81 | + return 0; |
82 | + } |
83 | + }, |
84 | + |
85 | files: { |
86 | value: [], |
87 | /** |
88 | @@ -671,7 +688,7 @@ |
89 | * Mapped from the downloads_in_past_30_days in the API. |
90 | * |
91 | * @attribute recent_download_count |
92 | - * @default undefined |
93 | + * @default 0 |
94 | * @type {Int} number of downloads in 'recent' time. |
95 | * |
96 | */ |
97 | |
98 | === modified file 'app/templates/bundle-token.handlebars' |
99 | --- app/templates/bundle-token.handlebars 2013-11-04 16:40:41 +0000 |
100 | +++ app/templates/bundle-token.handlebars 2013-11-21 18:07:56 +0000 |
101 | @@ -23,6 +23,7 @@ |
102 | {{basket_name}}:{{ name }} |
103 | </span> |
104 | <span class="metadata"> |
105 | + <div>Deployed {{downloads}} {{pluralize 'time' downloads}}</div> |
106 | <div><strong>{{serviceCount}} {{pluralize 'service' serviceCount}} | {{unitCount}} {{pluralize 'unit' unitCount}}</strong></div> |
107 | <div>{{#if series}}{{series}} |{{/if}} {{#if is_approved}}Recommended{{else}}{{owner}}{{/if}}</div> |
108 | </span> |
109 | |
110 | === modified file 'app/templates/bundle.handlebars' |
111 | --- app/templates/bundle.handlebars 2013-11-13 10:06:38 +0000 |
112 | +++ app/templates/bundle.handlebars 2013-11-21 18:07:56 +0000 |
113 | @@ -26,6 +26,7 @@ |
114 | <a href="" class="add deploy">Deploy this bundle</a> |
115 | </div> |
116 | <ul> |
117 | + <li>Deployed {{downloads}} {{pluralize 'time' downloads}}</li> |
118 | <li> |
119 | {{serviceCount}} |
120 | {{pluralize 'service' serviceCount}} | |
121 | @@ -177,6 +178,7 @@ |
122 | {{else}} |
123 | 1 |
124 | {{/if}} |
125 | + |
126 | </li> |
127 | {{/unless}} |
128 | {{#if origService.options}} |
129 | |
130 | === modified file 'test/data/browserbundle.json' |
131 | --- test/data/browserbundle.json 2013-10-31 14:34:07 +0000 |
132 | +++ test/data/browserbundle.json 2013-11-21 18:07:56 +0000 |
133 | @@ -1,1159 +1,1203 @@ |
134 | - |
135 | { |
136 | - "basket_name": "wiki", |
137 | - "basket_revision": 5, |
138 | - "branch_deleted": false, |
139 | - "changes": [ |
140 | - { |
141 | - "authors": [ |
142 | - "Brad Crittenden <bac@example.com>" |
143 | - ], |
144 | - "committer": "Brad Crittenden <bac@example.com>", |
145 | - "created": 1378218161.439, |
146 | - "message": "Correct icon", |
147 | - "revno": 3 |
148 | - }, |
149 | - { |
150 | - "authors": [ |
151 | - "Jorge O. O'Castro <jorge@example.com>", |
152 | - "Brad Crittenden <bac@example.com>" |
153 | - ], |
154 | - "committer": "Brad Crittenden <bac@example.com>", |
155 | - "created": 1377718535.465, |
156 | - "message": "Added README and icon", |
157 | - "revno": 2 |
158 | - }, |
159 | - { |
160 | - "authors": [ |
161 | - "Brad Crittenden <bac@example.com>" |
162 | - ], |
163 | - "committer": "Brad Crittenden <bac@example.com>", |
164 | - "created": 1375449744.902, |
165 | - "message": "Initial checking of working config.", |
166 | - "revno": 1 |
167 | - } |
168 | - ], |
169 | - "charm_metadata": { |
170 | - "haproxy": { |
171 | - "categories": [ |
172 | - "cache-proxy" |
173 | - ], |
174 | - "code_source": { |
175 | - "bugs_link": "https://bugs.launchpad.net/charms/+source/haproxy", |
176 | - "last_log": "merging lp:~davidpbritton/charms/precise/haproxy/trunk ", |
177 | - "location": "lp:~charmers/charms/precise/haproxy/trunk", |
178 | - "revision": "67", |
179 | - "revisions": [ |
180 | - { |
181 | - "authors": [ |
182 | - { |
183 | - "email": "mark.mims@canonical.com", |
184 | - "name": "Mark Mims" |
185 | - } |
186 | - ], |
187 | - "date": "2013-06-03T23:13:29Z", |
188 | - "message": "merging lp:~davidpbritton/charms/precise/haproxy/trunk ", |
189 | - "revno": 67 |
190 | - }, |
191 | - { |
192 | - "authors": [ |
193 | - { |
194 | - "email": "jorge@ubuntu.com", |
195 | - "name": "Jorge O. Castro" |
196 | - } |
197 | - ], |
198 | - "date": "2013-04-22T19:42:18Z", |
199 | - "message": "Add categories.\n", |
200 | - "revno": 66 |
201 | - }, |
202 | - { |
203 | - "authors": [ |
204 | - { |
205 | - "email": "juan.negron@canonical.com", |
206 | - "name": "Juan L. Negron" |
207 | - } |
208 | - ], |
209 | - "date": "2013-02-15T04:55:15Z", |
210 | - "message": "When the reverseproxy relation changes, the website proxy will likely need to be updated, so trigger a config-changed to notify the other side of the relation that it will need to update.\n\nI'm not sure if this the appropriate way to handle this situation, but in practice it seems to work. Please let me know if there is a more accurate or correct way to do it. LP:148605", |
211 | - "revno": 65 |
212 | - }, |
213 | - { |
214 | - "authors": [ |
215 | - { |
216 | - "email": "juan.negron@canonical.com", |
217 | - "name": "Juan L. Negron" |
218 | - } |
219 | - ], |
220 | - "date": "2013-02-15T04:29:14Z", |
221 | - "message": "Merging LP:148065 Relation driven proxying or multi-service proxying", |
222 | - "revno": 64 |
223 | - }, |
224 | - { |
225 | - "authors": [ |
226 | - { |
227 | - "email": "juan.negron@canonical.com", |
228 | - "name": "Juan L. Negron" |
229 | - } |
230 | - ], |
231 | - "date": "2013-01-15T02:04:19Z", |
232 | - "message": "Merging mthaddon's branch. Include nrpe-external-master relation, and ability to inject pre-install hooks if necessary. MP:139978", |
233 | - "revno": 63 |
234 | - }, |
235 | - { |
236 | - "authors": [ |
237 | - { |
238 | - "email": "juan.negron@canonical.com", |
239 | - "name": "Juan L. Negron" |
240 | - } |
241 | - ], |
242 | - "date": "2012-11-21T16:57:10Z", |
243 | - "message": "When a unit of a service having a relation with haproxy is juju-removed, ha proxy was not removing the line for this unit in /etc/haproxy.cfg.", |
244 | - "revno": 62 |
245 | - }, |
246 | - { |
247 | - "authors": [ |
248 | - { |
249 | - "email": "marco@ceppi.net", |
250 | + "basket_name": "wiki", |
251 | + "basket_revision": 5, |
252 | + "branch_deleted": false, |
253 | + "branch_spec": "~benji/charms/bundles/wiki/bundle", |
254 | + "changes": [ |
255 | + { |
256 | + "authors": [ |
257 | + "Benji York <benji.york@canonical.com>" |
258 | + ], |
259 | + "committer": "Benji York <benji.york@canonical.com>", |
260 | + "created": 1380814176.735, |
261 | + "message": "add a series to the bundle\n", |
262 | + "revno": 5 |
263 | + }, |
264 | + { |
265 | + "authors": [ |
266 | + "Jorge O. O'Castro <jorge@example.com>", |
267 | + "Benji York <benji.york@canonical.com>" |
268 | + ], |
269 | + "committer": "Benji York <benji.york@canonical.com>", |
270 | + "created": 1380809461.559, |
271 | + "message": "make the bundle work better (relations working now)", |
272 | + "revno": 4 |
273 | + }, |
274 | + { |
275 | + "authors": [ |
276 | + "Brad Crittenden <bac@canonical.com>" |
277 | + ], |
278 | + "committer": "Brad Crittenden <bac@canonical.com>", |
279 | + "created": 1378218161.439, |
280 | + "message": "Correct icon", |
281 | + "revno": 3 |
282 | + }, |
283 | + { |
284 | + "authors": [ |
285 | + "Brad Crittenden <bac@canonical.com>" |
286 | + ], |
287 | + "committer": "Brad Crittenden <bac@canonical.com>", |
288 | + "created": 1377718535.465, |
289 | + "message": "Added README and icon", |
290 | + "revno": 2 |
291 | + }, |
292 | + { |
293 | + "authors": [ |
294 | + "Brad Crittenden <bac@canonical.com>" |
295 | + ], |
296 | + "committer": "Brad Crittenden <bac@canonical.com>", |
297 | + "created": 1375449744.902, |
298 | + "message": "Initial checking of working config.", |
299 | + "revno": 1 |
300 | + } |
301 | + ], |
302 | + "charm_metadata": { |
303 | + "haproxy": { |
304 | + "categories": [ |
305 | + "cache-proxy" |
306 | + ], |
307 | + "code_source": { |
308 | + "bugs_link": "https://bugs.launchpad.net/charms/+source/haproxy", |
309 | + "last_log": "[sidnei] Fix tests\n", |
310 | + "location": "lp:~charmers/charms/precise/haproxy/trunk", |
311 | + "revision": "70", |
312 | + "revisions": [ |
313 | + { |
314 | + "authors": [ |
315 | + { |
316 | + "email": "marco@ceppi.net", |
317 | + "name": "Marco Ceppi" |
318 | + } |
319 | + ], |
320 | + "date": "2013-11-04T13:52:06Z", |
321 | + "message": "[sidnei] Fix tests\n", |
322 | + "revno": 70 |
323 | + }, |
324 | + { |
325 | + "authors": [ |
326 | + { |
327 | + "email": "marco@ceppi.net", |
328 | + "name": "Marco Ceppi" |
329 | + } |
330 | + ], |
331 | + "date": "2013-11-04T12:41:56Z", |
332 | + "message": "[sidnei] This restores some functionality that got removed by accident during my refactoring and was even documented in README.md, namely, that a service can specify a piece of yaml via relation set services=<> to be used when generating the haproxy stanzas.\n", |
333 | + "revno": 69 |
334 | + }, |
335 | + { |
336 | + "authors": [ |
337 | + { |
338 | + "email": "marco@ceppi.net", |
339 | + "name": "Marco Ceppi" |
340 | + } |
341 | + ], |
342 | + "date": "2013-10-17T03:33:48Z", |
343 | + "message": "[sidnei] The 'all_services' config now supports a static list of servers to be used *in addition* to the ones provided via relation.\n[sidnei] When more than one haproxy units exist, the configured service is upgraded in-place to a mode where traffic is routed to a single haproxy unit (the first one in unit-name order) and the remaining ones are configured as 'backup'. This is done to allow the enforcement of a 'maxconn' session in the configured services, which would not be possible to enforce otherwise.\n[sidnei] Changes to the configured services are properly propagated to the upstream relation.\n", |
344 | + "revno": 68 |
345 | + }, |
346 | + { |
347 | + "authors": [ |
348 | + { |
349 | + "email": "mark.mims@canonical.com", |
350 | + "name": "Mark Mims" |
351 | + } |
352 | + ], |
353 | + "date": "2013-06-03T23:13:29Z", |
354 | + "message": "merging lp:~davidpbritton/charms/precise/haproxy/trunk ", |
355 | + "revno": 67 |
356 | + }, |
357 | + { |
358 | + "authors": [ |
359 | + { |
360 | + "email": "jorge@ubuntu.com", |
361 | + "name": "Jorge O. Castro" |
362 | + } |
363 | + ], |
364 | + "date": "2013-04-22T19:42:18Z", |
365 | + "message": "Add categories.\n", |
366 | + "revno": 66 |
367 | + }, |
368 | + { |
369 | + "authors": [ |
370 | + { |
371 | + "email": "juan.negron@canonical.com", |
372 | + "name": "Juan L. Negron" |
373 | + } |
374 | + ], |
375 | + "date": "2013-02-15T04:55:15Z", |
376 | + "message": "When the reverseproxy relation changes, the website proxy will likely need to be updated, so trigger a config-changed to notify the other side of the relation that it will need to update.\n\nI'm not sure if this the appropriate way to handle this situation, but in practice it seems to work. Please let me know if there is a more accurate or correct way to do it. LP:148605", |
377 | + "revno": 65 |
378 | + }, |
379 | + { |
380 | + "authors": [ |
381 | + { |
382 | + "email": "juan.negron@canonical.com", |
383 | + "name": "Juan L. Negron" |
384 | + } |
385 | + ], |
386 | + "date": "2013-02-15T04:29:14Z", |
387 | + "message": "Merging LP:148065 Relation driven proxying or multi-service proxying", |
388 | + "revno": 64 |
389 | + }, |
390 | + { |
391 | + "authors": [ |
392 | + { |
393 | + "email": "juan.negron@canonical.com", |
394 | + "name": "Juan L. Negron" |
395 | + } |
396 | + ], |
397 | + "date": "2013-01-15T02:04:19Z", |
398 | + "message": "Merging mthaddon's branch. Include nrpe-external-master relation, and ability to inject pre-install hooks if necessary. MP:139978", |
399 | + "revno": 63 |
400 | + }, |
401 | + { |
402 | + "authors": [ |
403 | + { |
404 | + "email": "juan.negron@canonical.com", |
405 | + "name": "Juan L. Negron" |
406 | + } |
407 | + ], |
408 | + "date": "2012-11-21T16:57:10Z", |
409 | + "message": "When a unit of a service having a relation with haproxy is juju-removed, ha proxy was not removing the line for this unit in /etc/haproxy.cfg.", |
410 | + "revno": 62 |
411 | + }, |
412 | + { |
413 | + "authors": [ |
414 | + { |
415 | + "email": "marco@ceppi.net", |
416 | + "name": "Marco Ceppi" |
417 | + } |
418 | + ], |
419 | + "date": "2012-10-29T21:04:13Z", |
420 | + "message": "No more hard coded paths", |
421 | + "revno": 61 |
422 | + } |
423 | + ], |
424 | + "type": "bzr" |
425 | + }, |
426 | + "date_created": "2012-04-16T18:29:51Z", |
427 | + "description": "HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments. It features connection persistence through HTTP cookies, load balancing, header addition, modification, deletion both ways. It has request blocking capabilities and provides interface to display server status.", |
428 | + "distro_series": "precise", |
429 | + "downloads": 1143, |
430 | + "downloads_in_past_30_days": 154, |
431 | + "files": [ |
432 | + "hooks/website-relation-joined", |
433 | + "hooks/tests/test_nrpe_hooks.py", |
434 | + "hooks/nrpe-external-master-relation-joined", |
435 | + "hooks/charmhelpers/fetch/bzrurl.py", |
436 | + "hooks/tests/test_peer_hooks.py", |
437 | + "hooks/tests/test_config_changed_hooks.py", |
438 | + "hooks/tests/test_reverseproxy_hooks.py", |
439 | + "hooks/hooks.py", |
440 | + "hooks/tests/utils_for_tests.py", |
441 | + "hooks/charmhelpers/core/host.py", |
442 | + "hooks/start", |
443 | + "hooks/config-changed", |
444 | + "hooks/reverseproxy-relation-broken", |
445 | + "metadata.yaml", |
446 | + "hooks/stop", |
447 | + "hooks/tests/test_website_hooks.py", |
448 | + "hooks/charmhelpers/contrib/charmsupport/volumes.py", |
449 | + "hooks/munin-relation-changed", |
450 | + "hooks/reverseproxy-relation-departed", |
451 | + "hooks/peer-relation-joined", |
452 | + "hooks/website-relation-changed", |
453 | + "config.yaml", |
454 | + "hooks/peer-relation-changed", |
455 | + "hooks/charmhelpers/contrib/charmsupport/nrpe.py", |
456 | + "hooks/reverseproxy-relation-changed", |
457 | + "hooks/upgrade-charm", |
458 | + "hooks/charmhelpers/fetch/archiveurl.py", |
459 | + "README.md", |
460 | + "hooks/tests/__init__.py", |
461 | + "hooks/charmhelpers/core/hookenv.py", |
462 | + "hooks/install", |
463 | + "hooks/local-monitors-relation-joined", |
464 | + "hooks/tests/test_helpers.py" |
465 | + ], |
466 | + "id": "precise/haproxy-21", |
467 | + "is_approved": true, |
468 | + "is_subordinate": false, |
469 | + "maintainer": { |
470 | + "email": "Juan Negron <juan@ubuntu.com>Tom Haddon <tom.haddon@canonical.com>", |
471 | + "name": "" |
472 | + }, |
473 | + "name": "haproxy", |
474 | + "options": { |
475 | + "default_log": { |
476 | + "default": "global", |
477 | + "description": "Default log", |
478 | + "type": "string" |
479 | + }, |
480 | + "default_mode": { |
481 | + "default": "http", |
482 | + "description": "Default mode", |
483 | + "type": "string" |
484 | + }, |
485 | + "default_options": { |
486 | + "default": "httplog, dontlognull", |
487 | + "description": "Default options", |
488 | + "type": "string" |
489 | + }, |
490 | + "default_retries": { |
491 | + "default": 3, |
492 | + "description": "Set the number of retries to perform on a server after a connection\nfailure. It is important to understand that this value applies to the\nnumber of connection attempts, not full requests. When a connection \nhas effectively been established to a server, there will be no more \nretry.\nIn order to avoid immediate reconnections to a server which is \nrestarting, a turn-around timer of 1 second is applied before a retry\noccurs.\n", |
493 | + "type": "int" |
494 | + }, |
495 | + "default_timeouts": { |
496 | + "default": "queue 20000, client 50000, connect 5000, server 50000", |
497 | + "description": "Default timeouts", |
498 | + "type": "string" |
499 | + }, |
500 | + "enable_monitoring": { |
501 | + "default": false, |
502 | + "description": "Enable monitoring", |
503 | + "type": "boolean" |
504 | + }, |
505 | + "global_debug": { |
506 | + "default": false, |
507 | + "description": "Debug or not", |
508 | + "type": "boolean" |
509 | + }, |
510 | + "global_group": { |
511 | + "default": "haproxy", |
512 | + "description": "Group", |
513 | + "type": "string" |
514 | + }, |
515 | + "global_log": { |
516 | + "default": "127.0.0.1 local0, 127.0.0.1 local1 notice", |
517 | + "description": "Global log line ( multiples ... comma separated list )", |
518 | + "type": "string" |
519 | + }, |
520 | + "global_maxconn": { |
521 | + "default": 4096, |
522 | + "description": "Sets the maximum per-process number of concurrent connections to\n<number>.\n", |
523 | + "type": "int" |
524 | + }, |
525 | + "global_quiet": { |
526 | + "default": false, |
527 | + "description": "Quiet", |
528 | + "type": "boolean" |
529 | + }, |
530 | + "global_spread_checks": { |
531 | + "default": 0, |
532 | + "descriptions": "Sometimes it is desirable to avoid sending health checks to servers at\nexact intervals, for instance when many logical servers are located on\nthe same physical server. With the help of this parameter, it becomes \npossible to add some randomness in the check interval between 0 and \n+/- 50%. A value between 2 and 5 seems to show good results.\n", |
533 | + "type": "int" |
534 | + }, |
535 | + "global_user": { |
536 | + "default": "haproxy", |
537 | + "description": "User", |
538 | + "type": "string" |
539 | + }, |
540 | + "monitoring_allowed_cidr": { |
541 | + "default": "127.0.0.1/32", |
542 | + "description": "CIDR allowed ( multiple CIDRs separated by space ) access to the\nmonitoring interface.\n", |
543 | + "type": "string" |
544 | + }, |
545 | + "monitoring_password": { |
546 | + "default": "changeme", |
547 | + "description": "Password to the monitoring interface ( if \"changeme\", a new password\nwill be generated and displayed in juju-log )\n", |
548 | + "type": "string" |
549 | + }, |
550 | + "monitoring_port": { |
551 | + "default": 10000, |
552 | + "description": "Default monitoring port", |
553 | + "type": "int" |
554 | + }, |
555 | + "monitoring_stats_refresh": { |
556 | + "default": 3, |
557 | + "description": "Monitoring interface refresh interval (in seconds)", |
558 | + "type": "int" |
559 | + }, |
560 | + "monitoring_username": { |
561 | + "default": "haproxy", |
562 | + "description": "Monitoring username", |
563 | + "type": "string" |
564 | + }, |
565 | + "nagios_context": { |
566 | + "default": "juju", |
567 | + "description": "Used by the nrpe-external-master subordinate charm.\nA string that will be prepended to instance name to set the host name\nin nagios. So for instance the hostname would be something like:\n juju-postgresql-0\nIf you're running multiple environments with the same services in them\nthis allows you to differentiate between them.\n", |
568 | + "type": "string" |
569 | + }, |
570 | + "package_status": { |
571 | + "default": "install", |
572 | + "description": "The status of service-affecting packages will be set to this value in the dpkg database.\nUseful valid values are \"install\" and \"hold\".\n", |
573 | + "type": "string" |
574 | + }, |
575 | + "services": { |
576 | + "default": "- service_name: haproxy_service\n service_host: \"0.0.0.0\"\n service_port: 80\n service_options: [balance leastconn]\n server_options: maxconn 100\n", |
577 | + "description": "Services definition(s). Although the variable type is a string, this is\ninterpreted in the charm as yaml. To use multiple services within the\nsame haproxy instance, specify all of the variables (service_name,\nservice_host, service_port, service_options, server_options) with a \"-\"\nbefore the first variable, service_name, as above. Service options is a\ncomma separated list, server options will be appended as a string to\nthe individual server lines for a given listen stanza.\n", |
578 | + "type": "string" |
579 | + }, |
580 | + "sysctl": { |
581 | + "default": "", |
582 | + "description": "YAML-formatted list of sysctl values, e.g.: '{ net.ipv4.tcp_max_syn_backlog : 65536 }'\n", |
583 | + "type": "string" |
584 | + } |
585 | + }, |
586 | + "owner": "charmers", |
587 | + "rating_denominator": 0, |
588 | + "rating_numerator": 0, |
589 | + "relations": { |
590 | + "provides": { |
591 | + "local-monitors": { |
592 | + "interface": "local-monitors", |
593 | + "scope": "container" |
594 | + }, |
595 | + "munin": { |
596 | + "interface": "munin-node" |
597 | + }, |
598 | + "nrpe-external-master": { |
599 | + "interface": "nrpe-external-master", |
600 | + "scope": "container" |
601 | + }, |
602 | + "website": { |
603 | + "interface": "http" |
604 | + } |
605 | + }, |
606 | + "requires": { |
607 | + "reverseproxy": { |
608 | + "interface": "http" |
609 | + } |
610 | + } |
611 | + }, |
612 | + "revision": 0, |
613 | + "summary": "fast and reliable load balancing reverse proxy", |
614 | + "tested_providers": {}, |
615 | + "url": "cs:precise/haproxy-21" |
616 | + }, |
617 | + "mediawiki": { |
618 | + "categories": [ |
619 | + "applications" |
620 | + ], |
621 | + "code_source": { |
622 | + "bugs_link": "https://bugs.launchpad.net/charms/+source/mediawiki", |
623 | + "last_log": "merging lp:~dave-cheney/charms/precise/mediawiki/trunk as per https://code.launchpad.net/~dave-cheney/charms/precise/mediawiki/trunk/+merge/182803", |
624 | + "location": "lp:~charmers/charms/precise/mediawiki/trunk", |
625 | + "revision": "72", |
626 | + "revisions": [ |
627 | + { |
628 | + "authors": [ |
629 | + { |
630 | + "email": "mark.mims@canonical.com", |
631 | + "name": "Mark Mims" |
632 | + } |
633 | + ], |
634 | + "date": "2013-09-20T19:13:28Z", |
635 | + "message": "merging lp:~dave-cheney/charms/precise/mediawiki/trunk as per https://code.launchpad.net/~dave-cheney/charms/precise/mediawiki/trunk/+merge/182803", |
636 | + "revno": 72 |
637 | + }, |
638 | + { |
639 | + "authors": [ |
640 | + { |
641 | + "email": "marco@ceppi.net", |
642 | + "name": "Marco Ceppi" |
643 | + } |
644 | + ], |
645 | + "date": "2013-08-14T05:16:21Z", |
646 | + "message": "Santize input from realtion-list", |
647 | + "revno": 71 |
648 | + }, |
649 | + { |
650 | + "authors": [ |
651 | + { |
652 | + "email": "marco@ceppi.net", |
653 | + "name": "Marco Ceppi" |
654 | + } |
655 | + ], |
656 | + "date": "2013-04-25T18:19:21Z", |
657 | + "message": "Added icon.svg", |
658 | + "revno": 70 |
659 | + }, |
660 | + { |
661 | + "authors": [ |
662 | + { |
663 | + "email": "jorge@ubuntu.com", |
664 | + "name": "Jorge O. Castro" |
665 | + } |
666 | + ], |
667 | + "date": "2013-04-22T19:36:55Z", |
668 | + "message": "Add a category\n", |
669 | + "revno": 69 |
670 | + }, |
671 | + { |
672 | + "authors": [ |
673 | + { |
674 | + "email": "marco@ceppi.net", |
675 | + "name": "Marco Ceppi" |
676 | + } |
677 | + ], |
678 | + "date": "2013-01-24T18:26:58Z", |
679 | + "message": "Cleanup of PHP files according to http://www.mediawiki.org/wiki/Coding_conventions\n", |
680 | + "revno": 68 |
681 | + }, |
682 | + { |
683 | + "authors": [ |
684 | + { |
685 | + "email": "marco@ceppi.net", |
686 | + "name": "Marco Ceppi" |
687 | + } |
688 | + ], |
689 | + "date": "2012-12-20T03:12:05Z", |
690 | + "message": "Typo in multi-unit command line", |
691 | + "revno": 67 |
692 | + }, |
693 | + { |
694 | + "authors": [ |
695 | + { |
696 | + "email": "marco@ceppi.net", |
697 | + "name": "Marco Ceppi" |
698 | + } |
699 | + ], |
700 | + "date": "2012-12-19T20:23:25Z", |
701 | + "message": "Minor clean up and new README file\n", |
702 | + "revno": 66 |
703 | + }, |
704 | + { |
705 | + "authors": [ |
706 | + { |
707 | + "email": "clint@fewbar.com", |
708 | + "name": "Clint Byrum" |
709 | + } |
710 | + ], |
711 | + "date": "2012-06-30T14:37:14Z", |
712 | + "message": "Bumping revision for modernizations", |
713 | + "revno": 65 |
714 | + }, |
715 | + { |
716 | + "authors": [ |
717 | + { |
718 | + "email": "clint@fewbar.com", |
719 | + "name": "Clint Byrum" |
720 | + } |
721 | + ], |
722 | + "date": "2012-06-30T14:36:55Z", |
723 | + "message": "cleanups and modernizing things", |
724 | + "revno": 64 |
725 | + }, |
726 | + { |
727 | + "authors": [ |
728 | + { |
729 | + "email": "clint@ubuntu.com", |
730 | + "name": "Clint Byrum" |
731 | + } |
732 | + ], |
733 | + "date": "2012-06-28T00:02:47Z", |
734 | + "message": "removing old broken munin bits", |
735 | + "revno": 63 |
736 | + } |
737 | + ], |
738 | + "type": "bzr" |
739 | + }, |
740 | + "date_created": "2012-04-16T18:29:51Z", |
741 | + "description": "MediaWiki is a wiki engine (a program for creating a collaboratively\nedited website). It is designed to handle heavy websites containing\nlibrary-like document collections, and supports user uploads of\nimages/sounds, multilingual content, TOC autogeneration, ISBN links,\netc.\n", |
742 | + "distro_series": "precise", |
743 | + "downloads": 2206, |
744 | + "downloads_in_past_30_days": 169, |
745 | + "files": [ |
746 | + "hooks/slave-relation-departed", |
747 | + "hooks/combine-dbservers", |
748 | + "hooks/cache-relation-changed", |
749 | + "hooks/website-relation-joined", |
750 | + "revision", |
751 | + "icon.svg", |
752 | + "hooks/upgrade-charm", |
753 | + "hooks/stop", |
754 | + "README.md", |
755 | + "hooks/db-relation-changed", |
756 | + "hooks/db-relation-departed", |
757 | + "hooks/install", |
758 | + "metadata.yaml", |
759 | + "hooks/config-changed", |
760 | + "hooks/slave-relation-changed", |
761 | + "config.yaml", |
762 | + "hooks/slave-relation-broken" |
763 | + ], |
764 | + "id": "precise/mediawiki-10", |
765 | + "is_approved": true, |
766 | + "is_subordinate": false, |
767 | + "maintainer": { |
768 | + "email": "clint@ubuntu.com", |
769 | + "name": "Clint Byrum" |
770 | + }, |
771 | + "name": "mediawiki", |
772 | + "options": { |
773 | + "admins": { |
774 | + "description": "Admin users to create, user:pass", |
775 | + "type": "string" |
776 | + }, |
777 | + "debug": { |
778 | + "default": false, |
779 | + "description": "turn on debugging features of mediawiki", |
780 | + "type": "boolean" |
781 | + }, |
782 | + "logo": { |
783 | + "description": "URL to fetch logo from", |
784 | + "type": "string" |
785 | + }, |
786 | + "name": { |
787 | + "default": "Please set name of wiki", |
788 | + "description": "The name, or Title of the Wiki", |
789 | + "type": "string" |
790 | + }, |
791 | + "skin": { |
792 | + "default": "vector", |
793 | + "description": "skin for the Wiki", |
794 | + "type": "string" |
795 | + } |
796 | + }, |
797 | + "owner": "charmers", |
798 | + "rating_denominator": 0, |
799 | + "rating_numerator": 0, |
800 | + "relations": { |
801 | + "provides": { |
802 | + "website": { |
803 | + "interface": "http" |
804 | + } |
805 | + }, |
806 | + "requires": { |
807 | + "cache": { |
808 | + "interface": "memcache" |
809 | + }, |
810 | + "db": { |
811 | + "interface": "mysql" |
812 | + }, |
813 | + "slave": { |
814 | + "interface": "mysql" |
815 | + } |
816 | + } |
817 | + }, |
818 | + "revision": 90, |
819 | + "summary": "Website engine for collaborative work", |
820 | + "tested_providers": { |
821 | + "ec2": "SUCCESS", |
822 | + "openstack": "SUCCESS" |
823 | + }, |
824 | + "url": "cs:precise/mediawiki-10" |
825 | + }, |
826 | + "memcached": { |
827 | + "categories": [ |
828 | + "applications" |
829 | + ], |
830 | + "code_source": { |
831 | + "bugs_link": "https://bugs.launchpad.net/charms/+source/memcached", |
832 | + "last_log": "Pavel Pachkovskij 2013-07-30 fix factor default value\n", |
833 | + "location": "lp:~charmers/charms/precise/memcached/trunk", |
834 | + "revision": "55", |
835 | + "revisions": [ |
836 | + { |
837 | + "authors": [ |
838 | + { |
839 | + "email": "marco@ceppi.net", |
840 | + "name": "Marco Ceppi" |
841 | + } |
842 | + ], |
843 | + "date": "2013-07-31T12:29:00Z", |
844 | + "message": "Pavel Pachkovskij 2013-07-30 fix factor default value\n", |
845 | + "revno": 55 |
846 | + }, |
847 | + { |
848 | + "authors": [ |
849 | + { |
850 | + "email": "marco@ceppi.net", |
851 | + "name": "Marco Ceppi" |
852 | + } |
853 | + ], |
854 | + "date": "2013-04-27T00:13:33Z", |
855 | + "message": "Added icon.svg\n", |
856 | + "revno": 54 |
857 | + }, |
858 | + { |
859 | + "authors": [ |
860 | + { |
861 | + "email": "jorge@ubuntu.com", |
862 | + "name": "Jorge O. Castro" |
863 | + } |
864 | + ], |
865 | + "date": "2013-04-22T19:50:20Z", |
866 | + "message": "Add categories\n", |
867 | + "revno": 53 |
868 | + }, |
869 | + { |
870 | + "authors": [ |
871 | + { |
872 | + "email": "matthew.wedgwood@canonical.com", |
873 | + "name": "Matthew Wedgwood" |
874 | + } |
875 | + ], |
876 | + "date": "2013-04-18T16:23:02Z", |
877 | + "message": "[mthaddon] support for pre-install hook structure, support for the nrpe-external-master charm\n\nThis adds support for pre-install hook structure, as supported in a number of other charms, which allows you to do things like set timezone, install custom apt repositories, etc.. It also adds support for the nrpe-external-master charm\n", |
878 | + "revno": 52 |
879 | + }, |
880 | + { |
881 | + "authors": [ |
882 | + { |
883 | + "email": "nmurata@ashisuto.co.jp", |
884 | + "name": "Nobuto MURATA" |
885 | + } |
886 | + ], |
887 | + "date": "2012-09-20T11:43:25Z", |
888 | + "message": "fix sh syntax error (LP: #1053356)\n", |
889 | + "revno": 51 |
890 | + }, |
891 | + { |
892 | + "authors": [ |
893 | + { |
894 | + "email": "juan.negron@canonical.com", |
895 | + "name": "Juan L. Negron" |
896 | + } |
897 | + ], |
898 | + "date": "2012-09-14T20:14:21Z", |
899 | + "message": "Some fixes for things I noticed while reviewing the charm. MP:124280", |
900 | + "revno": 50 |
901 | + }, |
902 | + { |
903 | + "authors": [ |
904 | + { |
905 | + "email": "clint@ubuntu.com", |
906 | + "name": "Clint Byrum" |
907 | + } |
908 | + ], |
909 | + "date": "2012-05-22T22:30:53Z", |
910 | + "message": "setting maintainer", |
911 | + "revno": 49 |
912 | + }, |
913 | + { |
914 | + "authors": [ |
915 | + { |
916 | + "email": "mark.mims@canonical.com", |
917 | + "name": "Mark Mims" |
918 | + } |
919 | + ], |
920 | + "date": "2012-01-28T01:11:44Z", |
921 | + "message": "strong config types\n", |
922 | + "revno": 48 |
923 | + }, |
924 | + { |
925 | + "authors": [ |
926 | + { |
927 | + "email": "clint@ubuntu.com", |
928 | + "name": "Clint Byrum" |
929 | + } |
930 | + ], |
931 | + "date": "2011-12-05T22:55:46Z", |
932 | + "message": "Making memcached fully configurable using config.yaml", |
933 | + "revno": 47 |
934 | + }, |
935 | + { |
936 | + "authors": [ |
937 | + { |
938 | + "email": "mark.mims@canonical.com", |
939 | + "name": "Mark Mims" |
940 | + } |
941 | + ], |
942 | + "date": "2011-10-11T19:17:17Z", |
943 | + "message": "revision split-out\n", |
944 | + "revno": 46 |
945 | + } |
946 | + ], |
947 | + "type": "bzr" |
948 | + }, |
949 | + "date_created": "2012-04-16T18:29:50Z", |
950 | + "description": "Danga Interactive developed memcached to enhance the speed of LiveJournal.com, a site which was already doing 20 million+ dynamic page views per day for 1 million users with a bunch of webservers and a bunch of database servers. memcached dropped the database load to almost nothing, yielding faster page load times for users, better resource utilization, and faster access to the databases on a memcache miss.\nmemcached optimizes specific high-load serving applications that are designed to take advantage of its versatile no-locking memory access system. Clients are available in several different programming languages, to suit the needs of the specific application. Traditionally this has been used in mod_perl apps to avoid storing large chunks of data in Apache memory, and to share this burden across several machines.", |
951 | + "distro_series": "precise", |
952 | + "downloads": 708, |
953 | + "downloads_in_past_30_days": 72, |
954 | + "files": [ |
955 | + "hooks/cache-relation-joined", |
956 | + "hooks/munin-relation-changed", |
957 | + "hooks/nrpe-external-master-relation-changed", |
958 | + "icon.svg", |
959 | + "hooks/upgrade-charm", |
960 | + "hooks/stop", |
961 | + "hooks/start", |
962 | + "hooks/config-changed", |
963 | + "hooks/install", |
964 | + "metadata.yaml", |
965 | + "config.yaml", |
966 | + "revision" |
967 | + ], |
968 | + "id": "precise/memcached-7", |
969 | + "is_approved": true, |
970 | + "is_subordinate": false, |
971 | + "maintainer": { |
972 | + "email": "clint@ubuntu.com", |
973 | + "name": "Clint Byrum" |
974 | + }, |
975 | + "name": "memcached", |
976 | + "options": { |
977 | + "connection-limit": { |
978 | + "default": 1024, |
979 | + "description": "maximum simultaneous connections (memcached option -c)", |
980 | + "type": "int" |
981 | + }, |
982 | + "disable-auto-cleanup": { |
983 | + "default": "no", |
984 | + "description": "do not remove things automatically from the cache on OOM\n(memcached option -M)\n", |
985 | + "type": "string" |
986 | + }, |
987 | + "disable-cas": { |
988 | + "default": "no", |
989 | + "description": "disable use of CAS (and reduce the per-item size by 8 bytes)", |
990 | + "type": "string" |
991 | + }, |
992 | + "disable-large-pages": { |
993 | + "default": "no", |
994 | + "description": "The charm will will try to use large pages if given more than 2GB of RAM. You may want to disable this behavior. (memcached option -L)", |
995 | + "type": "string" |
996 | + }, |
997 | + "extra-options": { |
998 | + "default": "", |
999 | + "description": "memcached has many other options documented in its man page. You may pass them here as a string which will be appended to memcached's execution.", |
1000 | + "type": "string" |
1001 | + }, |
1002 | + "factor": { |
1003 | + "default": 1.25, |
1004 | + "description": "Use <factor> as the multiplier for computing the sizes of memory\nchunks that items are stored in. A lower value may result in less\nwasted memory depending on the total amount of memory available\nand the distribution of item sizes. The default is 1.25.\n", |
1005 | + "type": "float" |
1006 | + }, |
1007 | + "min-item-size": { |
1008 | + "default": -1, |
1009 | + "description": "Allocate a minimum of <size> bytes for the item key, value,\nand flags. The default is 48. If you have a lot of small\nkeys and values, you can get a significant memory efficiency\ngain with a lower value. If you use a high chunk growth factor\n(-f option), on the other hand, you may want to\nincrease the size to allow a bigger percentage of your\nitems to fit in the most densely packed (smallest) chunks.\n(memcached option -n)\n", |
1010 | + "type": "int" |
1011 | + }, |
1012 | + "nagios_context": { |
1013 | + "default": "juju", |
1014 | + "description": "Used by the nrpe-external-master subordinate charm. A string that will be prepended to instance name to set the host name in nagios. So for instance the hostname would be something like:\n juju-memcached-0\nIf you're running multiple environments with the same services in them this allows you to differentiate between them.\n", |
1015 | + "type": "string" |
1016 | + }, |
1017 | + "request-limit": { |
1018 | + "default": -1, |
1019 | + "description": "limit of requests a single client can make at one time\n(memcached option -R) -1 takes memcached default (20)\n", |
1020 | + "type": "int" |
1021 | + }, |
1022 | + "size": { |
1023 | + "default": 768, |
1024 | + "description": "Size of memcache pool in MiB (memcached option -m)", |
1025 | + "type": "int" |
1026 | + }, |
1027 | + "slab-page-size": { |
1028 | + "default": -1, |
1029 | + "description": "Override the size of each slab page in bytes. In mundane\nwords, it adjusts the maximum item size that memcached\nwill accept. You can use the suffixes K and M to specify\nthe size as well, so use 2000000 or 2000K or 2M if you want\na maximum size of 2 MB per object. It is not recommended\nto raise this limit above 1 MB due just to performance reasons.\nThe default value is 1 MB. (memcached option -I) -1 takes\nthe memcached default.\n", |
1030 | + "type": "int" |
1031 | + }, |
1032 | + "tcp-port": { |
1033 | + "default": 11211, |
1034 | + "description": "TCP port to listen on. (memcached option -p)", |
1035 | + "type": "int" |
1036 | + }, |
1037 | + "threads": { |
1038 | + "default": -1, |
1039 | + "description": "number of threads to use. default is 4. (memcached option -t)", |
1040 | + "type": "int" |
1041 | + }, |
1042 | + "udp-port": { |
1043 | + "default": 0, |
1044 | + "description": "UDP port to listen on (memcached option -U)", |
1045 | + "type": "int" |
1046 | + } |
1047 | + }, |
1048 | + "owner": "charmers", |
1049 | + "rating_denominator": 0, |
1050 | + "rating_numerator": 0, |
1051 | + "relations": { |
1052 | + "provides": { |
1053 | + "cache": { |
1054 | + "interface": "memcache" |
1055 | + }, |
1056 | + "munin": { |
1057 | + "interface": "munin-node" |
1058 | + }, |
1059 | + "nrpe-external-master": { |
1060 | + "interface": "nrpe-external-master", |
1061 | + "scope": "container" |
1062 | + } |
1063 | + }, |
1064 | + "requires": {} |
1065 | + }, |
1066 | + "revision": 28, |
1067 | + "summary": "A high-performance memory object caching system", |
1068 | + "tested_providers": { |
1069 | + "ec2": "SUCCESS", |
1070 | + "local": "SUCCESS", |
1071 | + "openstack": "SUCCESS" |
1072 | + }, |
1073 | + "url": "cs:precise/memcached-7" |
1074 | + }, |
1075 | + "mysql": { |
1076 | + "categories": [ |
1077 | + "databases" |
1078 | + ], |
1079 | + "code_source": { |
1080 | + "bugs_link": "https://bugs.launchpad.net/charms/+source/mysql", |
1081 | + "last_log": "[gnuoy] Execute any preinstall code that's in exec.d as part of the install hook.\n", |
1082 | + "location": "lp:~charmers/charms/precise/mysql/trunk", |
1083 | + "revision": "106", |
1084 | + "revisions": [ |
1085 | + { |
1086 | + "authors": [ |
1087 | + { |
1088 | + "email": "marco@ceppi.net", |
1089 | + "name": "Marco Ceppi" |
1090 | + } |
1091 | + ], |
1092 | + "date": "2013-11-12T21:31:27Z", |
1093 | + "message": "[gnuoy] Execute any preinstall code that's in exec.d as part of the install hook.\n", |
1094 | + "revno": 106 |
1095 | + }, |
1096 | + { |
1097 | + "authors": [ |
1098 | + { |
1099 | + "email": "marco@ceppi.net", |
1100 | + "name": "Marco Ceppi" |
1101 | + } |
1102 | + ], |
1103 | + "date": "2013-10-25T16:37:07Z", |
1104 | + "message": "Updated README", |
1105 | + "revno": 105 |
1106 | + }, |
1107 | + { |
1108 | + "authors": [ |
1109 | + { |
1110 | + "email": "adamg@ubuntu.com", |
1111 | + "name": "Adam Gandelman" |
1112 | + } |
1113 | + ], |
1114 | + "date": "2013-08-09T11:08:20Z", |
1115 | + "message": "[ahasenack] Wait for the rbd device to be available before attempting to format it.", |
1116 | + "revno": 104 |
1117 | + }, |
1118 | + { |
1119 | + "authors": [ |
1120 | + { |
1121 | + "email": "adamg@canonical.com", |
1122 | + "name": "Adam Gandelman" |
1123 | + } |
1124 | + ], |
1125 | + "date": "2013-07-23T22:59:11Z", |
1126 | + "message": "Merge juju-core compat. fix from James Page.", |
1127 | + "revno": 103 |
1128 | + }, |
1129 | + { |
1130 | + "authors": [ |
1131 | + { |
1132 | + "email": "jorge@ubuntu.com", |
1133 | + "name": "Jorge O. Castro" |
1134 | + } |
1135 | + ], |
1136 | + "date": "2013-07-08T13:40:01Z", |
1137 | + "message": "Fix category.\n", |
1138 | + "revno": 102 |
1139 | + }, |
1140 | + { |
1141 | + "authors": [ |
1142 | + { |
1143 | + "email": "mark.mims@canonical.com", |
1144 | + "name": "Mark Mims" |
1145 | + } |
1146 | + ], |
1147 | + "date": "2013-06-07T16:38:50Z", |
1148 | + "message": "merging lp:~dannf/charms/precise/mysql/lp1188424 as per https://code.launchpad.net/~dannf/charms/precise/mysql/lp1188424/+merge/167881", |
1149 | + "revno": 101 |
1150 | + }, |
1151 | + { |
1152 | + "authors": [ |
1153 | + { |
1154 | + "email": "marco@ceppi.net", |
1155 | + "name": "Marco Ceppi" |
1156 | + } |
1157 | + ], |
1158 | + "date": "2013-06-06T12:32:17Z", |
1159 | + "message": "James Page 2013-06-06 Stop using socket.getfqdn in shared-db hooks as this assumes DNS resolution between instances is functional\n", |
1160 | + "revno": 100 |
1161 | + }, |
1162 | + { |
1163 | + "authors": [ |
1164 | + { |
1165 | + "email": "marco@ceppi.net", |
1166 | + "name": "Marco Ceppi" |
1167 | + } |
1168 | + ], |
1169 | + "date": "2013-06-05T16:02:08Z", |
1170 | + "message": "Fixes master/slave relation", |
1171 | + "revno": 99 |
1172 | + }, |
1173 | + { |
1174 | + "authors": [ |
1175 | + { |
1176 | + "email": "marco@ceppi.net", |
1177 | + "name": "Marco Ceppi" |
1178 | + } |
1179 | + ], |
1180 | + "date": "2013-05-30T16:03:12Z", |
1181 | + "message": "Maintainership change lp:1178384", |
1182 | + "revno": 98 |
1183 | + }, |
1184 | + { |
1185 | + "authors": [ |
1186 | + { |
1187 | + "email": "marco@ceppi.net", |
1188 | + "name": "Marco Ceppi" |
1189 | + } |
1190 | + ], |
1191 | + "date": "2013-05-30T16:00:48Z", |
1192 | + "message": "ha-support: https://code.launchpad.net/~openstack-charmers/charms/precise/mysql/ha-support/+merge/165059\n", |
1193 | + "revno": 97 |
1194 | + } |
1195 | + ], |
1196 | + "type": "bzr" |
1197 | + }, |
1198 | + "date_created": "2012-04-16T18:30:00Z", |
1199 | + "description": "MySQL is a fast, stable and true multi-user, multi-threaded SQL database\nserver. SQL (Structured Query Language) is the most popular database query\nlanguage in the world. The main goals of MySQL are speed, robustness and\nease of use.\n", |
1200 | + "distro_series": "precise", |
1201 | + "downloads": 11388, |
1202 | + "downloads_in_past_30_days": 1191, |
1203 | + "files": [ |
1204 | + "hooks/munin-relation-joined", |
1205 | + "hooks/monitors.common.bash", |
1206 | + "hooks/db-relation-joined", |
1207 | + "hooks/shared-db-relation-changed", |
1208 | + "hooks/master-relation-departed", |
1209 | + "hooks/monitors-relation-departed", |
1210 | + "hooks/master-relation-broken", |
1211 | + "hooks/lib/cluster_utils.py", |
1212 | + "hooks/shared_db_relations.py", |
1213 | + "hooks/slave-relation-changed", |
1214 | + "README.md", |
1215 | + "hooks/ha-relation-changed", |
1216 | + "hooks/munin-relation-changed", |
1217 | + "hooks/common.py", |
1218 | + "hooks/start", |
1219 | + "hooks/config-changed", |
1220 | + "hooks/db-relation-broken", |
1221 | + "hooks/shared-db-relation-joined", |
1222 | + "hooks/ha_relations.py", |
1223 | + "hooks/cluster-relation-changed", |
1224 | + "hooks/slave-relation-departed", |
1225 | + "hooks/install", |
1226 | + "hooks/ceph-relation-changed", |
1227 | + "metadata.yaml", |
1228 | + "hooks/ha-relation-joined", |
1229 | + "hooks/stop", |
1230 | + "hooks/local-monitors-relation-joined", |
1231 | + "hooks/db-admin-relation-joined", |
1232 | + "config.yaml", |
1233 | + "hooks/monitors-relation-joined", |
1234 | + "icon.svg", |
1235 | + "hooks/upgrade-charm", |
1236 | + "hooks/lib/utils.py", |
1237 | + "hooks/ceph-relation-joined", |
1238 | + "hooks/master-relation-changed", |
1239 | + "hooks/lib/__init__.py", |
1240 | + "hooks/slave-relation-joined", |
1241 | + "hooks/lib/ceph_utils.py", |
1242 | + "hooks/slave-relation-broken", |
1243 | + "revision", |
1244 | + "hooks/monitors-relation-broken" |
1245 | + ], |
1246 | + "id": "precise/mysql-29", |
1247 | + "is_approved": true, |
1248 | + "is_subordinate": false, |
1249 | + "maintainer": { |
1250 | + "email": "marco@ceppi.net", |
1251 | "name": "Marco Ceppi" |
1252 | - } |
1253 | - ], |
1254 | - "date": "2012-10-29T21:04:13Z", |
1255 | - "message": "No more hard coded paths", |
1256 | - "revno": 61 |
1257 | - }, |
1258 | - { |
1259 | - "authors": [ |
1260 | - { |
1261 | - "email": "juan.negron@canonical.com", |
1262 | - "name": "Juan L. Negron" |
1263 | - } |
1264 | - ], |
1265 | - "date": "2012-10-03T14:23:30Z", |
1266 | - "message": "Adding changes in MP:127191 by gnoy", |
1267 | - "revno": 60 |
1268 | - }, |
1269 | - { |
1270 | - "authors": [ |
1271 | - { |
1272 | - "email": "juan.negron@canonical.com", |
1273 | - "name": "Juan L. Negron" |
1274 | - } |
1275 | - ], |
1276 | - "date": "2012-10-03T14:15:01Z", |
1277 | - "message": "PEP8 changes", |
1278 | - "revno": 59 |
1279 | - }, |
1280 | - { |
1281 | - "authors": [ |
1282 | - { |
1283 | - "email": "juan.negron@canonical.com", |
1284 | - "name": "Juan L. Negron" |
1285 | - } |
1286 | - ], |
1287 | - "date": "2012-09-17T16:50:34Z", |
1288 | - "message": "Merging changes by Liam in MP:124731", |
1289 | - "revno": 58 |
1290 | - } |
1291 | - ], |
1292 | - "type": "bzr" |
1293 | - }, |
1294 | - "date_created": "2012-04-16T18:29:51Z", |
1295 | - "description": "HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments. It features connection persistence through HTTP cookies, load balancing, header addition, modification, deletion both ways. It has request blocking capabilities and provides interface to display server status.", |
1296 | - "distro_series": "precise", |
1297 | - "downloads": 940, |
1298 | - "downloads_in_past_30_days": 66, |
1299 | - "files": [ |
1300 | - "hooks/nrpe.py", |
1301 | - "hooks/munin-relation-changed", |
1302 | - "hooks/hooks.py", |
1303 | - "hooks/website-relation-joined", |
1304 | - "revision", |
1305 | - "metadata.yaml", |
1306 | - "hooks/stop", |
1307 | - "hooks/test_hooks.py", |
1308 | - "README.md", |
1309 | - "hooks/start", |
1310 | - "hooks/config-changed", |
1311 | - "hooks/nrpe-external-master-relation-changed", |
1312 | - "hooks/reverseproxy-relation-broken", |
1313 | - "hooks/install", |
1314 | - "hooks/reverseproxy-relation-departed", |
1315 | - "hooks/website-relation-changed", |
1316 | - "config.yaml", |
1317 | - "hooks/reverseproxy-relation-changed" |
1318 | - ], |
1319 | - "id": "precise/haproxy-18", |
1320 | - "is_approved": true, |
1321 | - "is_subordinate": false, |
1322 | - "maintainer": { |
1323 | - "email": "Juan Negron <juan@ubuntu.com>Tom Haddon <tom.haddon@canonical.com>", |
1324 | - "name": "" |
1325 | - }, |
1326 | - "name": "haproxy", |
1327 | - "options": { |
1328 | - "default_log": { |
1329 | - "default": "global", |
1330 | - "description": "Default log", |
1331 | - "type": "string" |
1332 | - }, |
1333 | - "default_mode": { |
1334 | - "default": "http", |
1335 | - "description": "Default mode", |
1336 | - "type": "string" |
1337 | - }, |
1338 | - "default_options": { |
1339 | - "default": "httplog, dontlognull", |
1340 | - "description": "Default options", |
1341 | - "type": "string" |
1342 | - }, |
1343 | - "default_retries": { |
1344 | - "default": 3, |
1345 | - "description": "Set the number of retries to perform on a server after a connection\nfailure. It is important to understand that this value applies to the\nnumber of connection attempts, not full requests. When a connection \nhas effectively been established to a server, there will be no more \nretry.\nIn order to avoid immediate reconnections to a server which is \nrestarting, a turn-around timer of 1 second is applied before a retry\noccurs.\n", |
1346 | - "type": "int" |
1347 | - }, |
1348 | - "default_timeouts": { |
1349 | - "default": "queue 1000, connect 1000, client 1000, server 1000", |
1350 | - "description": "Default timeouts", |
1351 | - "type": "string" |
1352 | - }, |
1353 | - "enable_monitoring": { |
1354 | - "default": false, |
1355 | - "description": "Enable monitoring", |
1356 | - "type": "boolean" |
1357 | - }, |
1358 | - "global_debug": { |
1359 | - "default": false, |
1360 | - "description": "Debug or not", |
1361 | - "type": "boolean" |
1362 | - }, |
1363 | - "global_group": { |
1364 | - "default": "haproxy", |
1365 | - "description": "Group", |
1366 | - "type": "string" |
1367 | - }, |
1368 | - "global_log": { |
1369 | - "default": "127.0.0.1 local0, 127.0.0.1 local1 notice", |
1370 | - "description": "Global log line ( multiples ... comma separated list )", |
1371 | - "type": "string" |
1372 | - }, |
1373 | - "global_maxconn": { |
1374 | - "default": 4096, |
1375 | - "description": "Sets the maximum per-process number of concurrent connections to\n<number>.\n", |
1376 | - "type": "int" |
1377 | - }, |
1378 | - "global_quiet": { |
1379 | - "default": false, |
1380 | - "description": "Quiet", |
1381 | - "type": "boolean" |
1382 | - }, |
1383 | - "global_spread_checks": { |
1384 | - "default": 0, |
1385 | - "descriptions": "Sometimes it is desirable to avoid sending health checks to servers at\nexact intervals, for instance when many logical servers are located on\nthe same physical server. With the help of this parameter, it becomes \npossible to add some randomness in the check interval between 0 and \n+/- 50%. A value between 2 and 5 seems to show good results.\n", |
1386 | - "type": "int" |
1387 | - }, |
1388 | - "global_user": { |
1389 | - "default": "haproxy", |
1390 | - "description": "User", |
1391 | - "type": "string" |
1392 | - }, |
1393 | - "monitoring_allowed_cidr": { |
1394 | - "default": "127.0.0.1/32", |
1395 | - "description": "CIDR allowed ( multiple CIDRs separated by space ) access to the\nmonitoring interface.\n", |
1396 | - "type": "string" |
1397 | - }, |
1398 | - "monitoring_password": { |
1399 | - "default": "changeme", |
1400 | - "description": "Password to the monitoring interface ( if \"changeme\", a new password\nwill be generated and displayed in juju-log )\n", |
1401 | - "type": "string" |
1402 | - }, |
1403 | - "monitoring_port": { |
1404 | - "default": 10000, |
1405 | - "description": "Default monitoring port", |
1406 | - "type": "int" |
1407 | - }, |
1408 | - "monitoring_stats_refresh": { |
1409 | - "default": 3, |
1410 | - "description": "Monitoring interface refresh interval (in seconds)", |
1411 | - "type": "int" |
1412 | - }, |
1413 | - "monitoring_username": { |
1414 | - "default": "haproxy", |
1415 | - "description": "Monitoring username", |
1416 | - "type": "string" |
1417 | - }, |
1418 | - "nagios_context": { |
1419 | - "default": "juju", |
1420 | - "description": "Used by the nrpe-external-master subordinate charm.\nA string that will be prepended to instance name to set the host name\nin nagios. So for instance the hostname would be something like:\n juju-postgresql-0\nIf you're running multiple environments with the same services in them\nthis allows you to differentiate between them.\n", |
1421 | - "type": "string" |
1422 | - }, |
1423 | + }, |
1424 | + "name": "mysql", |
1425 | + "options": { |
1426 | + "binlog-format": { |
1427 | + "default": "MIXED", |
1428 | + "description": "If binlogging is enabled, this is the format that will be used. Ignored when tuning-level == fast.", |
1429 | + "type": "string" |
1430 | + }, |
1431 | + "block-size": { |
1432 | + "default": 5, |
1433 | + "description": "Default block storage size to create when setting up MySQL block storage.\nThis value should be specified in GB (e.g. 100 not 100GB).\n", |
1434 | + "type": "int" |
1435 | + }, |
1436 | + "dataset-size": { |
1437 | + "default": "80%", |
1438 | + "description": "How much data do you want to keep in memory in the DB. This will be used to tune settings in the database server appropriately. Any more specific settings will override these defaults though. This currently sets innodb_buffer_pool_size or key_cache_size depending on the setting in preferred-storage-engine. If query-cache-type is set to 'ON' or 'DEMAND' 20% of this is given to query-cache-size. Suffix this value with 'K','M','G', or 'T' to get the relevant kilo/mega/etc. bytes. If suffixed with %, one will get that percentage of RAM devoted to dataset and (if enabled) query cache.", |
1439 | + "type": "string" |
1440 | + }, |
1441 | + "flavor": { |
1442 | + "default": "distro", |
1443 | + "description": "Possible values are 'distro' or 'percona'", |
1444 | + "type": "string" |
1445 | + }, |
1446 | + "ha-bindiface": { |
1447 | + "default": "eth0", |
1448 | + "description": "Default network interface on which HA cluster will bind to communication\nwith the other members of the HA Cluster.\n", |
1449 | + "type": "string" |
1450 | + }, |
1451 | + "ha-mcastport": { |
1452 | + "default": 5411, |
1453 | + "description": "Default multicast port number that will be used to communicate between\nHA Cluster nodes.\n", |
1454 | + "type": "int" |
1455 | + }, |
1456 | + "max-connections": { |
1457 | + "default": -1, |
1458 | + "description": "Maximum connections to allow. -1 means use the server's compiled in default.", |
1459 | + "type": "int" |
1460 | + }, |
1461 | + "preferred-storage-engine": { |
1462 | + "default": "InnoDB", |
1463 | + "description": "Tune the server for usage of this storage engine. Other possible value is MyISAM. Comma separated will cause settings to split resources evenly among given engines.", |
1464 | + "type": "string" |
1465 | + }, |
1466 | + "query-cache-size": { |
1467 | + "default": -1, |
1468 | + "description": "Override the computed version from dataset-size. Still works if query-cache-type is \"OFF\" since sessions can override the cache type setting on their own.", |
1469 | + "type": "int" |
1470 | + }, |
1471 | + "query-cache-type": { |
1472 | + "default": "OFF", |
1473 | + "description": "Query cache is usually a good idea, but can hurt concurrency. Valid values are \"OFF\", \"ON\", or \"DEMAND\". http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_query_cache_type", |
1474 | + "type": "string" |
1475 | + }, |
1476 | + "rbd-name": { |
1477 | + "default": "mysql1", |
1478 | + "description": "The name that will be used to create the Ceph's RBD image with. If the\nimage name exists in Ceph, it will be re-used and the data will be\noverwritten.\n", |
1479 | + "type": "string" |
1480 | + }, |
1481 | + "tuning-level": { |
1482 | + "default": "safest", |
1483 | + "description": "Valid values are 'safest', 'fast', and 'unsafe'. If set to safest, all settings are tuned to have maximum safety at the cost of performance. Fast will turn off most controls, but may lose data on crashes. unsafe will turn off all protections.", |
1484 | + "type": "string" |
1485 | + }, |
1486 | + "vip": { |
1487 | + "description": "Virtual IP to use to front mysql in ha configuration", |
1488 | + "type": "string" |
1489 | + }, |
1490 | + "vip_cidr": { |
1491 | + "default": 24, |
1492 | + "description": "Netmask that will be used for the Virtual IP", |
1493 | + "type": "int" |
1494 | + }, |
1495 | + "vip_iface": { |
1496 | + "default": "eth0", |
1497 | + "description": "Network Interface where to place the Virtual IP", |
1498 | + "type": "string" |
1499 | + } |
1500 | + }, |
1501 | + "owner": "charmers", |
1502 | + "rating_denominator": 0, |
1503 | + "rating_numerator": 0, |
1504 | + "relations": { |
1505 | + "provides": { |
1506 | + "db": { |
1507 | + "interface": "mysql" |
1508 | + }, |
1509 | + "db-admin": { |
1510 | + "interface": "mysql-root" |
1511 | + }, |
1512 | + "local-monitors": { |
1513 | + "interface": "local-monitors", |
1514 | + "scope": "container" |
1515 | + }, |
1516 | + "master": { |
1517 | + "interface": "mysql-oneway-replication" |
1518 | + }, |
1519 | + "monitors": { |
1520 | + "interface": "monitors" |
1521 | + }, |
1522 | + "munin": { |
1523 | + "interface": "munin-node" |
1524 | + }, |
1525 | + "shared-db": { |
1526 | + "interface": "mysql-shared" |
1527 | + } |
1528 | + }, |
1529 | + "requires": { |
1530 | + "ceph": { |
1531 | + "interface": "ceph-client" |
1532 | + }, |
1533 | + "ha": { |
1534 | + "interface": "hacluster", |
1535 | + "scope": "container" |
1536 | + }, |
1537 | + "slave": { |
1538 | + "interface": "mysql-oneway-replication" |
1539 | + } |
1540 | + } |
1541 | + }, |
1542 | + "revision": 309, |
1543 | + "summary": "MySQL is a fast, stable and true multi-user, multi-threaded SQL database", |
1544 | + "tested_providers": {}, |
1545 | + "url": "cs:precise/mysql-29" |
1546 | + } |
1547 | + }, |
1548 | + "data": { |
1549 | + "relations": [ |
1550 | + [ |
1551 | + "mediawiki:cache", |
1552 | + "memcached:cache" |
1553 | + ], |
1554 | + [ |
1555 | + "mediawiki:db", |
1556 | + "mysql:db" |
1557 | + ], |
1558 | + [ |
1559 | + "haproxy:reverseproxy", |
1560 | + "mediawiki:website" |
1561 | + ] |
1562 | + ], |
1563 | + "series": "precise", |
1564 | "services": { |
1565 | - "default": "- service_name: haproxy_service\n service_host: \"0.0.0.0\"\n service_port: 80\n service_options: [balance leastconn]\n server_options: maxconn 100\n", |
1566 | - "description": "Services definition(s). Although the variable type is a string, this is\ninterpreted in the charm as yaml. To use multiple services within the\nsame haproxy instance, specify all of the variables (service_name,\nservice_host, service_port, service_options, server_options) with a \"-\"\nbefore the first variable, service_name, as above. Service options is a\ncomma separated list, server options will be appended as a string to\nthe individual server lines for a given listen stanza.\n", |
1567 | - "type": "string" |
1568 | - } |
1569 | - }, |
1570 | - "owner": "charmers", |
1571 | - "rating_denominator": 0, |
1572 | - "rating_numerator": 0, |
1573 | - "relations": { |
1574 | - "provides": { |
1575 | - "munin": { |
1576 | - "interface": "munin-node" |
1577 | - }, |
1578 | - "nrpe-external-master": { |
1579 | - "interface": "nrpe-external-master", |
1580 | - "scope": "container" |
1581 | - }, |
1582 | - "website": { |
1583 | - "interface": "http" |
1584 | - } |
1585 | - }, |
1586 | - "requires": { |
1587 | - "reverseproxy": { |
1588 | - "interface": "http" |
1589 | - } |
1590 | - } |
1591 | - }, |
1592 | - "revision": 42, |
1593 | - "summary": "fast and reliable load balancing reverse proxy", |
1594 | - "tested_providers": { |
1595 | - "ec2": "SUCCESS", |
1596 | - "local": "SUCCESS", |
1597 | - "openstack": "SUCCESS" |
1598 | - }, |
1599 | - "url": "cs:precise/haproxy-18" |
1600 | - }, |
1601 | - "mediawiki": { |
1602 | - "categories": [ |
1603 | - "applications" |
1604 | - ], |
1605 | - "code_source": { |
1606 | - "bugs_link": "https://bugs.launchpad.net/charms/+source/mediawiki", |
1607 | - "last_log": "merging lp:~dave-cheney/charms/precise/mediawiki/trunk as per https://code.launchpad.net/~dave-cheney/charms/precise/mediawiki/trunk/+merge/182803", |
1608 | - "location": "lp:~charmers/charms/precise/mediawiki/trunk", |
1609 | - "revision": "72", |
1610 | - "revisions": [ |
1611 | - { |
1612 | - "authors": [ |
1613 | - { |
1614 | - "email": "mark.mims@canonical.com", |
1615 | - "name": "Mark Mims" |
1616 | - } |
1617 | - ], |
1618 | - "date": "2013-09-20T19:13:28Z", |
1619 | - "message": "merging lp:~dave-cheney/charms/precise/mediawiki/trunk as per https://code.launchpad.net/~dave-cheney/charms/precise/mediawiki/trunk/+merge/182803", |
1620 | - "revno": 72 |
1621 | - }, |
1622 | - { |
1623 | - "authors": [ |
1624 | - { |
1625 | - "email": "marco@ceppi.net", |
1626 | - "name": "Marco Ceppi" |
1627 | - } |
1628 | - ], |
1629 | - "date": "2013-08-14T05:16:21Z", |
1630 | - "message": "Santize input from realtion-list", |
1631 | - "revno": 71 |
1632 | - }, |
1633 | - { |
1634 | - "authors": [ |
1635 | - { |
1636 | - "email": "marco@ceppi.net", |
1637 | - "name": "Marco Ceppi" |
1638 | - } |
1639 | - ], |
1640 | - "date": "2013-04-25T18:19:21Z", |
1641 | - "message": "Added icon.svg", |
1642 | - "revno": 70 |
1643 | - }, |
1644 | - { |
1645 | - "authors": [ |
1646 | - { |
1647 | - "email": "jorge@ubuntu.com", |
1648 | - "name": "Jorge O. Castro" |
1649 | - } |
1650 | - ], |
1651 | - "date": "2013-04-22T19:36:55Z", |
1652 | - "message": "Add a category\n", |
1653 | - "revno": 69 |
1654 | - }, |
1655 | - { |
1656 | - "authors": [ |
1657 | - { |
1658 | - "email": "marco@ceppi.net", |
1659 | - "name": "Marco Ceppi" |
1660 | - } |
1661 | - ], |
1662 | - "date": "2013-01-24T18:26:58Z", |
1663 | - "message": "Cleanup of PHP files according to http://www.mediawiki.org/wiki/Coding_conventions\n", |
1664 | - "revno": 68 |
1665 | - }, |
1666 | - { |
1667 | - "authors": [ |
1668 | - { |
1669 | - "email": "marco@ceppi.net", |
1670 | - "name": "Marco Ceppi" |
1671 | - } |
1672 | - ], |
1673 | - "date": "2012-12-20T03:12:05Z", |
1674 | - "message": "Typo in multi-unit command line", |
1675 | - "revno": 67 |
1676 | - }, |
1677 | - { |
1678 | - "authors": [ |
1679 | - { |
1680 | - "email": "marco@ceppi.net", |
1681 | - "name": "Marco Ceppi" |
1682 | - } |
1683 | - ], |
1684 | - "date": "2012-12-19T20:23:25Z", |
1685 | - "message": "Minor clean up and new README file\n", |
1686 | - "revno": 66 |
1687 | - }, |
1688 | - { |
1689 | - "authors": [ |
1690 | - { |
1691 | - "email": "clint@fewbar.com", |
1692 | - "name": "Clint Byrum" |
1693 | - } |
1694 | - ], |
1695 | - "date": "2012-06-30T14:37:14Z", |
1696 | - "message": "Bumping revision for modernizations", |
1697 | - "revno": 65 |
1698 | - }, |
1699 | - { |
1700 | - "authors": [ |
1701 | - { |
1702 | - "email": "clint@fewbar.com", |
1703 | - "name": "Clint Byrum" |
1704 | - } |
1705 | - ], |
1706 | - "date": "2012-06-30T14:36:55Z", |
1707 | - "message": "cleanups and modernizing things", |
1708 | - "revno": 64 |
1709 | - }, |
1710 | - { |
1711 | - "authors": [ |
1712 | - { |
1713 | - "email": "clint@ubuntu.com", |
1714 | - "name": "Clint Byrum" |
1715 | - } |
1716 | - ], |
1717 | - "date": "2012-06-28T00:02:47Z", |
1718 | - "message": "removing old broken munin bits", |
1719 | - "revno": 63 |
1720 | - } |
1721 | - ], |
1722 | - "type": "bzr" |
1723 | - }, |
1724 | - "date_created": "2012-04-16T18:29:51Z", |
1725 | - "description": "MediaWiki is a wiki engine (a program for creating a collaboratively\nedited website). It is designed to handle heavy websites containing\nlibrary-like document collections, and supports user uploads of\nimages/sounds, multilingual content, TOC autogeneration, ISBN links,\netc.\n", |
1726 | - "distro_series": "precise", |
1727 | - "downloads": 1944, |
1728 | - "downloads_in_past_30_days": 281, |
1729 | - "files": [ |
1730 | - "hooks/slave-relation-departed", |
1731 | - "hooks/combine-dbservers", |
1732 | - "hooks/cache-relation-changed", |
1733 | - "hooks/website-relation-joined", |
1734 | - "revision", |
1735 | - "icon.svg", |
1736 | - "hooks/upgrade-charm", |
1737 | - "hooks/stop", |
1738 | - "README.md", |
1739 | - "hooks/db-relation-changed", |
1740 | - "hooks/db-relation-departed", |
1741 | - "hooks/install", |
1742 | - "metadata.yaml", |
1743 | - "hooks/config-changed", |
1744 | - "hooks/slave-relation-changed", |
1745 | - "config.yaml", |
1746 | - "hooks/slave-relation-broken" |
1747 | - ], |
1748 | - "id": "precise/mediawiki-10", |
1749 | - "is_approved": true, |
1750 | - "is_subordinate": false, |
1751 | - "maintainer": { |
1752 | - "email": "clint@ubuntu.com", |
1753 | - "name": "Clint Byrum" |
1754 | - }, |
1755 | - "name": "mediawiki", |
1756 | - "options": { |
1757 | - "admins": { |
1758 | - "description": "Admin users to create, user:pass", |
1759 | - "type": "string" |
1760 | - }, |
1761 | - "debug": { |
1762 | - "default": false, |
1763 | - "description": "turn on debugging features of mediawiki", |
1764 | - "type": "boolean" |
1765 | - }, |
1766 | - "logo": { |
1767 | - "description": "URL to fetch logo from", |
1768 | - "type": "string" |
1769 | - }, |
1770 | - "name": { |
1771 | - "default": "Please set name of wiki", |
1772 | - "description": "The name, or Title of the Wiki", |
1773 | - "type": "string" |
1774 | - }, |
1775 | - "skin": { |
1776 | - "default": "vector", |
1777 | - "description": "skin for the Wiki", |
1778 | - "type": "string" |
1779 | - } |
1780 | - }, |
1781 | - "owner": "charmers", |
1782 | - "rating_denominator": 0, |
1783 | - "rating_numerator": 0, |
1784 | - "relations": { |
1785 | - "provides": { |
1786 | - "website": { |
1787 | - "interface": "http" |
1788 | - } |
1789 | - }, |
1790 | - "requires": { |
1791 | - "cache": { |
1792 | - "interface": "memcache" |
1793 | - }, |
1794 | - "db": { |
1795 | - "interface": "mysql" |
1796 | - }, |
1797 | - "slave": { |
1798 | - "interface": "mysql" |
1799 | - } |
1800 | - } |
1801 | - }, |
1802 | - "revision": 90, |
1803 | - "summary": "Website engine for collaborative work", |
1804 | - "tested_providers": { |
1805 | - "ec2": "SUCCESS", |
1806 | - "openstack": "SUCCESS" |
1807 | - }, |
1808 | - "url": "cs:precise/mediawiki-10" |
1809 | - }, |
1810 | - "memcached": { |
1811 | - "categories": [ |
1812 | - "applications" |
1813 | - ], |
1814 | - "code_source": { |
1815 | - "bugs_link": "https://bugs.launchpad.net/charms/+source/memcached", |
1816 | - "last_log": "Pavel Pachkovskij 2013-07-30 fix factor default value\n", |
1817 | - "location": "lp:~charmers/charms/precise/memcached/trunk", |
1818 | - "revision": "55", |
1819 | - "revisions": [ |
1820 | - { |
1821 | - "authors": [ |
1822 | - { |
1823 | - "email": "marco@ceppi.net", |
1824 | - "name": "Marco Ceppi" |
1825 | - } |
1826 | - ], |
1827 | - "date": "2013-07-31T12:29:00Z", |
1828 | - "message": "Pavel Pachkovskij 2013-07-30 fix factor default value\n", |
1829 | - "revno": 55 |
1830 | - }, |
1831 | - { |
1832 | - "authors": [ |
1833 | - { |
1834 | - "email": "marco@ceppi.net", |
1835 | - "name": "Marco Ceppi" |
1836 | - } |
1837 | - ], |
1838 | - "date": "2013-04-27T00:13:33Z", |
1839 | - "message": "Added icon.svg\n", |
1840 | - "revno": 54 |
1841 | - }, |
1842 | - { |
1843 | - "authors": [ |
1844 | - { |
1845 | - "email": "jorge@ubuntu.com", |
1846 | - "name": "Jorge O. Castro" |
1847 | - } |
1848 | - ], |
1849 | - "date": "2013-04-22T19:50:20Z", |
1850 | - "message": "Add categories\n", |
1851 | - "revno": 53 |
1852 | - }, |
1853 | - { |
1854 | - "authors": [ |
1855 | - { |
1856 | - "email": "matthew.wedgwood@canonical.com", |
1857 | - "name": "Matthew Wedgwood" |
1858 | - } |
1859 | - ], |
1860 | - "date": "2013-04-18T16:23:02Z", |
1861 | - "message": "[mthaddon] support for pre-install hook structure, support for the nrpe-external-master charm\n\nThis adds support for pre-install hook structure, as supported in a number of other charms, which allows you to do things like set timezone, install custom apt repositories, etc.. It also adds support for the nrpe-external-master charm\n", |
1862 | - "revno": 52 |
1863 | - }, |
1864 | - { |
1865 | - "authors": [ |
1866 | - { |
1867 | - "email": "nmurata@ashisuto.co.jp", |
1868 | - "name": "Nobuto MURATA" |
1869 | - } |
1870 | - ], |
1871 | - "date": "2012-09-20T11:43:25Z", |
1872 | - "message": "fix sh syntax error (LP: #1053356)\n", |
1873 | - "revno": 51 |
1874 | - }, |
1875 | - { |
1876 | - "authors": [ |
1877 | - { |
1878 | - "email": "juan.negron@canonical.com", |
1879 | - "name": "Juan L. Negron" |
1880 | - } |
1881 | - ], |
1882 | - "date": "2012-09-14T20:14:21Z", |
1883 | - "message": "Some fixes for things I noticed while reviewing the charm. MP:124280", |
1884 | - "revno": 50 |
1885 | - }, |
1886 | - { |
1887 | - "authors": [ |
1888 | - { |
1889 | - "email": "clint@ubuntu.com", |
1890 | - "name": "Clint Byrum" |
1891 | - } |
1892 | - ], |
1893 | - "date": "2012-05-22T22:30:53Z", |
1894 | - "message": "setting maintainer", |
1895 | - "revno": 49 |
1896 | - }, |
1897 | - { |
1898 | - "authors": [ |
1899 | - { |
1900 | - "email": "mark.mims@canonical.com", |
1901 | - "name": "Mark Mims" |
1902 | - } |
1903 | - ], |
1904 | - "date": "2012-01-28T01:11:44Z", |
1905 | - "message": "strong config types\n", |
1906 | - "revno": 48 |
1907 | - }, |
1908 | - { |
1909 | - "authors": [ |
1910 | - { |
1911 | - "email": "clint@ubuntu.com", |
1912 | - "name": "Clint Byrum" |
1913 | - } |
1914 | - ], |
1915 | - "date": "2011-12-05T22:55:46Z", |
1916 | - "message": "Making memcached fully configurable using config.yaml", |
1917 | - "revno": 47 |
1918 | - }, |
1919 | - { |
1920 | - "authors": [ |
1921 | - { |
1922 | - "email": "mark.mims@canonical.com", |
1923 | - "name": "Mark Mims" |
1924 | - } |
1925 | - ], |
1926 | - "date": "2011-10-11T19:17:17Z", |
1927 | - "message": "revision split-out\n", |
1928 | - "revno": 46 |
1929 | - } |
1930 | - ], |
1931 | - "type": "bzr" |
1932 | - }, |
1933 | - "date_created": "2012-04-16T18:29:50Z", |
1934 | - "description": "Danga Interactive developed memcached to enhance the speed of LiveJournal.com, a site which was already doing 20 million+ dynamic page views per day for 1 million users with a bunch of webservers and a bunch of database servers. memcached dropped the database load to almost nothing, yielding faster page load times for users, better resource utilization, and faster access to the databases on a memcache miss.\nmemcached optimizes specific high-load serving applications that are designed to take advantage of its versatile no-locking memory access system. Clients are available in several different programming languages, to suit the needs of the specific application. Traditionally this has been used in mod_perl apps to avoid storing large chunks of data in Apache memory, and to share this burden across several machines.", |
1935 | - "distro_series": "precise", |
1936 | - "downloads": 611, |
1937 | - "downloads_in_past_30_days": 38, |
1938 | - "files": [ |
1939 | - "hooks/cache-relation-joined", |
1940 | - "hooks/munin-relation-changed", |
1941 | - "hooks/nrpe-external-master-relation-changed", |
1942 | - "icon.svg", |
1943 | - "hooks/upgrade-charm", |
1944 | - "hooks/stop", |
1945 | - "hooks/start", |
1946 | - "hooks/config-changed", |
1947 | - "hooks/install", |
1948 | - "metadata.yaml", |
1949 | - "config.yaml", |
1950 | - "revision" |
1951 | - ], |
1952 | - "id": "precise/memcached-7", |
1953 | - "is_approved": true, |
1954 | - "is_subordinate": false, |
1955 | - "maintainer": { |
1956 | - "email": "clint@ubuntu.com", |
1957 | - "name": "Clint Byrum" |
1958 | - }, |
1959 | - "name": "memcached", |
1960 | - "options": { |
1961 | - "connection-limit": { |
1962 | - "default": 1024, |
1963 | - "description": "maximum simultaneous connections (memcached option -c)", |
1964 | - "type": "int" |
1965 | - }, |
1966 | - "disable-auto-cleanup": { |
1967 | - "default": "no", |
1968 | - "description": "do not remove things automatically from the cache on OOM\n(memcached option -M)\n", |
1969 | - "type": "string" |
1970 | - }, |
1971 | - "disable-cas": { |
1972 | - "default": "no", |
1973 | - "description": "disable use of CAS (and reduce the per-item size by 8 bytes)", |
1974 | - "type": "string" |
1975 | - }, |
1976 | - "disable-large-pages": { |
1977 | - "default": "no", |
1978 | - "description": "The charm will will try to use large pages if given more than 2GB of RAM. You may want to disable this behavior. (memcached option -L)", |
1979 | - "type": "string" |
1980 | - }, |
1981 | - "extra-options": { |
1982 | - "default": "", |
1983 | - "description": "memcached has many other options documented in its man page. You may pass them here as a string which will be appended to memcached's execution.", |
1984 | - "type": "string" |
1985 | - }, |
1986 | - "factor": { |
1987 | - "default": 1.25, |
1988 | - "description": "Use <factor> as the multiplier for computing the sizes of memory\nchunks that items are stored in. A lower value may result in less\nwasted memory depending on the total amount of memory available\nand the distribution of item sizes. The default is 1.25.\n", |
1989 | - "type": "float" |
1990 | - }, |
1991 | - "min-item-size": { |
1992 | - "default": -1, |
1993 | - "description": "Allocate a minimum of <size> bytes for the item key, value,\nand flags. The default is 48. If you have a lot of small\nkeys and values, you can get a significant memory efficiency\ngain with a lower value. If you use a high chunk growth factor\n(-f option), on the other hand, you may want to\nincrease the size to allow a bigger percentage of your\nitems to fit in the most densely packed (smallest) chunks.\n(memcached option -n)\n", |
1994 | - "type": "int" |
1995 | - }, |
1996 | - "nagios_context": { |
1997 | - "default": "juju", |
1998 | - "description": "Used by the nrpe-external-master subordinate charm. A string that will be prepended to instance name to set the host name in nagios. So for instance the hostname would be something like:\n juju-memcached-0\nIf you're running multiple environments with the same services in them this allows you to differentiate between them.\n", |
1999 | - "type": "string" |
2000 | - }, |
2001 | - "request-limit": { |
2002 | - "default": -1, |
2003 | - "description": "limit of requests a single client can make at one time\n(memcached option -R) -1 takes memcached default (20)\n", |
2004 | - "type": "int" |
2005 | - }, |
2006 | - "size": { |
2007 | - "default": 768, |
2008 | - "description": "Size of memcache pool in MiB (memcached option -m)", |
2009 | - "type": "int" |
2010 | - }, |
2011 | - "slab-page-size": { |
2012 | - "default": -1, |
2013 | - "description": "Override the size of each slab page in bytes. In mundane\nwords, it adjusts the maximum item size that memcached\nwill accept. You can use the suffixes K and M to specify\nthe size as well, so use 2000000 or 2000K or 2M if you want\na maximum size of 2 MB per object. It is not recommended\nto raise this limit above 1 MB due just to performance reasons.\nThe default value is 1 MB. (memcached option -I) -1 takes\nthe memcached default.\n", |
2014 | - "type": "int" |
2015 | - }, |
2016 | - "tcp-port": { |
2017 | - "default": 11211, |
2018 | - "description": "TCP port to listen on. (memcached option -p)", |
2019 | - "type": "int" |
2020 | - }, |
2021 | - "threads": { |
2022 | - "default": -1, |
2023 | - "description": "number of threads to use. default is 4. (memcached option -t)", |
2024 | - "type": "int" |
2025 | - }, |
2026 | - "udp-port": { |
2027 | - "default": 0, |
2028 | - "description": "UDP port to listen on (memcached option -U)", |
2029 | - "type": "int" |
2030 | - } |
2031 | - }, |
2032 | - "owner": "charmers", |
2033 | - "rating_denominator": 0, |
2034 | - "rating_numerator": 0, |
2035 | - "relations": { |
2036 | - "provides": { |
2037 | - "cache": { |
2038 | - "interface": "memcache" |
2039 | - }, |
2040 | - "munin": { |
2041 | - "interface": "munin-node" |
2042 | - }, |
2043 | - "nrpe-external-master": { |
2044 | - "interface": "nrpe-external-master", |
2045 | - "scope": "container" |
2046 | - } |
2047 | - }, |
2048 | - "requires": {} |
2049 | - }, |
2050 | - "revision": 28, |
2051 | - "summary": "A high-performance memory object caching system", |
2052 | - "tested_providers": { |
2053 | - "ec2": "SUCCESS", |
2054 | - "local": "SUCCESS", |
2055 | - "openstack": "SUCCESS" |
2056 | - }, |
2057 | - "url": "cs:precise/memcached-7" |
2058 | - }, |
2059 | - "mysql": { |
2060 | - "categories": [ |
2061 | - "databases" |
2062 | - ], |
2063 | - "code_source": { |
2064 | - "bugs_link": "https://bugs.launchpad.net/charms/+source/mysql", |
2065 | - "last_log": "[ahasenack] Wait for the rbd device to be available before attempting to format it.", |
2066 | - "location": "lp:~charmers/charms/precise/mysql/trunk", |
2067 | - "revision": "104", |
2068 | - "revisions": [ |
2069 | - { |
2070 | - "authors": [ |
2071 | - { |
2072 | - "email": "adamg@ubuntu.com", |
2073 | - "name": "Adam Gandelman" |
2074 | - } |
2075 | - ], |
2076 | - "date": "2013-08-09T11:08:20Z", |
2077 | - "message": "[ahasenack] Wait for the rbd device to be available before attempting to format it.", |
2078 | - "revno": 104 |
2079 | - }, |
2080 | - { |
2081 | - "authors": [ |
2082 | - { |
2083 | - "email": "adamg@canonical.com", |
2084 | - "name": "Adam Gandelman" |
2085 | - } |
2086 | - ], |
2087 | - "date": "2013-07-23T22:59:11Z", |
2088 | - "message": "Merge juju-core compat. fix from James Page.", |
2089 | - "revno": 103 |
2090 | - }, |
2091 | - { |
2092 | - "authors": [ |
2093 | - { |
2094 | - "email": "jorge@ubuntu.com", |
2095 | - "name": "Jorge O. Castro" |
2096 | - } |
2097 | - ], |
2098 | - "date": "2013-07-08T13:40:01Z", |
2099 | - "message": "Fix category.\n", |
2100 | - "revno": 102 |
2101 | - }, |
2102 | - { |
2103 | - "authors": [ |
2104 | - { |
2105 | - "email": "mark.mims@canonical.com", |
2106 | - "name": "Mark Mims" |
2107 | - } |
2108 | - ], |
2109 | - "date": "2013-06-07T16:38:50Z", |
2110 | - "message": "merging lp:~dannf/charms/precise/mysql/lp1188424 as per https://code.launchpad.net/~dannf/charms/precise/mysql/lp1188424/+merge/167881", |
2111 | - "revno": 101 |
2112 | - }, |
2113 | - { |
2114 | - "authors": [ |
2115 | - { |
2116 | - "email": "marco@ceppi.net", |
2117 | - "name": "Marco Ceppi" |
2118 | - } |
2119 | - ], |
2120 | - "date": "2013-06-06T12:32:17Z", |
2121 | - "message": "James Page 2013-06-06 Stop using socket.getfqdn in shared-db hooks as this assumes DNS resolution between instances is functional\n", |
2122 | - "revno": 100 |
2123 | - }, |
2124 | - { |
2125 | - "authors": [ |
2126 | - { |
2127 | - "email": "marco@ceppi.net", |
2128 | - "name": "Marco Ceppi" |
2129 | - } |
2130 | - ], |
2131 | - "date": "2013-06-05T16:02:08Z", |
2132 | - "message": "Fixes master/slave relation", |
2133 | - "revno": 99 |
2134 | - }, |
2135 | - { |
2136 | - "authors": [ |
2137 | - { |
2138 | - "email": "marco@ceppi.net", |
2139 | - "name": "Marco Ceppi" |
2140 | - } |
2141 | - ], |
2142 | - "date": "2013-05-30T16:03:12Z", |
2143 | - "message": "Maintainership change lp:1178384", |
2144 | - "revno": 98 |
2145 | - }, |
2146 | - { |
2147 | - "authors": [ |
2148 | - { |
2149 | - "email": "marco@ceppi.net", |
2150 | - "name": "Marco Ceppi" |
2151 | - } |
2152 | - ], |
2153 | - "date": "2013-05-30T16:00:48Z", |
2154 | - "message": "ha-support: https://code.launchpad.net/~openstack-charmers/charms/precise/mysql/ha-support/+merge/165059\n", |
2155 | - "revno": 97 |
2156 | - }, |
2157 | - { |
2158 | - "authors": [ |
2159 | - { |
2160 | - "email": "marco@ceppi.net", |
2161 | - "name": "Marco Ceppi" |
2162 | - } |
2163 | - ], |
2164 | - "date": "2013-04-25T18:19:45Z", |
2165 | - "message": "Added icon.svg", |
2166 | - "revno": 96 |
2167 | - }, |
2168 | - { |
2169 | - "authors": [ |
2170 | - { |
2171 | - "email": "jorge@ubuntu.com", |
2172 | - "name": "Jorge O. Castro" |
2173 | - } |
2174 | - ], |
2175 | - "date": "2013-04-22T15:04:35Z", |
2176 | - "message": "Use the correct syntax\n", |
2177 | - "revno": 95 |
2178 | - } |
2179 | - ], |
2180 | - "type": "bzr" |
2181 | - }, |
2182 | - "date_created": "2012-04-16T18:30:00Z", |
2183 | - "description": "MySQL is a fast, stable and true multi-user, multi-threaded SQL database\nserver. SQL (Structured Query Language) is the most popular database query\nlanguage in the world. The main goals of MySQL are speed, robustness and\nease of use.\n", |
2184 | - "distro_series": "precise", |
2185 | - "downloads": 9728, |
2186 | - "downloads_in_past_30_days": 932, |
2187 | - "files": [ |
2188 | - "hooks/munin-relation-joined", |
2189 | - "hooks/monitors.common.bash", |
2190 | - "hooks/db-relation-joined", |
2191 | - "hooks/shared-db-relation-changed", |
2192 | - "hooks/master-relation-departed", |
2193 | - "hooks/monitors-relation-departed", |
2194 | - "hooks/master-relation-broken", |
2195 | - "hooks/lib/cluster_utils.py", |
2196 | - "hooks/shared_db_relations.py", |
2197 | - "hooks/slave-relation-changed", |
2198 | - "README.md", |
2199 | - "hooks/ha-relation-changed", |
2200 | - "hooks/munin-relation-changed", |
2201 | - "hooks/common.py", |
2202 | - "hooks/start", |
2203 | - "hooks/config-changed", |
2204 | - "hooks/db-relation-broken", |
2205 | - "hooks/shared-db-relation-joined", |
2206 | - "hooks/ha_relations.py", |
2207 | - "hooks/cluster-relation-changed", |
2208 | - "hooks/slave-relation-departed", |
2209 | - "hooks/install", |
2210 | - "hooks/ceph-relation-changed", |
2211 | - "metadata.yaml", |
2212 | - "hooks/ha-relation-joined", |
2213 | - "hooks/stop", |
2214 | - "hooks/local-monitors-relation-joined", |
2215 | - "hooks/db-admin-relation-joined", |
2216 | - "config.yaml", |
2217 | - "hooks/monitors-relation-joined", |
2218 | - "icon.svg", |
2219 | - "hooks/upgrade-charm", |
2220 | - "hooks/lib/utils.py", |
2221 | - "hooks/ceph-relation-joined", |
2222 | - "hooks/master-relation-changed", |
2223 | - "hooks/lib/__init__.py", |
2224 | - "hooks/slave-relation-joined", |
2225 | - "hooks/lib/ceph_utils.py", |
2226 | - "hooks/slave-relation-broken", |
2227 | - "revision", |
2228 | - "hooks/monitors-relation-broken" |
2229 | - ], |
2230 | - "id": "precise/mysql-27", |
2231 | - "is_approved": true, |
2232 | - "is_subordinate": false, |
2233 | - "maintainer": { |
2234 | - "email": "marco@ceppi.net", |
2235 | - "name": "Marco Ceppi" |
2236 | - }, |
2237 | - "name": "mysql", |
2238 | - "options": { |
2239 | - "binlog-format": { |
2240 | - "default": "MIXED", |
2241 | - "description": "If binlogging is enabled, this is the format that will be used. Ignored when tuning-level == fast.", |
2242 | - "type": "string" |
2243 | - }, |
2244 | - "block-size": { |
2245 | - "default": 5, |
2246 | - "description": "Default block storage size to create when setting up MySQL block storage.\nThis value should be specified in GB (e.g. 100 not 100GB).\n", |
2247 | - "type": "int" |
2248 | - }, |
2249 | - "dataset-size": { |
2250 | - "default": "80%", |
2251 | - "description": "How much data do you want to keep in memory in the DB. This will be used to tune settings in the database server appropriately. Any more specific settings will override these defaults though. This currently sets innodb_buffer_pool_size or key_cache_size depending on the setting in preferred-storage-engine. If query-cache-type is set to 'ON' or 'DEMAND' 20% of this is given to query-cache-size. Suffix this value with 'K','M','G', or 'T' to get the relevant kilo/mega/etc. bytes. If suffixed with %, one will get that percentage of RAM devoted to dataset and (if enabled) query cache.", |
2252 | - "type": "string" |
2253 | - }, |
2254 | - "flavor": { |
2255 | - "default": "distro", |
2256 | - "description": "Possible values are 'distro' or 'percona'", |
2257 | - "type": "string" |
2258 | - }, |
2259 | - "ha-bindiface": { |
2260 | - "default": "eth0", |
2261 | - "description": "Default network interface on which HA cluster will bind to communication\nwith the other members of the HA Cluster.\n", |
2262 | - "type": "string" |
2263 | - }, |
2264 | - "ha-mcastport": { |
2265 | - "default": 5411, |
2266 | - "description": "Default multicast port number that will be used to communicate between\nHA Cluster nodes.\n", |
2267 | - "type": "int" |
2268 | - }, |
2269 | - "max-connections": { |
2270 | - "default": -1, |
2271 | - "description": "Maximum connections to allow. -1 means use the server's compiled in default.", |
2272 | - "type": "int" |
2273 | - }, |
2274 | - "preferred-storage-engine": { |
2275 | - "default": "InnoDB", |
2276 | - "description": "Tune the server for usage of this storage engine. Other possible value is MyISAM. Comma separated will cause settings to split resources evenly among given engines.", |
2277 | - "type": "string" |
2278 | - }, |
2279 | - "query-cache-size": { |
2280 | - "default": -1, |
2281 | - "description": "Override the computed version from dataset-size. Still works if query-cache-type is \"OFF\" since sessions can override the cache type setting on their own.", |
2282 | - "type": "int" |
2283 | - }, |
2284 | - "query-cache-type": { |
2285 | - "default": "OFF", |
2286 | - "description": "Query cache is usually a good idea, but can hurt concurrency. Valid values are \"OFF\", \"ON\", or \"DEMAND\". http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_query_cache_type", |
2287 | - "type": "string" |
2288 | - }, |
2289 | - "rbd-name": { |
2290 | - "default": "mysql1", |
2291 | - "description": "The name that will be used to create the Ceph's RBD image with. If the\nimage name exists in Ceph, it will be re-used and the data will be\noverwritten.\n", |
2292 | - "type": "string" |
2293 | - }, |
2294 | - "tuning-level": { |
2295 | - "default": "safest", |
2296 | - "description": "Valid values are 'safest', 'fast', and 'unsafe'. If set to safest, all settings are tuned to have maximum safety at the cost of performance. Fast will turn off most controls, but may lose data on crashes. unsafe will turn off all protections.", |
2297 | - "type": "string" |
2298 | - }, |
2299 | - "vip": { |
2300 | - "description": "Virtual IP to use to front mysql in ha configuration", |
2301 | - "type": "string" |
2302 | - }, |
2303 | - "vip_cidr": { |
2304 | - "default": 24, |
2305 | - "description": "Netmask that will be used for the Virtual IP", |
2306 | - "type": "int" |
2307 | - }, |
2308 | - "vip_iface": { |
2309 | - "default": "eth0", |
2310 | - "description": "Network Interface where to place the Virtual IP", |
2311 | - "type": "string" |
2312 | - } |
2313 | - }, |
2314 | - "owner": "charmers", |
2315 | - "rating_denominator": 0, |
2316 | - "rating_numerator": 0, |
2317 | - "relations": { |
2318 | - "provides": { |
2319 | - "db": { |
2320 | - "interface": "mysql" |
2321 | - }, |
2322 | - "db-admin": { |
2323 | - "interface": "mysql-root" |
2324 | - }, |
2325 | - "local-monitors": { |
2326 | - "interface": "local-monitors", |
2327 | - "scope": "container" |
2328 | - }, |
2329 | - "master": { |
2330 | - "interface": "mysql-oneway-replication" |
2331 | - }, |
2332 | - "monitors": { |
2333 | - "interface": "monitors" |
2334 | - }, |
2335 | - "munin": { |
2336 | - "interface": "munin-node" |
2337 | - }, |
2338 | - "shared-db": { |
2339 | - "interface": "mysql-shared" |
2340 | - } |
2341 | - }, |
2342 | - "requires": { |
2343 | - "ceph": { |
2344 | - "interface": "ceph-client" |
2345 | - }, |
2346 | - "ha": { |
2347 | - "interface": "hacluster", |
2348 | - "scope": "container" |
2349 | - }, |
2350 | - "slave": { |
2351 | - "interface": "mysql-oneway-replication" |
2352 | - } |
2353 | - } |
2354 | - }, |
2355 | - "revision": 309, |
2356 | - "summary": "MySQL is a fast, stable and true multi-user, multi-threaded SQL database", |
2357 | - "tested_providers": { |
2358 | - "ec2": "SUCCESS", |
2359 | - "local": "SUCCESS", |
2360 | - "openstack": "SUCCESS" |
2361 | - }, |
2362 | - "url": "cs:precise/mysql-27" |
2363 | - } |
2364 | - }, |
2365 | - "data": { |
2366 | - "relations": [ |
2367 | - [ |
2368 | - "mediawiki:cache", |
2369 | - "memcached:cache" |
2370 | - ], |
2371 | - [ |
2372 | - "mediawiki:db", |
2373 | - "mysql:db" |
2374 | - ], |
2375 | - [ |
2376 | - "haproxy:reverseproxy", |
2377 | - "mediawiki:website" |
2378 | - ] |
2379 | - ], |
2380 | - "series": "precise", |
2381 | - "services": { |
2382 | - "haproxy": { |
2383 | - "charm": "haproxy", |
2384 | - "num_units": 5, |
2385 | - "annotations": { |
2386 | - "gui-x": 1, |
2387 | - "gui-y": 1 |
2388 | - } |
2389 | - }, |
2390 | - "mediawiki": { |
2391 | - "charm": "mediawiki", |
2392 | - "num_units": 9, |
2393 | - "options": { |
2394 | - "name": "Intranet" |
2395 | - }, |
2396 | - "annotations": { |
2397 | - "gui-x": 1, |
2398 | - "gui-y": 1 |
2399 | - } |
2400 | - }, |
2401 | - "memcached": { |
2402 | - "charm": "memcached", |
2403 | - "num_units": 3, |
2404 | - "annotations": { |
2405 | - "gui-x": 1, |
2406 | - "gui-y": 1 |
2407 | - } |
2408 | - }, |
2409 | - "mysql": { |
2410 | - "charm": "mysql", |
2411 | - "num_units": 3, |
2412 | - "options": { |
2413 | - "tuning-level": "safest" |
2414 | - }, |
2415 | - "annotations": { |
2416 | - "gui-x": 1, |
2417 | - "gui-y": 1 |
2418 | - } |
2419 | - } |
2420 | - } |
2421 | - }, |
2422 | - "description": "", |
2423 | - "files": [ |
2424 | - "README", |
2425 | - "icon.svg", |
2426 | - "bundles.yaml" |
2427 | - ], |
2428 | - "id": "~benji/wiki/5/wiki", |
2429 | - "name": "wiki", |
2430 | - "owner": "benji", |
2431 | - "permanent_url": "jc:~benji/wiki/5/wiki", |
2432 | - "promulgated": false, |
2433 | - "title": "" |
2434 | + "haproxy": { |
2435 | + "charm": "haproxy", |
2436 | + "num_units": 5 |
2437 | + }, |
2438 | + "mediawiki": { |
2439 | + "charm": "mediawiki", |
2440 | + "num_units": 9, |
2441 | + "options": { |
2442 | + "name": "Intranet" |
2443 | + } |
2444 | + }, |
2445 | + "memcached": { |
2446 | + "charm": "memcached", |
2447 | + "num_units": 3 |
2448 | + }, |
2449 | + "mysql": { |
2450 | + "charm": "mysql", |
2451 | + "num_units": 3, |
2452 | + "options": { |
2453 | + "tuning-level": "safest" |
2454 | + } |
2455 | + } |
2456 | + } |
2457 | + }, |
2458 | + "deployer_file_url": "http://staging.jujucharms.com/bundle/%7Ebenji/wiki/5/wiki/json", |
2459 | + "description": "", |
2460 | + "downloads": 5, |
2461 | + "downloads_in_past_30_days": 3, |
2462 | + "files": [ |
2463 | + "README", |
2464 | + "icon.svg", |
2465 | + "bundles.yaml" |
2466 | + ], |
2467 | + "first_change": { |
2468 | + "authors": [ |
2469 | + "Brad Crittenden <bac@canonical.com>" |
2470 | + ], |
2471 | + "committer": "Brad Crittenden <bac@canonical.com>", |
2472 | + "created": 1375449744.902, |
2473 | + "message": "Initial checking of working config.", |
2474 | + "revno": 1 |
2475 | + }, |
2476 | + "id": "~benji/wiki/5/wiki", |
2477 | + "last_change": { |
2478 | + "authors": [ |
2479 | + "Benji York <benji.york@canonical.com>" |
2480 | + ], |
2481 | + "committer": "Benji York <benji.york@canonical.com>", |
2482 | + "created": 1380814176.735, |
2483 | + "message": "add a series to the bundle\n", |
2484 | + "revno": 5 |
2485 | + }, |
2486 | + "name": "wiki", |
2487 | + "owner": "benji", |
2488 | + "permanent_url": "bundle:~benji/wiki/5/wiki", |
2489 | + "promulgated": false, |
2490 | + "title": "" |
2491 | } |
2492 | |
2493 | === modified file 'test/test_bundle_details_view.js' |
2494 | --- test/test_bundle_details_view.js 2013-11-05 18:10:05 +0000 |
2495 | +++ test/test_bundle_details_view.js 2013-11-21 18:07:56 +0000 |
2496 | @@ -86,6 +86,9 @@ |
2497 | view.set('entity', new models.Bundle(data)); |
2498 | view.render(); |
2499 | assert.isNotNull(container.one('.yui3-tabview')); |
2500 | + |
2501 | + assert.notEqual(container.get('innerHTML').indexOf('Deployed 5'), -1, |
2502 | + 'Download count is not added to the page.'); |
2503 | }); |
2504 | |
2505 | it('fetches the readme when requested', function(done) { |
2506 | |
2507 | === modified file 'test/test_model_bundle.js' |
2508 | --- test/test_model_bundle.js 2013-10-31 14:34:07 +0000 |
2509 | +++ test/test_model_bundle.js 2013-11-21 18:07:56 +0000 |
2510 | @@ -153,6 +153,26 @@ |
2511 | assert.equal(instance.get('unitCount'), 20); |
2512 | }); |
2513 | |
2514 | + it('must provide a downloads attribute', function() { |
2515 | + instance = new models.Bundle(data); |
2516 | + assert.equal(instance.get('downloads'), 5); |
2517 | + }); |
2518 | + |
2519 | + it('must init a downloads attribute to 0', function() { |
2520 | + instance = new models.Bundle(); |
2521 | + assert.equal(instance.get('downloads'), 0); |
2522 | + }); |
2523 | + |
2524 | + it('must provide a recent_download_count attribute', function() { |
2525 | + instance = new models.Bundle(data); |
2526 | + assert.equal(instance.get('recent_download_count'), 3); |
2527 | + }); |
2528 | + |
2529 | + it('must init a receent_download_count attribute to 0', function() { |
2530 | + instance = new models.Bundle(); |
2531 | + assert.equal(instance.get('recent_download_count'), 0); |
2532 | + }); |
2533 | + |
2534 | it('has an entityType static property', function() { |
2535 | instance = new models.Bundle(data); |
2536 | assert.equal(instance.constructor.entityType, 'bundle'); |
2537 | @@ -161,17 +181,19 @@ |
2538 | it('has recent commits', function() { |
2539 | instance = new models.Bundle(data); |
2540 | var commits = instance.get('recentCommits'); |
2541 | - assert.lengthOf(commits, 3); |
2542 | + assert.lengthOf(commits, 5); |
2543 | }); |
2544 | |
2545 | it('parses author name correctly', function() { |
2546 | instance = new models.Bundle(data); |
2547 | var commits = instance.get('recentCommits'); |
2548 | - assert.equal('Brad Crittenden', commits[0].author.name); |
2549 | - assert.equal('bac@example.com', commits[0].author.email); |
2550 | + assert.equal('Benji York', commits[0].author.name); |
2551 | + assert.equal('benji.york@canonical.com', commits[0].author.email); |
2552 | }); |
2553 | |
2554 | it('only the first author is shown', function() { |
2555 | + // Manually added a second author into the test data from the server. |
2556 | + // Jorge O. O'Castro <jorge@example.com> |
2557 | instance = new models.Bundle(data); |
2558 | var commits = instance.get('recentCommits'); |
2559 | assert.equal('Jorge O. O\'Castro', commits[1].author.name); |
2560 | @@ -181,22 +203,22 @@ |
2561 | it('has the revnos in reverse order', function() { |
2562 | instance = new models.Bundle(data); |
2563 | var commits = instance.get('recentCommits'); |
2564 | - assert.equal(3, commits[0].revno); |
2565 | - assert.equal(2, commits[1].revno); |
2566 | - assert.equal(1, commits[2].revno); |
2567 | + assert.equal(5, commits[0].revno); |
2568 | + assert.equal(4, commits[1].revno); |
2569 | + assert.equal(3, commits[2].revno); |
2570 | }); |
2571 | |
2572 | it('has the correct date in GMT', function() { |
2573 | instance = new models.Bundle(data); |
2574 | var commits = instance.get('recentCommits'); |
2575 | - assert.equal('Tue, 03 Sep 2013 14:22:41 GMT', |
2576 | + assert.equal('Thu, 03 Oct 2013 15:29:36 GMT', |
2577 | commits[0].date.toUTCString()); |
2578 | }); |
2579 | |
2580 | it('has the commit message', function() { |
2581 | instance = new models.Bundle(data); |
2582 | var commits = instance.get('recentCommits'); |
2583 | - assert.equal('Correct icon', commits[0].message); |
2584 | + assert.equal('add a series to the bundle\n', commits[0].message); |
2585 | }); |
2586 | |
2587 | it('parses full name-email string', function() { |
2588 | |
2589 | === modified file 'test/test_token.js' |
2590 | --- test/test_token.js 2013-11-04 16:40:41 +0000 |
2591 | +++ test/test_token.js 2013-11-21 18:07:56 +0000 |
2592 | @@ -176,9 +176,10 @@ |
2593 | |
2594 | it('renders a bundle token properly with data', function() { |
2595 | var token = new Token({ |
2596 | - size: 'small', |
2597 | basket_name: 'BASKET-NAME', |
2598 | + downloads: 5, |
2599 | serviceCount: 4, |
2600 | + size: 'small', |
2601 | unitCount: 5 |
2602 | }); |
2603 | |
2604 | @@ -192,6 +193,10 @@ |
2605 | -1 |
2606 | ); |
2607 | assert.notEqual( |
2608 | + token_container.get('innerHTML').indexOf('Deployed 5 times'), |
2609 | + -1 |
2610 | + ); |
2611 | + assert.notEqual( |
2612 | token_container.one('a').getData('charmid').indexOf('bundle'), |
2613 | -1 |
2614 | ); |
2615 | |
2616 | === modified file 'test/test_utils.js' |
2617 | --- test/test_utils.js 2013-11-19 22:30:18 +0000 |
2618 | +++ test/test_utils.js 2013-11-21 18:07:56 +0000 |
2619 | @@ -1402,7 +1402,7 @@ |
2620 | |
2621 | var parsed = utils.charmIconParser(bundleData.charm_metadata); |
2622 | var expected = [{ |
2623 | - id: 'precise/haproxy-18', |
2624 | + id: 'precise/haproxy-21', |
2625 | name: 'haproxy' |
2626 | }, { |
2627 | id: 'precise/mediawiki-10', |
2628 | @@ -1411,7 +1411,7 @@ |
2629 | id: 'precise/memcached-7', |
2630 | name: 'memcached' |
2631 | }, { |
2632 | - id: 'precise/mysql-27', |
2633 | + id: 'precise/mysql-29', |
2634 | name: 'mysql' |
2635 | }]; |
2636 | assert.deepEqual(parsed, expected); |
Reviewers: mp+196135_ code.launchpad. net,
Message:
Please take a look.
Description:
Display bundle download counts in the UI.
- Update the model to carry the attribute from the api.
- Update the token to display the "Deployed X times".
- Update the details to also display the count.
- Drive-by to update the attributes in the charm model.
- Update tests with updated api download from the server that includes
the
download counts. Required updating tests to the new data.
https:/ /code.launchpad .net/~rharding/ juju-gui/ bundle- counts/ +merge/ 196135
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/30210044/
Affected files (+1306, -1168 lines): bundle. js bundle- token.handlebar s bundle. handlebars browserbundle. json bundle_ details_ view.js model_bundle. js
A [revision details]
M app/models/
M app/models/charm.js
M app/templates/
M app/templates/
M test/data/
M test/test_
M test/test_
M test/test_token.js
M test/test_utils.js