diff options
| author | Ed Tanous <ed.tanous@intel.com> | 2017-08-15 09:37:42 -0700 |
|---|---|---|
| committer | Ed Tanous <ed.tanous@intel.com> | 2017-10-11 13:34:56 -0700 |
| commit | 911ac31759cb7b77a856af8806b4e064d50d7422 (patch) | |
| tree | c4b714fabb2b956936ab6dffc18d9ff418756cf4 /static | |
| parent | 8f0c0481d2280919b38a31656ba21a4347d12620 (diff) | |
| download | bmcweb-911ac31759cb7b77a856af8806b4e064d50d7422.tar.gz bmcweb-911ac31759cb7b77a856af8806b4e064d50d7422.zip | |
Large updates to webserver
Do not merge yet
Change-Id: I38c56844c1b0e3e8e5493c2705e62e6db7ee2102
Diffstat (limited to 'static')
| -rw-r--r-- | static/CMakeLists.txt | 212 | ||||
| -rw-r--r-- | static/index.html | 3 | ||||
| -rw-r--r-- | static/js/bmcApp.js | 13 | ||||
| -rw-r--r-- | static/js/dbusWebsocketFactory.js | 20 | ||||
| -rw-r--r-- | static/js/fwupdateController.js | 143 | ||||
| -rw-r--r-- | static/js/fwupdateconfirmController.js | 5 | ||||
| -rw-r--r-- | static/js/sensorController.js | 86 | ||||
| m--------- | static/noVNC | 0 | ||||
| -rw-r--r-- | static/partial-fwupdate.html | 2 |
9 files changed, 186 insertions, 298 deletions
diff --git a/static/CMakeLists.txt b/static/CMakeLists.txt index b9137dd..ff58a84 100644 --- a/static/CMakeLists.txt +++ b/static/CMakeLists.txt @@ -1,173 +1,53 @@ -set(JAVASCRIPT_ASSETS - js/selController.js - js/lodash.core.js - js/ui-bootstrap-tpls-2.5.0.js - js/angular-cookies.js - js/angular-websocket.js - js/angular-ui-router.js - js/kvmController.js - js/loginController.js - js/ipmiController.js - js/fwupdateController.js - js/mainController.js - js/versionController.js - js/sensorController.js - js/angular-sanitize.js - js/bmcApp.js - js/base64.js - js/angular-animate.js - js/run_prettify.js - js/angular.js - js/angular-ui-router-uib-modal.js - js/smart-table.js - js/systemConfigController.js - - noVNC/core/inflator.js - noVNC/core/input/xtscancodes.js - noVNC/core/input/util.js - noVNC/core/input/devices.js - noVNC/core/input/keysym.js - noVNC/core/input/keysymdef.js - noVNC/core/websock.js - noVNC/core/util.js - noVNC/core/base64.js - noVNC/core/rfb.js - noVNC/core/des.js - noVNC/core/display.js - noVNC/app/ui.js - noVNC/app/webutil.js - -) - -set(CSS_ASSETS - css/intel.css - css/bootstrap.css - css/font-awesome.css - css/bootstrap-theme.css - css/prettify.css - noVNC/app/styles/base.css - noVNC/app/styles/auto.css -) - -set(HTML_ASSETS - index.html - partial-login.html - partial-eventlog.html - partial-fruinfo.html - partial-home-list.html - partial-ipmi.html - partial-kvm.html - partial-sensor.html - partial-systeminfo.html - partial-fwupdate.html - partial-fwupdateconfirm.html - partial-systemconfig.html -) - -set(OTHER_ASSETS - img/logo.png - img/blur-bg.jpg - fonts/fontawesome-webfont.woff -) - -set(STATIC_ASSETS_OUT "") -set(MINIFIED_ASSETS_OUT "") - -find_program(UGLIFY_MINIFIER uglifyjs) -if(NOT UGLIFY_MINIFIER) - message("uglifyjs not found") -else() - message("Found ${UGLIFY_MINIFIER}") -endif() -foreach(JAVASCRIPT_ASSET ${JAVASCRIPT_ASSETS}) - - set(MINIFIED_FILENAME ${CMAKE_CURRENT_BINARY_DIR}/${JAVASCRIPT_ASSET}) - get_filename_component(FOLDERNAME ${MINIFIED_FILENAME} DIRECTORY) - # string(REGEX REPLACE "(\\.[^.]*$)" ".min\\1" OUTPUT_FILENAME ${OUTPUT_FILENAME}) - file(MAKE_DIRECTORY "${FOLDERNAME}") - if(UGLIFY_MINIFIER) - add_custom_command(OUTPUT ${MINIFIED_FILENAME} - COMMAND ${UGLIFY_MINIFIER} --compress --mangle - --output "${MINIFIED_FILENAME}" - "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}" - COMMENT "Minifying ${JAVASCRIPT_ASSET}" - ) - list(APPEND MINIFIED_ASSETS_OUT ${MINIFIED_FILENAME}) - endif(UGLIFY_MINIFIER) - - # if it's a debug build, use the unminified version - if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR NOT UGLIFY_MINIFIER) - list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${JAVASCRIPT_ASSET}) - else() - list(APPEND STATIC_ASSETS_OUT ${MINIFIED_FILENAME}) - endif (CMAKE_BUILD_TYPE STREQUAL "Debug" OR NOT UGLIFY_MINIFIER) -endforeach(JAVASCRIPT_ASSET) - +set(TIMESTAMP_FILE "${CMAKE_CURRENT_BINARY_DIR}/webpack.timestamp") -find_program(CSS_MINIFIER cssnano) -if(NOT CSS_MINIFIER) - message("cssnano not found") -else() - message("Found ${CSS_MINIFIER}") -endif() -# for now CSS is included as is -foreach(CSS_ASSET ${CSS_ASSETS}) - set(MINIFIED_FILENAME ${CMAKE_CURRENT_BINARY_DIR}/${CSS_ASSET}) - get_filename_component(FOLDERNAME ${MINIFIED_FILENAME} DIRECTORY) - file(MAKE_DIRECTORY "${FOLDERNAME}") - if(CSS_MINIFIER) - add_custom_command(OUTPUT ${MINIFIED_FILENAME} - COMMAND ${CSS_MINIFIER} - "${CMAKE_CURRENT_SOURCE_DIR}/${CSS_ASSET}" - "${CMAKE_CURRENT_BINARY_DIR}/${CSS_ASSET}" - DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${CSS_ASSET}" - COMMENT "Minifying ${CSS_ASSET}" - ) - list(APPEND MINIFIED_ASSETS_OUT ${MINIFIED_FILENAME}) - endif() - # if it's a debug build, use the unminified version - if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR NOT CSS_MINIFIER) - list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${CSS_ASSET}) - else() - list(APPEND STATIC_ASSETS_OUT ${MINIFIED_FILENAME}) - endif (CMAKE_BUILD_TYPE STREQUAL "Debug" OR NOT CSS_MINIFIER) +# this could be improved. It basically sets all source files of a certain type as dependencies +execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR}/phosphor-webui ls-files --full-name + *.js *.css *.html + OUTPUT_VARIABLE PHOSPHOR_FILES + ) +STRING(REGEX REPLACE "\n" ";" PHOSPHOR_FILES "${PHOSPHOR_FILES}") -endforeach(CSS_ASSET) - -# for now HTML is included as is -foreach(HTML_ASSET ${HTML_ASSETS}) - list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${HTML_ASSET}) -endforeach(HTML_ASSET) - -# for now IMG is included as is -foreach(OTHER_ASSET ${OTHER_ASSETS}) - list(APPEND STATIC_ASSETS_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${OTHER_ASSET}) -endforeach(OTHER_ASSET) - -# this taret is the dependency that the build script uses to make sure everything is available -add_custom_target(buildstatic ALL DEPENDS ${STATIC_ASSETS_OUT}) - -# this target makes sure that assets are minified in debug builds, even if they aren't used -add_custom_target(minifyassets ALL DEPENDS ${MINIFIED_ASSETS_OUT}) +SET(PHOSPHOR_FILES_FULLPATH "") +FOREACH(filename ${PHOSPHOR_FILES}) + LIST(APPEND PHOSPHOR_FILES_FULLPATH "${CMAKE_CURRENT_SOURCE_DIR}/phosphor-webui/${filename}") +ENDFOREACH(filename ${PHOSPHOR_FILES}) + +# if this is a debug build, don't minify +IF(CMAKE_BUILD_TYPE MATCHES DEBUG) + set(DEBUG_ADD --devtool source-map) +ENDIF(CMAKE_BUILD_TYPE MATCHES DEBUG) + +add_custom_command( + COMMAND + cd ${CMAKE_CURRENT_SOURCE_DIR}/phosphor-webui && + npm install yarn --no-progress --loglevel info -g --prefix ${CMAKE_BINARY_DIR}/node_prefix && + ${CMAKE_BINARY_DIR}/node_prefix/bin/yarn install --dev --no-progress --loglevel info --network-concurrency 1 && + ${CMAKE_BINARY_DIR}/node_prefix/bin/yarn run build ${DEBUG_ADD} && + touch ${TIMESTAMP_FILE} + OUTPUT ${TIMESTAMP_FILE} + DEPENDS ${PHOSPHOR_FILES_FULLPATH} + ) + +add_custom_target(webpackbuild + DEPENDS ${TIMESTAMP_FILE} + SOURCES ${PHOSPHOR_FILES_FULLPATH} + ) - -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/generated) - -set(CXX_STATIC_ASSETS_OUTPUT_FILE ${CMAKE_BINARY_DIR}/generated/webassets.cpp) set(WEBASSET_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/build_web_assets.py") - -if (CMAKE_BUILD_TYPE STREQUAL "Debug") - set(DEBUG_MODE "-d") -endif() - -add_custom_command(OUTPUT ${CXX_STATIC_ASSETS_OUTPUT_FILE} - COMMAND ${WEBASSET_SCRIPT} ${DEBUG_MODE} - -o ${CXX_STATIC_ASSETS_OUTPUT_FILE} -i ${STATIC_ASSETS_OUT} - - DEPENDS ${STATIC_ASSETS_OUT} ${WEBASSET_SCRIPT} - COMMENT "Building CPP file ${CXX_STATIC_ASSETS_OUTPUT_FILE}" +add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/generated/webassets.cpp + OUTPUT ${CMAKE_BINARY_DIR}/generated/webassets.hpp + COMMAND python3 ${WEBASSET_SCRIPT} + -o ${CMAKE_BINARY_DIR}/generated/webassets.cpp + -i ${CMAKE_CURRENT_SOURCE_DIR}/phosphor-webui/dist + DEPENDS ${TIMESTAMP_FILE} ${WEBASSET_SCRIPT} + COMMENT "Building CPP file webassets.cpp" ) -add_custom_target(packagestaticcpp ALL DEPENDS ${CXX_STATIC_ASSETS_OUTPUT_FILE})
\ No newline at end of file +add_custom_target(packagestaticcpp ALL DEPENDS + ${CMAKE_BINARY_DIR}/generated/webassets.cpp + ${CMAKE_BINARY_DIR}/generated/webassets.hpp +) +add_dependencies(packagestaticcpp webpackbuild) diff --git a/static/index.html b/static/index.html index e0a2058..a699ada 100644 --- a/static/index.html +++ b/static/index.html @@ -28,6 +28,8 @@ <script type="text/javascript" src="static/js/bmcApp.js" defer></script> <script type="text/javascript" src="static/js/base64.js" defer></script> + <script type="text/javascript" src="static/js/dbusWebsocketFactory.js" defer></script> + <script type="text/javascript" src="static/js/mainController.js" defer></script> <script type="text/javascript" src="static/js/versionController.js" defer></script> @@ -52,7 +54,6 @@ <script type="text/javascript" src="static/noVNC/core/inflator.js" defer></script> <script type="text/javascript" src="static/noVNC/core/rfb.js" defer></script> <script type="text/javascript" src="static/noVNC/core/input/keysym.js" defer></script> - </head> <body ng-controller="MainCtrl" ng-class="(is_logged_in()) ? '' : 'auth-main'"> diff --git a/static/js/bmcApp.js b/static/js/bmcApp.js index fb641ab..f1e02c7 100644 --- a/static/js/bmcApp.js +++ b/static/js/bmcApp.js @@ -71,6 +71,19 @@ app.directive('windowSize', [ } ]); +app.directive('fileInput', ['$parse', function ($parse) { + return { + restrict: 'A', + link: function (scope, element, attributes) { + element.bind('change', function () { + $parse(attributes.fileInput) + .assign(scope,element[0].files) + scope.$apply() + }); + } + }; +}]); + app.run([ '$rootScope', '$cookieStore', '$state', 'AuthenticationService', '$http', '$templateCache', diff --git a/static/js/dbusWebsocketFactory.js b/static/js/dbusWebsocketFactory.js new file mode 100644 index 0000000..716f2df --- /dev/null +++ b/static/js/dbusWebsocketFactory.js @@ -0,0 +1,20 @@ +angular.module('bmcApp').factory('dbusWebsocketService', [ + '$location', + function($location) { + return { + start: function(dbus_namespace, callback) { + var url = '/dbus_monitor?path_namespace=' + dbus_namespace; + var host = $location.host(); + var port = 18080; + var protocol = 'wss://'; + if ($location.protocol() === 'http') { + protocol = 'ws://'; + } + var websocket = new WebSocket(protocol + host + ':' + port + url); + websocket.onopen = function() {}; + websocket.onclose = function() {}; + websocket.onmessage = function(evt) { callback(evt); }; + } + } + } +]);
\ No newline at end of file diff --git a/static/js/fwupdateController.js b/static/js/fwupdateController.js index d5eab07..e33a30f 100644 --- a/static/js/fwupdateController.js +++ b/static/js/fwupdateController.js @@ -1,86 +1,87 @@ angular.module('bmcApp').controller('fwupdateController', [ '$scope', '$http', '$uibModal', '$state', function($scope, $http, $uibModal, $state) { - $scope.upload = function(files) { - r = new FileReader(); - r.onload = function(e) { - get_image_info = function(buffer) { - image_info = {'valid' : false} - var expected = '*SignedImage*\0\0\0' + $scope.files = []; + $scope.$watch('files', function(newValue, oldValue) { + if (newValue.length > 0) { + console.log('Loading firware file ' + $scope.files[0]); + r = new FileReader(); + r.onload = function(e) { + get_image_info = function(buffer) { + image_info = {'valid' : false}; + var expected = '*SignedImage*\0\0\0'; - var dv1 = new Int8Array(e.target.result, 0, 16); + var dv1 = new Int8Array(e.target.result, 0, 16); - for (var i = 0; i != expected.length; i++) { - if (dv1[i] != expected.charCodeAt(i)) { - return image_info; + for (var i = 0; i != expected.length; i++) { + if (dv1[i] != expected.charCodeAt(i)) { + return image_info; + } } - } - image_info['valid'] = true; - var generation = new Int8Array(e.target.result, 16, 17)[0]; - image_info['generation'] = generation; - if ((generation < 4) || - (generation > 5)) { // not VLN generation header + image_info['valid'] = true; + var generation = new Int8Array(e.target.result, 16, 17)[0]; + image_info['generation'] = generation; + if ((generation < 4) || + (generation > 5)) { // not VLN generation header - return image_info; - } else { - var version_minor = new Uint16Array(e.target.result, 20, 22)[0]; - image_info['major_version'] = - new Uint8Array(e.target.result, 28, 29)[0]; - image_info['submajor_version'] = - new Uint8Array(e.target.result, 29, 30)[0].toString(16); - var version_minor2 = new Uint16Array(e.target.result, 30, 32)[0]; - image_info['sha1_version'] = - ('0000' + version_minor2.toString(16)).substr(-4) + - ('0000' + version_minor.toString(16)).substr(-4); + return image_info; + } else { + var version_minor = new Uint16Array(e.target.result, 20, 22)[0]; + image_info['major_version'] = + new Uint8Array(e.target.result, 28, 29)[0]; + image_info['submajor_version'] = + new Uint8Array(e.target.result, 29, 30)[0].toString(16); + var version_minor2 = new Uint16Array(e.target.result, 30, 32)[0]; + image_info['sha1_version'] = + ('0000' + version_minor2.toString(16)).substr(-4) + + ('0000' + version_minor.toString(16)).substr(-4); } - return image_info; - }; - var image_info = get_image_info(e.target.result); - $scope.image_info = image_info; - - var objectSelectionModal = $uibModal.open({ - templateUrl : 'static/partial-fwupdateconfirm.html', - controller : function($scope) { - $scope.image_info = image_info; - $scope.file_to_load = file_to_load; - // The function that is called for modal closing (positive button) - - $scope.okModal = function() { - // Closing the model with result - objectSelectionModal.close($scope.selection); - $http({ - method : 'POST', - url : '/intel/firmwareupload', - data : e.target.result, - transformRequest : [], - headers : {'Content-Type' : 'application/octet-stream'} - }) - .then( - function successCallback(response) { - console.log('Success uploaded. Response: ' + - response.data) - }, - function errorCallback(response) { - console.log('Error status: ' + response.status) - }); - }; - - // The function that is called for modal dismissal(negative button) + return image_info; + }; + var image_info = get_image_info(e.target.result); + $scope.image_info = image_info; - $scope.dismissModal = function() { - objectSelectionModal.dismiss(); - }; + var objectSelectionModal = $uibModal.open({ + templateUrl : 'static/partial-fwupdateconfirm.html', + controller : function($scope) { + $scope.image_info = image_info; + $scope.file_to_load = file_to_load; + // The function that is called for modal closing (positive button) - } + $scope.okModal = function() { + // Closing the model with result + objectSelectionModal.close($scope.selection); + $http({ + method : 'POST', + url : '/intel/firmwareupload', + data : e.target.result, + transformRequest : [], + headers : {'Content-Type' : 'application/octet-stream'} + }) + .then( + function successCallback(response) { + console.log('Success uploaded. Response: ' + + response.data) + }, + function errorCallback(response) { + console.log('Error status: ' + response.status) + }); + }; - }); - }; - var file_to_load = files[0]; - $scope.file_to_load = file_to_load; - r.readAsArrayBuffer(files[0]); + // The function that is called for modal dismissal(negative + // button) - }; + $scope.dismissModal = function() { + objectSelectionModal.dismiss(); + }; + } + }); + }; + var file_to_load = $scope.files[0]; + $scope.file_to_load = $scope.files[0]; + r.readAsArrayBuffer($scope.files[0]); + } + }); - $scope.filename = ''; } ]);
\ No newline at end of file diff --git a/static/js/fwupdateconfirmController.js b/static/js/fwupdateconfirmController.js deleted file mode 100644 index 845e73d..0000000 --- a/static/js/fwupdateconfirmController.js +++ /dev/null @@ -1,5 +0,0 @@ -angular.module('bmcApp').controller('fwupdateconfirmController', [ - '$scope', '$stateParams',function($scope, $stateParams) { - $scope.filename = $stateParams.filename; - } -]);
\ No newline at end of file diff --git a/static/js/sensorController.js b/static/js/sensorController.js index 3943192..272dfee 100644 --- a/static/js/sensorController.js +++ b/static/js/sensorController.js @@ -1,59 +1,37 @@ -angular.module('bmcApp') - .controller( - 'sensorController', - [ - '$scope', '$http', '$location', 'websocketService', - function($scope, $http, $location, websocketService) { - $scope.smartTablePageSize = 10; - $scope.next_id = 0; - websocketService.start('/dbus_monitor', function(evt) { - var obj = JSON.parse(evt.data); +angular.module('bmcApp').controller('sensorController', [ + '$scope', '$http', '$location', 'dbusWebsocketService', + function($scope, $http, $location, dbusWebsocketService) { + $scope.smartTablePageSize = 10; + $scope.next_id = 0; + dbusWebsocketService.start('/xyz/openbmc_project/sensors', function(evt) { + var obj = JSON.parse(evt.data); - $scope.$apply(function() { - for (var sensor_name in obj) { - var found = false; - for (var sensor_index in $scope.rowCollection) { - var sensor_object = $scope.rowCollection[sensor_index]; - if (sensor_object.name === sensor_name) { - sensor_object.value = obj[sensor_name]; - found = true; - break; - } - } - if (!found) { - console.log(sensor_name + ' -> ' + obj[sensor_name]); - $scope.next_id = $scope.next_id + 1; + $scope.$apply(function() { + for (var sensor_name in obj) { + var found = false; + for (var sensor_index in $scope.rowCollection) { + var sensor_object = $scope.rowCollection[sensor_index]; + if (sensor_object.name === sensor_name) { + sensor_object.value = obj[sensor_name]; + found = true; + break; + } + } + if (!found) { + console.log(sensor_name + ' -> ' + obj[sensor_name]); + $scope.next_id = $scope.next_id + 1; - $scope.rowCollection.push({ - id : $scope.next_id, - name : sensor_name, - value : obj[sensor_name], - }); - } - }; - }); + $scope.rowCollection.push({ + id : $scope.next_id, + name : sensor_name, + value : obj[sensor_name], }); + } + }; + }); + }); - $scope.rowCollection = []; + $scope.rowCollection = []; - } - ]) - .factory('websocketService', [ - '$location', - function($location) { - return { - start: function(url, callback) { - var host = $location.host(); - var port = 18080; - var protocol = 'wss://'; - if ($location.protocol() === 'http') { - protocol = 'ws://'; - } - var websocket = new WebSocket(protocol + host + ':' + port + url); - websocket.onopen = function() {}; - websocket.onclose = function() {}; - websocket.onmessage = function(evt) { callback(evt); }; - } - } - } - ]);
\ No newline at end of file + } +]); diff --git a/static/noVNC b/static/noVNC -Subproject b69dda9b19f538c648cb11faddc50f30b93bac4 +Subproject bf82644461d95c8621923ffb472f50c1a65f9c3 diff --git a/static/partial-fwupdate.html b/static/partial-fwupdate.html index 829aad8..7bcd4ba 100644 --- a/static/partial-fwupdate.html +++ b/static/partial-fwupdate.html @@ -8,7 +8,7 @@ </h4> </div> <div class="box-body"> - <input type="file" name="file" onchange="angular.element(this).scope().upload(this.files)" /> + <input type="file" name="file" file-input="files" /> </div> </div> </div> |

