Statistics
| Branch: | Tag: | Revision:

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);