root / snf-cyclades-app / synnefo / ui / static / snf / js / glance_models.js @ e1f3c814
History | View | Annotate | Download (5.1 kB)
1 | 1a947bb7 | Kostas Papadimitriou | ;(function(root){
|
---|---|---|---|
2 | 1a947bb7 | Kostas Papadimitriou | |
3 | 1a947bb7 | Kostas Papadimitriou | // root
|
4 | 1a947bb7 | Kostas Papadimitriou | var root = root;
|
5 | 1a947bb7 | Kostas Papadimitriou | |
6 | 1a947bb7 | Kostas Papadimitriou | // setup namepsaces
|
7 | 1a947bb7 | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
8 | 1a947bb7 | Kostas Papadimitriou | var glance = snf.glance = snf.glance || {};
|
9 | 1a947bb7 | Kostas Papadimitriou | var models = glance.models = glance.models || {}
|
10 | 1a947bb7 | Kostas Papadimitriou | var storage = glance.storage = glance.storage || {};
|
11 | 1a947bb7 | Kostas Papadimitriou | var util = snf.util = snf.util || {};
|
12 | 1a947bb7 | Kostas Papadimitriou | |
13 | 1a947bb7 | Kostas Papadimitriou | // shortcuts
|
14 | 1a947bb7 | Kostas Papadimitriou | var bb = root.Backbone;
|
15 | 1a947bb7 | Kostas Papadimitriou | var slice = Array.prototype.slice
|
16 | 1a947bb7 | Kostas Papadimitriou | |
17 | 258235f4 | Kostas Papadimitriou | models.GlanceImage = snf.models.Image.extend({ |
18 | 258235f4 | Kostas Papadimitriou | api_type: 'glance', |
19 | 1a947bb7 | Kostas Papadimitriou | |
20 | 258235f4 | Kostas Papadimitriou | get_size: function() { |
21 | 7d98da49 | Kostas Papadimitriou | return this.get('size') / 1024 / 1024; |
22 | 258235f4 | Kostas Papadimitriou | }, |
23 | ea223582 | Kostas Papadimitriou | |
24 | 258235f4 | Kostas Papadimitriou | get_readable_size: function() { |
25 | 03639c6d | Kostas Papadimitriou | var unknown_title = snf.config.image_deleted_size_title || "(none)"; |
26 | 03639c6d | Kostas Papadimitriou | if (this.is_deleted()) { return unknown_title } |
27 | 03639c6d | Kostas Papadimitriou | return this.get('size') > 0 ? util.readablizeBytes(this.get('size')) : unknown_title; |
28 | 258235f4 | Kostas Papadimitriou | }, |
29 | 30b6f316 | Kostas Papadimitriou | |
30 | ce493ced | Kostas Papadimitriou | get_meta: function(key) { |
31 | ce493ced | Kostas Papadimitriou | // check for lowercase keys too since glance image meta are set
|
32 | ce493ced | Kostas Papadimitriou | // via http headers
|
33 | ce493ced | Kostas Papadimitriou | var val = models.GlanceImage.__super__.get_meta.call(this, key) |
34 | ce493ced | Kostas Papadimitriou | if (val == null) { |
35 | ce493ced | Kostas Papadimitriou | val = models.GlanceImage.__super__.get_meta.call(this,
|
36 | ce493ced | Kostas Papadimitriou | key.toLowerCase()) |
37 | ce493ced | Kostas Papadimitriou | } |
38 | ce493ced | Kostas Papadimitriou | return val;
|
39 | 43ec1206 | Kostas Papadimitriou | }, |
40 | 43ec1206 | Kostas Papadimitriou | |
41 | 37dd2616 | Kostas Papadimitriou | get_owner: function() { |
42 | 37dd2616 | Kostas Papadimitriou | return this.get('owner') || 'Unknown'; |
43 | 37dd2616 | Kostas Papadimitriou | }, |
44 | 37dd2616 | Kostas Papadimitriou | |
45 | 37dd2616 | Kostas Papadimitriou | |
46 | ce493ced | Kostas Papadimitriou | display_size: function() { |
47 | ce493ced | Kostas Papadimitriou | return this.get_readable_size(); |
48 | 43ec1206 | Kostas Papadimitriou | }, |
49 | 43ec1206 | Kostas Papadimitriou | |
50 | ce493ced | Kostas Papadimitriou | display_users: function() { |
51 | bdfb089f | Kostas Papadimitriou | try {
|
52 | bdfb089f | Kostas Papadimitriou | return this.get_meta('users').split(' ').join(", "); |
53 | bdfb089f | Kostas Papadimitriou | } catch(err) { console.log(err); return ''} |
54 | 30b6f316 | Kostas Papadimitriou | } |
55 | babfdb9b | Kostas Papadimitriou | |
56 | 1a947bb7 | Kostas Papadimitriou | }) |
57 | 1a947bb7 | Kostas Papadimitriou | |
58 | 258235f4 | Kostas Papadimitriou | models.GlanceImages = snf.models.Images.extend({ |
59 | 258235f4 | Kostas Papadimitriou | model: models.GlanceImage,
|
60 | ea223582 | Kostas Papadimitriou | api_type: 'glance', |
61 | d7612b6e | Kostas Papadimitriou | |
62 | ea223582 | Kostas Papadimitriou | type_selections: {'personal':'My images', |
63 | ea223582 | Kostas Papadimitriou | 'shared': 'Shared with me', |
64 | ea223582 | Kostas Papadimitriou | 'public': 'Public'}, |
65 | ea223582 | Kostas Papadimitriou | type_selections_order: ['system', 'personal', 'shared', 'public'], |
66 | ce493ced | Kostas Papadimitriou | display_metadata: ['size', 'users', 'osfamily', 'status', 'created_at', 'updated_at', |
67 | ce493ced | Kostas Papadimitriou | 'filename', 'format', 'root_partition'], |
68 | ce493ced | Kostas Papadimitriou | meta_labels: {'OS':'OS', 'osfamily':'OS Family', 'GUI':'GUI'}, |
69 | ce493ced | Kostas Papadimitriou | display_extra_metadata: true, |
70 | 258235f4 | Kostas Papadimitriou | read_method: 'head', |
71 | 258235f4 | Kostas Papadimitriou | |
72 | 258235f4 | Kostas Papadimitriou | // custom glance api parser
|
73 | 258235f4 | Kostas Papadimitriou | parse: function (resp, xhr) { |
74 | d63606c8 | Kostas Papadimitriou | if (_.isArray(resp)) {
|
75 | d63606c8 | Kostas Papadimitriou | resp = {'images': resp };
|
76 | d63606c8 | Kostas Papadimitriou | } |
77 | 258235f4 | Kostas Papadimitriou | return models.GlanceImages.__super__.parse.call(this, resp, xhr); |
78 | 258235f4 | Kostas Papadimitriou | }, |
79 | 258235f4 | Kostas Papadimitriou | |
80 | 258235f4 | Kostas Papadimitriou | _read_image_from_request: function(image, msg, xhr) { |
81 | 258235f4 | Kostas Papadimitriou | var img = {};
|
82 | 0dee4086 | Kostas Papadimitriou | img['metadata'] = {};
|
83 | 258235f4 | Kostas Papadimitriou | |
84 | 258235f4 | Kostas Papadimitriou | var headers = snf.util.parseHeaders(xhr.getAllResponseHeaders().toLowerCase());
|
85 | 258235f4 | Kostas Papadimitriou | |
86 | 258235f4 | Kostas Papadimitriou | _.each(headers, function(value, key) {
|
87 | 258235f4 | Kostas Papadimitriou | if (key.indexOf("x-image-meta") == -1) { |
88 | 258235f4 | Kostas Papadimitriou | return
|
89 | 258235f4 | Kostas Papadimitriou | } |
90 | 258235f4 | Kostas Papadimitriou | |
91 | 258235f4 | Kostas Papadimitriou | if (key.indexOf("x-image-meta-property") == -1) { |
92 | 258235f4 | Kostas Papadimitriou | img[key.replace("x-image-meta-","").replace(/-/g,"_")] = _.trim(value); |
93 | 258235f4 | Kostas Papadimitriou | } else {
|
94 | 0dee4086 | Kostas Papadimitriou | img.metadata[key.replace('x-image-meta-property-',"").replace(/-/g,"_")] = _.trim(value); |
95 | 258235f4 | Kostas Papadimitriou | } |
96 | 258235f4 | Kostas Papadimitriou | |
97 | 258235f4 | Kostas Papadimitriou | }) |
98 | 258235f4 | Kostas Papadimitriou | |
99 | 258235f4 | Kostas Papadimitriou | return img;
|
100 | 258235f4 | Kostas Papadimitriou | }, |
101 | ea223582 | Kostas Papadimitriou | |
102 | ea223582 | Kostas Papadimitriou | parse_meta: function(img) { |
103 | ea223582 | Kostas Papadimitriou | if (img.properties) {
|
104 | ea223582 | Kostas Papadimitriou | img.metadata = {}; |
105 | 0dee4086 | Kostas Papadimitriou | img.metadata = img.properties; |
106 | c16d0b2c | Kostas Papadimitriou | } else {
|
107 | c16d0b2c | Kostas Papadimitriou | if (!img.metadata) {
|
108 | 0dee4086 | Kostas Papadimitriou | img.metadata = {}; |
109 | c16d0b2c | Kostas Papadimitriou | } |
110 | ea223582 | Kostas Papadimitriou | } |
111 | bbbceeea | Kostas Papadimitriou | |
112 | bbbceeea | Kostas Papadimitriou | // fixes plankton regression (returns lowercase meta keys)
|
113 | 0dee4086 | Kostas Papadimitriou | if (img.metadata.os && !img.metadata.OS) {
|
114 | 0dee4086 | Kostas Papadimitriou | img.metadata.OS = img.metadata.os; |
115 | bbbceeea | Kostas Papadimitriou | } |
116 | bbbceeea | Kostas Papadimitriou | |
117 | 258235f4 | Kostas Papadimitriou | img = models.GlanceImages.__super__.parse_meta.call(this, img);
|
118 | ea223582 | Kostas Papadimitriou | return img;
|
119 | ea223582 | Kostas Papadimitriou | }, |
120 | 258235f4 | Kostas Papadimitriou | |
121 | ea223582 | Kostas Papadimitriou | get_system_images: function() { |
122 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i) { |
123 | 1faf0b9c | Kostas Papadimitriou | return _.include(_.keys(snf.config.system_images_owners),
|
124 | 1faf0b9c | Kostas Papadimitriou | i.get_owner()); |
125 | 1faf0b9c | Kostas Papadimitriou | }) |
126 | ea223582 | Kostas Papadimitriou | }, |
127 | ea223582 | Kostas Papadimitriou | |
128 | ea223582 | Kostas Papadimitriou | get_personal_images: function() { |
129 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i) { |
130 | 5ef4d441 | Kostas Papadimitriou | return i.get_owner_uuid() == snf.user.get_username();
|
131 | 1faf0b9c | Kostas Papadimitriou | }); |
132 | ea223582 | Kostas Papadimitriou | }, |
133 | ea223582 | Kostas Papadimitriou | |
134 | ea223582 | Kostas Papadimitriou | get_public_images: function() { |
135 | 258235f4 | Kostas Papadimitriou | return _.filter(this.active(), function(i){ return i.is_public() }) |
136 | ea223582 | Kostas Papadimitriou | }, |
137 | ea223582 | Kostas Papadimitriou | |
138 | ea223582 | Kostas Papadimitriou | get_shared_images: function() { |
139 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i){ |
140 | 1faf0b9c | Kostas Papadimitriou | return !_.include(_.keys(snf.config.system_images_owners),
|
141 | 1faf0b9c | Kostas Papadimitriou | i.get_owner()) && |
142 | 5ef4d441 | Kostas Papadimitriou | i.get_owner_uuid() != snf.user.get_username() && |
143 | 1faf0b9c | Kostas Papadimitriou | !i.is_public(); |
144 | 1faf0b9c | Kostas Papadimitriou | }); |
145 | 8b71ea92 | Kostas Papadimitriou | } |
146 | 258235f4 | Kostas Papadimitriou | |
147 | 1a947bb7 | Kostas Papadimitriou | }) |
148 | 30b6f316 | Kostas Papadimitriou | |
149 | 30b6f316 | Kostas Papadimitriou | // replace images storage collection
|
150 | 30b6f316 | Kostas Papadimitriou | snf.glance.register = function() { |
151 | 30b6f316 | Kostas Papadimitriou | // storage initialization
|
152 | 30b6f316 | Kostas Papadimitriou | snf.storage.glance = {}; |
153 | 30b6f316 | Kostas Papadimitriou | snf.storage.glance.images = new models.GlanceImages();
|
154 | 30b6f316 | Kostas Papadimitriou | |
155 | 30b6f316 | Kostas Papadimitriou | // use glance images
|
156 | 30b6f316 | Kostas Papadimitriou | snf.storage.images = snf.storage.glance.images; |
157 | 30b6f316 | Kostas Papadimitriou | } |
158 | ea223582 | Kostas Papadimitriou | |
159 | 1a947bb7 | Kostas Papadimitriou | })(this);
|