Revision 1e882dd7 snf-cyclades-app/synnefo/ui/static/snf/js/ui/web/ui_vms_base_view.js

b/snf-cyclades-app/synnefo/ui/static/snf/js/ui/web/ui_vms_base_view.js
75 75
            this.connect_overlay = new views.VMConnectView();
76 76
        },
77 77

  
78
        // display vm diagnostics detail overlay view, update based on
79
        // diagnostics_update_interval config value.
80
        show_build_details_for_vm: function(vm) {
81
            var cont = null;
82
            var success = function(data) {
83
                var message = "";
84
                var title = vm.get('name');
85
                var info = '<em>Status log messages:</em>';
86

  
87
                var list_el = $('<div class="diagnostics-list">');
88
                list_el.append('<div class="empty">No data available</div>');
89

  
90
                cont = list_el;
91
                var messages = _.clone(data);
92

  
93
                update_overlay_diagnostics(data, cont);
94
                synnefo.ui.main.details_view.show(title, info, cont);
95
            }
96

  
97
            var update_overlay_diagnostics = function(data) {
98
                var existing = cont.find(".msg-log-entry");
99
                var messages = _.clone(data);
100
                
101
                var to_append = messages.slice(0, messages.length - existing.length);
102
                to_append.reverse();
103

  
104
                var appending = to_append.length != messages.length;
105
                
106
                if (to_append.length) { cont.find(".empty").hide() } else {
107
                    if (!messages.length) { cont.find(".empty").show() }
108
                }
109
                _.each(to_append, function(msg){
110
                    var el = $('<div class="clearfix msg-log-entry ' + msg.level.toLowerCase() + '">');
111
                    if (msg.details) {
112
                      el.addClass("with-details");
113
                    }
114
                    var display_source_date = synnefo.config.diagnostics_display_source_date;
115
                    var source_date = "";
116
                    if (display_source_date) {
117
                        source_date = '('+synnefo.util.formatDate(new Date(msg.source_date))+')';
118
                    }
119

  
120
                    el.append('<span class="date">' + synnefo.util.formatDate(new Date(msg.created)) + source_date + '</span>');
121
                    el.append('<span class="src">' + _.escape(msg.source) + '</span>');
122
                    el.append('<span class="msg">' + _.escape(msg.message) + '</span>');
123
                    if (msg.details) {
124
                        el.append('<pre class="details">' + _.escape(msg.details) + '</pre>');
125
                    }
126
                    if (appending) { el.hide(0); el.css({'display':'none'})}
127
                    cont.prepend(el);
128
                    el.click(function(el) {
129
                        $(this).find(".details").slideToggle();
130
                        $(this).toggleClass("expanded");
131
                    });
132

  
133
                    if (appending) { el.fadeIn(800); }
134
                });
135
                
136
                window.setTimeout(function(){
137
                    if (cont.is(":visible")) {
138
                        vm.get_diagnostics(update_overlay_diagnostics);
139
                    }
140
                }, synnefo.config.diagnostics_update_interval);
141
            }
142

  
143
            vm.get_diagnostics(success);
144
        },
145

  
78 146
        // Helpers
79 147
        //
80 148
        // get element based on this.selectors key/value pairs
......
166 234
                var el = this.create_vm(vm);
167 235
                el.show();
168 236
                this.post_add(vm);
237
                this.init_vm_view_handlers(vm);
169 238
            }
170 239

  
171 240
            return this.vm(vm);
172 241
        },
242

  
243
        init_vm_view_handlers: function(vm) {
244
            var self = this;
245
            var el = this.vm(vm);
246

  
247
            // hidden feature, double click on indicators to display 
248
            // vm diagnostics.
249
            el.find(".indicators").bind("dblclick", function(){
250
                self.show_build_details_for_vm(vm);
251
            });
252

  
253
            // this button gets visible if vm creation failed.
254
            el.find("div.build-progress .btn").click(function(){
255
                self.show_build_details_for_vm(vm);
256
            });
257
        },
173 258
        
174 259
        // helpers for VMListView descendants
175 260
        post_add: function(vm) { throw "Not implemented" },
......
246 331
        // container (e.g. some views might have different
247 332
        // containers for terminated or running machines
248 333
        check_vm_container: function(vm){
249
            if (vm.state() == "DESTROY") { return };
250 334
            var el = this.vm(vm);
251 335
            if (!el.length) { return };
252 336
            var self = this;
......
281 365
        
282 366
        // is vm in transition ??? show the progress spinner
283 367
        update_transition_state: function(vm) {
284
            if (vm.in_transition() && !vm.pending_action){
368
            if (vm.in_transition() && !vm.has_pending_action()){
285 369
                this.sel('vm_spinner', vm.id).show();
286 370
            } else {
287 371
                this.sel('vm_spinner', vm.id).hide();

Also available in: Unified diff