root / snf-cyclades-app / synnefo / ui / static / snf / js / quota.js @ 488209a5
History | View | Annotate | Download (5.2 kB)
1 | f7e51fc5 | Kostas Papadimitriou | // Copyright 2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | f7e51fc5 | Kostas Papadimitriou | //
|
3 | f7e51fc5 | Kostas Papadimitriou | // Redistribution and use in source and binary forms, with or
|
4 | f7e51fc5 | Kostas Papadimitriou | // without modification, are permitted provided that the following
|
5 | f7e51fc5 | Kostas Papadimitriou | // conditions are met:
|
6 | f7e51fc5 | Kostas Papadimitriou | //
|
7 | f7e51fc5 | Kostas Papadimitriou | // 1. Redistributions of source code must retain the above
|
8 | f7e51fc5 | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
9 | f7e51fc5 | Kostas Papadimitriou | // disclaimer.
|
10 | f7e51fc5 | Kostas Papadimitriou | //
|
11 | f7e51fc5 | Kostas Papadimitriou | // 2. Redistributions in binary form must reproduce the above
|
12 | f7e51fc5 | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
13 | f7e51fc5 | Kostas Papadimitriou | // disclaimer in the documentation and/or other materials
|
14 | f7e51fc5 | Kostas Papadimitriou | // provided with the distribution.
|
15 | f7e51fc5 | Kostas Papadimitriou | //
|
16 | f7e51fc5 | Kostas Papadimitriou | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | f7e51fc5 | Kostas Papadimitriou | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | f7e51fc5 | Kostas Papadimitriou | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | f7e51fc5 | Kostas Papadimitriou | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | f7e51fc5 | Kostas Papadimitriou | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | f7e51fc5 | Kostas Papadimitriou | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | f7e51fc5 | Kostas Papadimitriou | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | f7e51fc5 | Kostas Papadimitriou | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | f7e51fc5 | Kostas Papadimitriou | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | f7e51fc5 | Kostas Papadimitriou | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | f7e51fc5 | Kostas Papadimitriou | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | f7e51fc5 | Kostas Papadimitriou | // POSSIBILITY OF SUCH DAMAGE.
|
28 | f7e51fc5 | Kostas Papadimitriou | //
|
29 | f7e51fc5 | Kostas Papadimitriou | // The views and conclusions contained in the software and
|
30 | f7e51fc5 | Kostas Papadimitriou | // documentation are those of the authors and should not be
|
31 | f7e51fc5 | Kostas Papadimitriou | // interpreted as representing official policies, either expressed
|
32 | f7e51fc5 | Kostas Papadimitriou | // or implied, of GRNET S.A.
|
33 | f7e51fc5 | Kostas Papadimitriou | //
|
34 | f7e51fc5 | Kostas Papadimitriou | |
35 | f7e51fc5 | Kostas Papadimitriou | ;(function(root){
|
36 | f7e51fc5 | Kostas Papadimitriou | |
37 | f7e51fc5 | Kostas Papadimitriou | // Astakos quotas lib
|
38 | f7e51fc5 | Kostas Papadimitriou | // Requires jquery and jquery.cookie javascript libs
|
39 | f7e51fc5 | Kostas Papadimitriou | //
|
40 | f7e51fc5 | Kostas Papadimitriou | // Usage
|
41 | f7e51fc5 | Kostas Papadimitriou | // -----
|
42 | f7e51fc5 | Kostas Papadimitriou | // <script src="jquery.js"></script>
|
43 | f7e51fc5 | Kostas Papadimitriou | // <script src="backbone.js"></script>
|
44 | f7e51fc5 | Kostas Papadimitriou | // <script src="snf/quota.js"></script>
|
45 | f7e51fc5 | Kostas Papadimitriou | //
|
46 | f7e51fc5 | Kostas Papadimitriou | // var quotas = new snf.quota.Quota();
|
47 | f7e51fc5 | Kostas Papadimitriou | // var quotas = new snf.quota.Quota();
|
48 | f7e51fc5 | Kostas Papadimitriou | // $.ajax({
|
49 | f7e51fc5 | Kostas Papadimitriou | // url: '/userquota',
|
50 | f7e51fc5 | Kostas Papadimitriou | // async: false,
|
51 | f7e51fc5 | Kostas Papadimitriou | // method: 'POST',
|
52 | f7e51fc5 | Kostas Papadimitriou | // success: function(data) {
|
53 | f7e51fc5 | Kostas Papadimitriou | // quotas.load(data);
|
54 | f7e51fc5 | Kostas Papadimitriou | // }
|
55 | f7e51fc5 | Kostas Papadimitriou | // })
|
56 | f7e51fc5 | Kostas Papadimitriou | //
|
57 | f7e51fc5 | Kostas Papadimitriou | // var vms_limit = quotas.get_limit("cyclades.vm");
|
58 | f7e51fc5 | Kostas Papadimitriou | // var networks_usage = quotas.get_usage("cyclades.network.private");
|
59 | f7e51fc5 | Kostas Papadimitriou | //
|
60 | f7e51fc5 | Kostas Papadimitriou | |
61 | f7e51fc5 | Kostas Papadimitriou | var root = root;
|
62 | f7e51fc5 | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
63 | f7e51fc5 | Kostas Papadimitriou | var bb = root.Backbone;
|
64 | f7e51fc5 | Kostas Papadimitriou | var _ = root._;
|
65 | f7e51fc5 | Kostas Papadimitriou | |
66 | f7e51fc5 | Kostas Papadimitriou | // init quota namespace
|
67 | f7e51fc5 | Kostas Papadimitriou | snf.quota = {}; |
68 | f7e51fc5 | Kostas Papadimitriou | |
69 | f7e51fc5 | Kostas Papadimitriou | snf.quota.Quota = function(defaultns) { |
70 | f7e51fc5 | Kostas Papadimitriou | if (defaultns == undefined) { defaultns = "" } |
71 | f7e51fc5 | Kostas Papadimitriou | this.ns = defaultns;
|
72 | 7ac49c2e | Kostas Papadimitriou | this.data = {};
|
73 | f7e51fc5 | Kostas Papadimitriou | } |
74 | f7e51fc5 | Kostas Papadimitriou | |
75 | f7e51fc5 | Kostas Papadimitriou | _.extend(snf.quota.Quota.prototype, bb.Events, { |
76 | f7e51fc5 | Kostas Papadimitriou | |
77 | f7e51fc5 | Kostas Papadimitriou | load: function(resp) { |
78 | f7e51fc5 | Kostas Papadimitriou | this.data = {};
|
79 | f7e51fc5 | Kostas Papadimitriou | _.each(resp, function(q) {
|
80 | f7e51fc5 | Kostas Papadimitriou | if (this.data[q.name]) { |
81 | f7e51fc5 | Kostas Papadimitriou | _.extend(this.data[q.name], q)
|
82 | f7e51fc5 | Kostas Papadimitriou | } else {
|
83 | f7e51fc5 | Kostas Papadimitriou | this.data[q.name] = q;
|
84 | f7e51fc5 | Kostas Papadimitriou | } |
85 | 7ac49c2e | Kostas Papadimitriou | |
86 | f7e51fc5 | Kostas Papadimitriou | q.maxValue = parseInt(q.maxValue); |
87 | f7e51fc5 | Kostas Papadimitriou | q.currValue = parseInt(q.currValue); |
88 | f7e51fc5 | Kostas Papadimitriou | this.update_exceeded(q.name, true); |
89 | f7e51fc5 | Kostas Papadimitriou | }, this);
|
90 | f7e51fc5 | Kostas Papadimitriou | }, |
91 | f7e51fc5 | Kostas Papadimitriou | |
92 | f7e51fc5 | Kostas Papadimitriou | get_key: function(key) { |
93 | f7e51fc5 | Kostas Papadimitriou | if (key.indexOf(".") == -1) { |
94 | f7e51fc5 | Kostas Papadimitriou | return this.ns + "." + key; |
95 | f7e51fc5 | Kostas Papadimitriou | } |
96 | f7e51fc5 | Kostas Papadimitriou | return key;
|
97 | f7e51fc5 | Kostas Papadimitriou | }, |
98 | f7e51fc5 | Kostas Papadimitriou | |
99 | f7e51fc5 | Kostas Papadimitriou | get: function(key) { |
100 | f7e51fc5 | Kostas Papadimitriou | if (this.get_key(key) in this.data) { |
101 | f7e51fc5 | Kostas Papadimitriou | return this.data[this.get_key(key)] |
102 | f7e51fc5 | Kostas Papadimitriou | } |
103 | f7e51fc5 | Kostas Papadimitriou | return {}
|
104 | f7e51fc5 | Kostas Papadimitriou | }, |
105 | f7e51fc5 | Kostas Papadimitriou | |
106 | f7e51fc5 | Kostas Papadimitriou | update_exceeded: function(key, silent) { |
107 | f7e51fc5 | Kostas Papadimitriou | if (silent === undefined) { silent = false; } |
108 | f7e51fc5 | Kostas Papadimitriou | |
109 | f7e51fc5 | Kostas Papadimitriou | var q = this.get(key); |
110 | f7e51fc5 | Kostas Papadimitriou | var oldexceeded = q.exceeded;
|
111 | f7e51fc5 | Kostas Papadimitriou | q.exceeded = this.exceeded(key);
|
112 | f7e51fc5 | Kostas Papadimitriou | if (q.exceeded != oldexceeded) {
|
113 | f7e51fc5 | Kostas Papadimitriou | key = this.get_key(key);
|
114 | f7e51fc5 | Kostas Papadimitriou | this.trigger("quota.changed", key, this); |
115 | f7e51fc5 | Kostas Papadimitriou | this.trigger(key + ".quota.changed", this); |
116 | f7e51fc5 | Kostas Papadimitriou | if (q.exceeded) { this.trigger("quota.reached", this)} |
117 | f7e51fc5 | Kostas Papadimitriou | if (!q.exceeded) { this.trigger("quota.free", this)} |
118 | f7e51fc5 | Kostas Papadimitriou | if (q.exceeded) { this.trigger(key + ".quota.reached", this)} |
119 | f7e51fc5 | Kostas Papadimitriou | if (!q.exceeded) { this.trigger(key + ".quota.free", this)} |
120 | f7e51fc5 | Kostas Papadimitriou | } |
121 | f7e51fc5 | Kostas Papadimitriou | }, |
122 | f7e51fc5 | Kostas Papadimitriou | |
123 | f7e51fc5 | Kostas Papadimitriou | update_usage: function(key, value) { |
124 | f7e51fc5 | Kostas Papadimitriou | this.get(key).currValue = parseInt(value);
|
125 | f7e51fc5 | Kostas Papadimitriou | this.update_exceeded(key);
|
126 | f7e51fc5 | Kostas Papadimitriou | }, |
127 | f7e51fc5 | Kostas Papadimitriou | |
128 | f7e51fc5 | Kostas Papadimitriou | update_limit: function(key, value) { |
129 | f7e51fc5 | Kostas Papadimitriou | this.get(key).maxValue = parseInt(value);
|
130 | f7e51fc5 | Kostas Papadimitriou | this.update_exceeded(key);
|
131 | f7e51fc5 | Kostas Papadimitriou | }, |
132 | f7e51fc5 | Kostas Papadimitriou | |
133 | f7e51fc5 | Kostas Papadimitriou | get_usage: function(key) { |
134 | f7e51fc5 | Kostas Papadimitriou | return parseInt(this.get(key).currValue); |
135 | f7e51fc5 | Kostas Papadimitriou | }, |
136 | f7e51fc5 | Kostas Papadimitriou | |
137 | f7e51fc5 | Kostas Papadimitriou | get_limit: function(key) { |
138 | f7e51fc5 | Kostas Papadimitriou | return parseInt(this.get(key).maxValue); |
139 | f7e51fc5 | Kostas Papadimitriou | }, |
140 | f7e51fc5 | Kostas Papadimitriou | |
141 | f7e51fc5 | Kostas Papadimitriou | is_bytes: function(key) { |
142 | f7e51fc5 | Kostas Papadimitriou | return this.get(key).unit == "bytes"; |
143 | f7e51fc5 | Kostas Papadimitriou | }, |
144 | f7e51fc5 | Kostas Papadimitriou | |
145 | f7e51fc5 | Kostas Papadimitriou | get_available: function(key) { |
146 | f7e51fc5 | Kostas Papadimitriou | return this.get_limit(key) - this.get_usage(key) |
147 | f7e51fc5 | Kostas Papadimitriou | }, |
148 | f7e51fc5 | Kostas Papadimitriou | |
149 | f7e51fc5 | Kostas Papadimitriou | exceeded: function(key) { |
150 | f7e51fc5 | Kostas Papadimitriou | return this.get_usage(key) >= this.get_limit(key); |
151 | f7e51fc5 | Kostas Papadimitriou | }, |
152 | f7e51fc5 | Kostas Papadimitriou | |
153 | f7e51fc5 | Kostas Papadimitriou | can_consume: function(key, value) { |
154 | f7e51fc5 | Kostas Papadimitriou | return (this.get_available(key) - parseInt(value)) >= 0 |
155 | 3b463c5a | Kostas Papadimitriou | }, |
156 | 3b463c5a | Kostas Papadimitriou | |
157 | 3b463c5a | Kostas Papadimitriou | get_available_readable: function(key) { |
158 | 3b463c5a | Kostas Papadimitriou | var value;
|
159 | 3b463c5a | Kostas Papadimitriou | if (this.is_bytes(key)) { |
160 | 3b463c5a | Kostas Papadimitriou | var value = this.get_available(key); |
161 | 3b463c5a | Kostas Papadimitriou | if (!value) { return 0 } |
162 | 3b463c5a | Kostas Papadimitriou | return snf.util.readablizeBytes(value);
|
163 | 3b463c5a | Kostas Papadimitriou | } else {
|
164 | 3b463c5a | Kostas Papadimitriou | return this.get_available(key); |
165 | 3b463c5a | Kostas Papadimitriou | } |
166 | f7e51fc5 | Kostas Papadimitriou | } |
167 | f7e51fc5 | Kostas Papadimitriou | |
168 | f7e51fc5 | Kostas Papadimitriou | }); |
169 | f7e51fc5 | Kostas Papadimitriou | |
170 | f7e51fc5 | Kostas Papadimitriou | })(this);
|