root / snf-cyclades-app / synnefo / ui / static / snf / js / glance_models.js @ 3796f345
History | View | Annotate | Download (5 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 | ce493ced | Kostas Papadimitriou | display_size: function() { |
42 | ce493ced | Kostas Papadimitriou | return this.get_readable_size(); |
43 | 43ec1206 | Kostas Papadimitriou | }, |
44 | 43ec1206 | Kostas Papadimitriou | |
45 | ce493ced | Kostas Papadimitriou | display_users: function() { |
46 | ce493ced | Kostas Papadimitriou | return this.get_meta('users').split(' ').join(", "); |
47 | 30b6f316 | Kostas Papadimitriou | } |
48 | babfdb9b | Kostas Papadimitriou | |
49 | 1a947bb7 | Kostas Papadimitriou | }) |
50 | 1a947bb7 | Kostas Papadimitriou | |
51 | 258235f4 | Kostas Papadimitriou | models.GlanceImages = snf.models.Images.extend({ |
52 | 258235f4 | Kostas Papadimitriou | model: models.GlanceImage,
|
53 | ea223582 | Kostas Papadimitriou | api_type: 'glance', |
54 | d7612b6e | Kostas Papadimitriou | |
55 | ea223582 | Kostas Papadimitriou | type_selections: {'personal':'My images', |
56 | ea223582 | Kostas Papadimitriou | 'shared': 'Shared with me', |
57 | ea223582 | Kostas Papadimitriou | 'public': 'Public'}, |
58 | ea223582 | Kostas Papadimitriou | type_selections_order: ['system', 'personal', 'shared', 'public'], |
59 | ce493ced | Kostas Papadimitriou | display_metadata: ['size', 'users', 'osfamily', 'status', 'created_at', 'updated_at', |
60 | ce493ced | Kostas Papadimitriou | 'filename', 'format', 'root_partition'], |
61 | ce493ced | Kostas Papadimitriou | meta_labels: {'OS':'OS', 'osfamily':'OS Family', 'GUI':'GUI'}, |
62 | ce493ced | Kostas Papadimitriou | display_extra_metadata: true, |
63 | 258235f4 | Kostas Papadimitriou | read_method: 'head', |
64 | 258235f4 | Kostas Papadimitriou | |
65 | 258235f4 | Kostas Papadimitriou | // custom glance api parser
|
66 | 258235f4 | Kostas Papadimitriou | parse: function (resp, xhr) { |
67 | 258235f4 | Kostas Papadimitriou | if (_.isArray(resp)) {
|
68 | 258235f4 | Kostas Papadimitriou | resp = {'images': {'values': resp }}; |
69 | 258235f4 | Kostas Papadimitriou | } |
70 | 258235f4 | Kostas Papadimitriou | return models.GlanceImages.__super__.parse.call(this, resp, xhr); |
71 | 258235f4 | Kostas Papadimitriou | }, |
72 | 258235f4 | Kostas Papadimitriou | |
73 | 258235f4 | Kostas Papadimitriou | _read_image_from_request: function(image, msg, xhr) { |
74 | 258235f4 | Kostas Papadimitriou | var img = {};
|
75 | 258235f4 | Kostas Papadimitriou | img['metadata'] = {values:{}}; |
76 | 258235f4 | Kostas Papadimitriou | |
77 | 258235f4 | Kostas Papadimitriou | var headers = snf.util.parseHeaders(xhr.getAllResponseHeaders().toLowerCase());
|
78 | 258235f4 | Kostas Papadimitriou | |
79 | 258235f4 | Kostas Papadimitriou | _.each(headers, function(value, key) {
|
80 | 258235f4 | Kostas Papadimitriou | if (key.indexOf("x-image-meta") == -1) { |
81 | 258235f4 | Kostas Papadimitriou | return
|
82 | 258235f4 | Kostas Papadimitriou | } |
83 | 258235f4 | Kostas Papadimitriou | |
84 | 258235f4 | Kostas Papadimitriou | if (key.indexOf("x-image-meta-property") == -1) { |
85 | 258235f4 | Kostas Papadimitriou | img[key.replace("x-image-meta-","").replace(/-/g,"_")] = _.trim(value); |
86 | 258235f4 | Kostas Papadimitriou | } else {
|
87 | 258235f4 | Kostas Papadimitriou | img.metadata.values[key.replace('x-image-meta-property-',"").replace(/-/g,"_")] = _.trim(value); |
88 | 258235f4 | Kostas Papadimitriou | } |
89 | 258235f4 | Kostas Papadimitriou | |
90 | 258235f4 | Kostas Papadimitriou | }) |
91 | 258235f4 | Kostas Papadimitriou | |
92 | 258235f4 | Kostas Papadimitriou | return img;
|
93 | 258235f4 | Kostas Papadimitriou | }, |
94 | ea223582 | Kostas Papadimitriou | |
95 | ea223582 | Kostas Papadimitriou | parse_meta: function(img) { |
96 | ea223582 | Kostas Papadimitriou | if (img.properties) {
|
97 | ea223582 | Kostas Papadimitriou | img.metadata = {}; |
98 | ea223582 | Kostas Papadimitriou | img.metadata.values = img.properties; |
99 | c16d0b2c | Kostas Papadimitriou | } else {
|
100 | c16d0b2c | Kostas Papadimitriou | if (!img.metadata) {
|
101 | c16d0b2c | Kostas Papadimitriou | img.metadata = {values:{}};
|
102 | c16d0b2c | Kostas Papadimitriou | } |
103 | ea223582 | Kostas Papadimitriou | } |
104 | bbbceeea | Kostas Papadimitriou | |
105 | bbbceeea | Kostas Papadimitriou | // fixes plankton regression (returns lowercase meta keys)
|
106 | bbbceeea | Kostas Papadimitriou | if (img.metadata.values.os && !img.metadata.values.OS) {
|
107 | bbbceeea | Kostas Papadimitriou | img.metadata.values.OS = img.metadata.values.os; |
108 | bbbceeea | Kostas Papadimitriou | } |
109 | bbbceeea | Kostas Papadimitriou | |
110 | 258235f4 | Kostas Papadimitriou | img = models.GlanceImages.__super__.parse_meta.call(this, img);
|
111 | ea223582 | Kostas Papadimitriou | return img;
|
112 | ea223582 | Kostas Papadimitriou | }, |
113 | 258235f4 | Kostas Papadimitriou | |
114 | ea223582 | Kostas Papadimitriou | get_system_images: function() { |
115 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i) { |
116 | 1faf0b9c | Kostas Papadimitriou | return _.include(_.keys(snf.config.system_images_owners),
|
117 | 1faf0b9c | Kostas Papadimitriou | i.get_owner()); |
118 | 1faf0b9c | Kostas Papadimitriou | }) |
119 | ea223582 | Kostas Papadimitriou | }, |
120 | ea223582 | Kostas Papadimitriou | |
121 | ea223582 | Kostas Papadimitriou | get_personal_images: function() { |
122 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i) { |
123 | 1faf0b9c | Kostas Papadimitriou | return i.get_owner() == snf.user.username
|
124 | 1faf0b9c | Kostas Papadimitriou | }); |
125 | ea223582 | Kostas Papadimitriou | }, |
126 | ea223582 | Kostas Papadimitriou | |
127 | ea223582 | Kostas Papadimitriou | get_public_images: function() { |
128 | 258235f4 | Kostas Papadimitriou | return _.filter(this.active(), function(i){ return i.is_public() }) |
129 | ea223582 | Kostas Papadimitriou | }, |
130 | ea223582 | Kostas Papadimitriou | |
131 | ea223582 | Kostas Papadimitriou | get_shared_images: function() { |
132 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i){ |
133 | 1faf0b9c | Kostas Papadimitriou | return !_.include(_.keys(snf.config.system_images_owners),
|
134 | 1faf0b9c | Kostas Papadimitriou | i.get_owner()) && |
135 | ea223582 | Kostas Papadimitriou | i.get_owner() != snf.user.username && |
136 | 1faf0b9c | Kostas Papadimitriou | !i.is_public(); |
137 | 1faf0b9c | Kostas Papadimitriou | }); |
138 | 8b71ea92 | Kostas Papadimitriou | } |
139 | 258235f4 | Kostas Papadimitriou | |
140 | 1a947bb7 | Kostas Papadimitriou | }) |
141 | 30b6f316 | Kostas Papadimitriou | |
142 | 30b6f316 | Kostas Papadimitriou | // replace images storage collection
|
143 | 30b6f316 | Kostas Papadimitriou | snf.glance.register = function() { |
144 | 30b6f316 | Kostas Papadimitriou | // storage initialization
|
145 | 30b6f316 | Kostas Papadimitriou | snf.storage.glance = {}; |
146 | 30b6f316 | Kostas Papadimitriou | snf.storage.glance.images = new models.GlanceImages();
|
147 | 30b6f316 | Kostas Papadimitriou | |
148 | 30b6f316 | Kostas Papadimitriou | // use glance images
|
149 | 30b6f316 | Kostas Papadimitriou | snf.storage.images = snf.storage.glance.images; |
150 | 30b6f316 | Kostas Papadimitriou | } |
151 | ea223582 | Kostas Papadimitriou | |
152 | 1a947bb7 | Kostas Papadimitriou | })(this);
|