Statistics
| Branch: | Tag: | Revision:

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