var NtnxDashboard; NtnxDashboard = { init: function ( config ) { this.config = config; this.setupGridster(); this.setUI(); this.bindEvents(); /* load the saved/default dashboard when the DOM is ready */ $( document).ready( function() { NtnxDashboard.loadLayout(); }); }, /* init */ resetCell: function( cell ) { $( '#' + cell ).html( '' ); }, physicalInfo: function( token, cvmAddress, username, password ) { physicalData = $.ajax({ url: '/ajax/physical-info', type: 'POST', dataType: 'json', data: { _token: token, _cvmAddress: cvmAddress, _username: username, _password: password }, }); physicalData.success( function(data) { NtnxDashboard.resetCell( 'hosts' ); $( '#hosts' ).addClass( 'info_big' ).append( '
' + data.hostCount + ' Hosts
' ); $( '#hosts' ).append( '
' + data.hostSerials + '
' ); }); physicalData.fail(function ( jqXHR, textStatus, errorThrown ) { $( '#status_new' ).removeClass().html( textStatus + ' - ' + errorThrown ).addClass( 'alert' ).addClass( 'alert-error' ); }); }, vmInfo: function( token, cvmAddress, username, password ) { vmData = $.ajax({ url: '/ajax/vm-info', type: 'POST', dataType: 'json', data: { _token: token, _cvmAddress: cvmAddress, _username: username, _password: password }, }); vmData.success( function(data) { NtnxDashboard.resetCell( 'vmInfo' ); $( '#vmInfo' ).addClass( 'info_big' ).append( '
VM(s)
' + data.vmCount + '
'); }); vmData.fail(function ( jqXHR, textStatus, errorThrown ) { $( '#status_new' ).removeClass().html( textStatus + ' - ' + errorThrown ).addClass( 'alert' ).addClass( 'alert-error' ); }); }, clusterInfo: function( token, cvmAddress, username, password ) { clusterInfo = $.ajax({ url: '/ajax/cluster-info', type: 'POST', dataType: 'json', data: { _token: token, _cvmAddress: cvmAddress, _username: username, _password: password }, }); clusterInfo.success( function(data) { NtnxDashboard.resetCell( 'nosVersion' ); $( '#nosVersion' ).addClass( 'info_big' ).append( '
NOS
' + data.results.version + '
'); NtnxDashboard.resetCell( 'clusterSummary' ); $( '#clusterSummary' ).addClass( 'info_big' ).append( '
Cluster
' + data.results.name + '
'); NtnxDashboard.resetCell( 'blocks' ); $( '#blocks' ).addClass( 'info_big' ).append( '
Hypervisors
' ); $( '#blocks' ).addClass( 'info_big' ).append( '
' ); $( data.results.hypervisorTypes ).each( function( index, item ) { switch( item ) { case 'kKvm': $( '#blocks' ).append( 'AHV' ); break; case 'kVMware': $( '#blocks' ).append( 'ESXi' ); break; case 'kHyperv': $( '#blocks' ).append( 'Hyper-V' ); break; } }); $( '#blocks' ).append( 'Container(s)
' + data.containerCount + '
'); }); request.fail(function ( jqXHR, textStatus, errorThrown ) { $( '#status_new' ).removeClass().html( textStatus + ' - ' + errorThrown ).addClass( 'alert' ).addClass( 'alert-error' ); }); }, removeGraph: function( token ) { var gridster = $( '.gridster ul' ).gridster().data( 'gridster' ); var element = $( '#bigGraph' ); gridster.remove_widget( element ); }, restoreDefaultLayout: function( token ) { var gridster = $( '.gridster ul' ).gridster().data( 'gridster' ); gridster.remove_all_widgets(); /* AJAX call to get the default layout from the system's default dashboard */ request = $.ajax({ url: '/ajax/load-default', type: 'POST', dataType: 'json', data: { _token: token }, }); request.success( function(data) { serialization = Gridster.sort_by_row_and_col_asc( JSON.parse( data.layout ) ); $.each( serialization, function() { gridster.add_widget('
  • ', this.size_x, this.size_y, this.col, this.row); }); NtnxDashboard.resetCell( 'footerWidget' ); $( 'li#footerWidget' ).addClass( 'panel' ).append( '
    ' ); $( '#status_new' ).html( 'Default layout restored. Don\'t forget to save!' ).removeClass().addClass( 'alert' ).addClass( 'alert-warning' ).slideDown( 300 ); }); request.fail(function ( jqXHR, textStatus, errorThrown ) { $( '#status_new' ).removeClass().html( textStatus + ' - ' + errorThrown ).addClass( 'alert' ).addClass( 'alert-error' ); }); }, serializeLayout: function( token ) { var gridster = $( '.gridster ul' ).gridster().data( 'gridster' ); var json = gridster.serialize(); $( '#serialized' ).html( JSON.stringify( json ) ); }, saveLayout: function( token ) { /* get the gridster object */ var gridster = $( '.gridster ul' ).gridster().data( 'gridster' ); /* serialize the current layout */ var json = gridster.serialize(); /* convert the layout to json */ var serialized = JSON.stringify( json ); /* AJAX call to save the layout the app's configuration file */ request = $.ajax({ url: '/ajax/save-to-json', type: 'POST', dataType: 'json', data: { _token: token, _serialized: serialized }, }); request.success( function(data) { $( '#status_new' ).removeClass().html( 'Dashboard saved!' ).addClass( 'alert' ).addClass( 'alert-success' ).slideDown( 300 ).delay( 2000 ).slideUp( 300 ); }); request.fail(function ( jqXHR, textStatus, errorThrown ) { $( '#status_new' ).removeClass().html( textStatus + ' - ' + errorThrown ).addClass( 'alert' ).addClass( 'alert-error' ); }); }, s4: function() { return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); }, loadLayout: function() { request = $.ajax({ url: '/ajax/load-layout', type: 'POST', dataType: 'json', data: {}, }); var cvmAddress = $( '#cvmAddress' ).val(); var username = $( '#username' ).val(); var password = $( '#password' ).val(); request.success( function( data ) { var gridster = $( '.gridster ul' ).gridster().data( 'gridster' ); var serialization = JSON.parse( data.layout ); // $( '#serialized' ).html( data.layout ); serialization = Gridster.sort_by_row_and_col_asc(serialization); $.each( serialization, function() { // gridster.add_widget('
  • ', this.size_x, this.size_y, this.col, this.row); gridster.add_widget('
  • ', this.size_x, this.size_y, this.col, this.row); }); /* add the chart markup to the largest containers */ // $( 'li#bigGraph' ).addClass( 'panel' ).append( '
    ' ); $( 'li#footerWidget' ).addClass( 'panel' ).append( '
    ' ); NtnxDashboard.resetCell( 'bigGraph' ); $( '#bigGraph' ).addClass( 'info_hilite' ).append( '
    Hey ...
    Enter your cluster details above, then click the Go button ...
    '); $( '#hints' ).addClass( 'info_hilite' ).append( '
    Also ...
    Drag & Drop
    The Boxes
    '); }); request.fail(function ( jqXHR, textStatus, errorThrown ) { /* Display an error message */ alert( 'Unfortunately an error occurred while processing the request. Status: ' + textStatus + ', Error Thrown: ' + errorThrown ); }); }, setupGridster: function () { $( function () { var gridster = $( '.gridster ul' ).gridster( { widget_margins: [ 10, 10 ], widget_base_dimensions: [ 170, 170 ], max_cols: 10, autogrow_cols: true, resize: { enabled: true }, draggable: { stop: function( e, ui, $widget ) { $( '#status_new' ).html( 'Your dashboard layout has changed. Don\'t forget to save!' ).removeClass().addClass( 'alert' ).addClass( 'alert-warning' ).slideDown( 300 ); } }, serialize_params: function ($w, wgd) { return { /* add element ID to data*/ id: $w.attr('id'), /* defaults */ col: wgd.col, row: wgd.row, size_x: wgd.size_x, size_y: wgd.size_y } } } ).data( 'gridster' ); } ); }, setUI: function () { // $( 'input#date' ).datepicker(); $( 'div.alert-success' ).delay( 3000 ).slideUp( 1000 ); $( 'div.alert-info' ).delay( 3000 ).slideUp( 1000 ); $(function () { $('[data-toggle="tooltip"]').tooltip() }) }, /* setUI */ bindEvents: function() { var self = NtnxDashboard; $( '#goButton' ).on( 'click', function ( e ) { var cvmAddress = $( '#cvmAddress' ).val(); var username = $( '#username' ).val(); var password = $( '#password' ).val(); if( ( cvmAddress == '' ) || ( username == '' ) || ( password == '' ) ) { NtnxDashboard.resetCell( 'bigGraph' ); $( '#bigGraph' ).addClass( 'info_error' ).append( '
    Awww ...
    Did you forget to enter something?
    '); } else { NtnxDashboard.resetCell( 'bigGraph' ); $( '#bigGraph' ).html( '' ).removeClass( 'info_hilite' ).removeClass( 'info_error' ).addClass( 'info_big' ).append( '
    Ok ...
    Let\'s test your cluster details ...
    '); NtnxDashboard.resetCell( 'hints' ); $( '#hints' ).html( '' ).addClass( 'info_hilite' ).append( '
    Also ...
    Drag & Drop
    The Boxes
    '); NtnxDashboard.clusterInfo( $( '#csrf_token' ).val(), cvmAddress, username, password ); NtnxDashboard.physicalInfo( $( '#csrf_token' ).val(), cvmAddress, username, password ); NtnxDashboard.vmInfo( $( '#csrf_token' ).val(), cvmAddress, username, password ); NtnxDashboard.containerInfo( $( '#csrf_token' ).val(), cvmAddress, username, password ); } e.preventDefault(); }); $( '.serializeLayout' ).on( 'click', function( e ) { NtnxDashboard.serializeLayout( $( '#csrf_token' ).val() ); e.preventDefault(); }); $( '.saveLayout' ).on( 'click', function( e ) { NtnxDashboard.saveLayout( $( '#csrf_token' ).val() ); e.preventDefault(); }); $( '.defaultLayout' ).on( 'click', function( e ) { NtnxDashboard.restoreDefaultLayout( $( '#csrf_token' ).val() ); e.preventDefault(); }); $( '.removeGraph' ).on( 'click', function( e ) { NtnxDashboard.removeGraph( $( '#csrf_token' ).val() ); e.preventDefault(); }); $( '.containerStats' ).on( 'click', function( e ) { NtnxDashboard.containerInfo( $( '#csrf_token' ).val(), $( '#cvmAddress' ).val(), $( '#username' ).val(), $( '#password' ).val() ); e.preventDefault(); }); $( '.testButton' ).on( 'click', function( e ) { $( '#clusterSummary' ).html( 'Hello' ); e.preventDefault(); }); }, /* bindEvents */ }; NtnxDashboard.init({ });