INT app gui2
This patch contains the files needed by the INT app to work with gui2.
More in detail I reuse/modifie the html and the css, already provided in
the inbandtelemetry folder. I add the file needed to utilize the gui2,
e.g,intapp-gui2-lib.module.ts.
Link to my dropbox for screenshots:
https://www.dropbox.com/sh/ie2l0flcm8igesk/AAAsP2RdMbNbnt6A88lmBczaa?dl=0
Change-Id: I710c09f3a04a139a4482bb7aae3b3b76b39e67e6
diff --git a/apps/inbandtelemetry/int-gui2-lib/BUILD b/apps/inbandtelemetry/int-gui2-lib/BUILD
new file mode 100644
index 0000000..b41d497
--- /dev/null
+++ b/apps/inbandtelemetry/int-gui2-lib/BUILD
@@ -0,0 +1,294 @@
+"""
+ Copyright 2020-present Open Networking Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+"""
+
+"""
+ Rules to build the In-band Telemetry (INT) GUI app for GUI 2
+
+
+"""
+
+load("//tools/build/bazel:jdk_genrule.bzl", genrule = "jdk_genrule")
+
+COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + [
+ "@javax_ws_rs_api//jar",
+ "@servlet_api//jar",
+ "@jetty_websocket//jar",
+ "@jetty_util//jar",
+ "@jersey_media_multipart//jar",
+ "@jersey_server//jar",
+ "//utils/rest:onlab-rest",
+ "//core/store/serializers:onos-core-serializers",
+]
+
+TEST_DEPS = TEST + [
+ "//core/api:onos-api-tests",
+ "//drivers/default:onos-drivers-default",
+]
+
+"""
+ Files that get put at the top level of the tar ball
+"""
+
+filegroup(
+ name = "_root_level_files",
+ srcs =
+ [
+ ":angular.json",
+ ":package.json",
+ ":package-lock.json",
+ ":tsconfig.json",
+ ":tslint.json",
+ ],
+)
+
+filegroup(
+ name = "_e2e_test_files",
+ srcs = [
+ ":e2e/protractor.conf.js",
+ ":e2e/src/app.e2e-spec.ts",
+ ":e2e/src/app.po.ts",
+ ":e2e/tsconfig.e2e.json",
+ ],
+)
+
+"""
+ Run ng build to create INT GUI 2 library in production mode
+ The output file int-gui2-lib-ver.tgz is in the form that can be uploaded directly to https://www.npmjs.com/
+ See bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib.log for details of the Angular CLI output
+"""
+
+genrule(
+ name = "int-gui2-lib-build",
+ srcs = [
+ "@nodejs//:bin/npm",
+ "@nodejs//:bin/node",
+ "@nodejs//:bin/nodejs/bin/node",
+ "@nodejs//:bin/nodejs/bin/npm",
+ "//web/gui2-fw-lib:onos-gui2-fw-npm-install",
+ "//web/gui2-fw-lib:onos-gui2-fw-ng-build",
+ "//web/gui2-fw-lib:gui2_fw_lib_ext_css",
+ ":_root_level_files",
+ ":_int_gui2_lib_src",
+ ":_int-gui2_app_files",
+ ],
+ outs = [
+ "int-gui2-lib.log",
+ "int-gui2-lib-ver.tgz",
+ ],
+ cmd = "ROOT=`pwd` &&" +
+ " export HOME=. &&" +
+ " export XDG_CONFIG_HOME=$(@D)/config &&" +
+ " NODE=$(location @nodejs//:bin/node) &&" +
+ " INSTALL_FILES=($(locations //web/gui2-fw-lib:onos-gui2-fw-npm-install)) &&" + # An array of filenames - sorted by time created
+ " FWLIB_FILES=($(locations //web/gui2-fw-lib:onos-gui2-fw-ng-build)) &&" + # An array of filenames - sorted by time created
+ " mkdir -p apps/inbandtelemetry/int-gui2-lib &&" +
+ " cd apps/inbandtelemetry/int-gui2-lib &&" +
+ " jar xf $$ROOT/$${INSTALL_FILES[0]} &&" +
+ " tar xf $$ROOT/$${FWLIB_FILES[0]} &&" +
+ " mv package/ node_modules/gui2-fw-lib/ &&" +
+ " mkdir -p projects/int-gui2-lib/fw &&" +
+ " (cd projects/int-gui2-lib/fw &&" +
+ " jar xf $$ROOT/$(location //web/gui2-fw-lib:gui2_fw_lib_ext_css)) &&" +
+ " chmod +x node_modules/@angular/cli/bin/ng &&" +
+ " export PATH=$$ROOT/$$(dirname $${NODE}):$$ROOT/apps/inbandtelemetry/int-gui2-lib/node_modules/@angular/cli/bin:$$PATH &&" +
+ " ng build --prod int-gui2-lib >> $$ROOT/$(location int-gui2-lib.log) 2>&1 ||" +
+ " if [ $$? -eq 0 ]; then echo 'Successfully ran build';" +
+ " else " +
+ " echo 'Error running \'ng build int-gui2-lib\' on \'//apps/inbandtelemetry/int-gui2-lib:int-gui2-lib-build\'. \\\n" +
+ " See bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib.log for more details' >&2;" +
+ #" tail -n 100 ../../$(location onos-gui2-ng-test.log) >&2;" +
+ " exit 1;" +
+ " fi;" +
+ " cd dist/int-gui2-lib && " +
+ " npm pack >> $$ROOT/$(location int-gui2-lib.log) 2>&1 &&" +
+ " mv int-gui2-lib-*.tgz $$ROOT/$(location int-gui2-lib-ver.tgz) &&" +
+ " touch $$ROOT/$(location int-gui2-lib.log)", # to get the log always as the 2nd file,
+ message = "Angular INT GUI2 build",
+ visibility = ["//visibility:public"],
+)
+
+"""
+ Run 'ng test' to run Angular test and 'ng lint' for checkstyle
+ See bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib-lint.log or
+ bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib-test.log for details of the Angular CLI output
+"""
+
+genrule(
+ name = "_int-gui2-lib-test-genrule",
+ srcs = [
+ "@nodejs//:bin/npm",
+ "@nodejs//:bin/node",
+ "@nodejs//:bin/nodejs/bin/node",
+ "@nodejs//:bin/nodejs/bin/npm",
+ "//web/gui2-fw-lib:onos-gui2-fw-npm-install",
+ "//web/gui2-fw-lib:onos-gui2-fw-ng-build",
+ "//web/gui2-fw-lib:gui2_fw_lib_ext_css",
+ ":_root_level_files",
+ ":_int_gui2_lib_src",
+ ":_int_gui2_lib_src_tests",
+ ],
+ outs = [
+ "int-gui2-lib-ver.log",
+ "int-gui2-lib-lint.log",
+ "int-gui2-lib-test.log",
+ ],
+ cmd = " ROOT=`pwd` &&" +
+ " export HOME=. &&" +
+ " export XDG_CONFIG_HOME=$(@D)/config &&" +
+ " NODE=$(location @nodejs//:bin/node) &&" +
+ " INSTALL_FILES=($(locations //web/gui2-fw-lib:onos-gui2-fw-npm-install)) &&" + # An array of filenames - sorted by time created
+ " FWLIB_FILES=($(locations //web/gui2-fw-lib:onos-gui2-fw-ng-build)) &&" + # An array of filenames - sorted by time created
+ " mkdir -p apps/inbandtelemetry/int-gui2-lib &&" +
+ " cd apps/inbandtelemetry/int-gui2-lib &&" +
+ " jar xf ../../../$(location :_int_gui2_lib_src_tests) &&" +
+ " jar xf $$ROOT/$${INSTALL_FILES[0]} &&" +
+ " tar xf $$ROOT/$${FWLIB_FILES[0]} &&" +
+ " mv package/ node_modules/gui2-fw-lib/ &&" +
+ " mkdir -p projects/int-gui2-lib/fw &&" +
+ " (cd projects/int-gui2-lib/fw &&" +
+ " jar xf $$ROOT/$(location //web/gui2-fw-lib:gui2_fw_lib_ext_css)) &&" +
+ " chmod +x $$ROOT/apps/inbandtelemetry/int-gui2-lib/node_modules/@angular/cli/bin/ng &&" +
+ " export PATH=$$ROOT/$$(dirname $${NODE}):node_modules/@angular/cli/bin:$$PATH &&" +
+ " node -v > ../../../$(location int-gui2-lib-ver.log) &&" +
+ " npm -v >> ../../../$(location int-gui2-lib-ver.log) &&" +
+ " ng -v >> ../../../$(location int-gui2-lib-ver.log) &&" +
+ " echo Lint not run > ../../../$(location int-gui2-lib-lint.log) &&" +
+ " echo Test not run > ../../../$(location int-gui2-lib-test.log) &&" +
+ " exit 0;",
+ # " ng lint int-gui2-lib > ../../../$(location int-gui2-lib-lint.log);" +
+ # " if [ -f /usr/bin/chromium-browser ]; then " + # Add to this for Mac and Chrome
+ # " export CHROME_BIN=/usr/bin/chromium-browser; " +
+ # " elif [ -f /opt/google/chrome/chrome ]; then " +
+ # " export CHROME_BIN=/opt/google/chrome/chrome; " +
+ # " else " +
+ # " MSG='Warning: Step int-gui2-lib-tests skipped because \\n" +
+ # " no binary for ChromeHeadless browser was found at /usr/bin/chromium-browser. \\n" +
+ # " Install Google Chrome or Chromium Browser to allow this step to run.';" +
+ # " echo -e $$MSG >&2;" +
+ # " echo -e $$MSG > ../../../$(location int-gui2-lib-test.log);" +
+ # " exit 0;" +
+ # " fi;" +
+ # " ng test int-gui2-lib --preserve-symlinks --code-coverage --browsers=ChromeHeadless" +
+ # " --watch=false > ../../../$(location int-gui2-lib-test.log) 2>&1 ||" +
+ # " if [ $$? -eq 0 ]; then echo 'Successfully ran tests';" +
+ # " else " +
+ # " echo 'Error running \'ng test int-gui2-lib\' on \'//apps/inbandtelemetry/int-gui2-lib:_int-gui2-lib-test-genrule\'. \\\n" +
+ # " See bazel-genfiles/apps/inbandtelemetry/int-gui2-lib/int-gui2-lib-test.log for more details' >&2;" +
+ # " exit 1;" +
+ # " fi;",
+ message = "Angular INT GUI2 Lib lint and test",
+)
+
+"""
+ Make a group of all the webapp files.
+"""
+
+filegroup(
+ name = "_int_gui2_lib_src",
+ srcs = glob(
+ [
+ "projects/int-gui2-lib/**/*",
+ ],
+ exclude = [
+ "projects/int-gui2-lib/**/*.spec.*", # Don't track tests here
+ "projects/int-gui2-lib/karma.conf.js",
+ "projects/int-gui2-lib/src/test.ts",
+ "projects/int-gui2-lib/fw/**/*",
+ ],
+ ),
+)
+
+"""
+ Make a group of all the webapp qpp files.
+"""
+
+filegroup(
+ name = "_int-gui2_app_files",
+ srcs = glob(
+ [
+ "src/**/*",
+ ],
+ ),
+)
+
+"""
+ Make a jar file of all the webapp test (*.spec.ts) files.
+"""
+
+genrule(
+ name = "_int_gui2_lib_src_tests",
+ srcs = glob(
+ [
+ "projects/int-gui2-lib/karma.conf.js",
+ "projects/int-gui2-lib/src/test.ts",
+ "projects/int-gui2-lib/tsconfig.spec.json",
+ "projects/int-gui2-lib/**/*.spec.ts",
+ ],
+ exclude = [
+ "projects/int-gui2-lib/ng-package.json",
+ "projects/int-gui2-lib/ng-package.prod.json",
+ "projects/int-gui2-lib/package.json",
+ "projects/int-gui2-lib/tsconfig.lib.json",
+ "projects/int-gui2-lib/tslint.json",
+ "projects/int-gui2-lib/src/public_api.ts",
+ ],
+ ),
+ outs = ["int_gui2_lib_src_tests.jar"],
+ cmd = "cd apps/inbandtelemetry/int-gui2-lib &&" +
+ " jar Mcf ../../../$@ .",
+)
+
+"""
+ Make a jar file of all the webapp test (*.spec.ts) files.
+"""
+
+genrule(
+ name = "_int_gui2_lib_tests",
+ srcs = glob(
+ [
+ "projects/int-gui2-lib/**/*.spec.ts",
+ "projects/int-gui2-lib/**/*.spec.json",
+ ],
+ exclude = [
+ "src/main/webapp/tests/**",
+ "src/main/webapp/node_modules/**",
+ "src/main/webapp/dist/**",
+ "src/main/webapp/doc/**",
+ ],
+ ),
+ outs = ["int_gui2_lib_tests.jar"],
+ cmd = "cd apps/inbandtelemetry/int-gui2-lib &&" +
+ " find projects/int-gui2-lib/src/lib -type f -exec touch -t 201808280000 {} \; &&" +
+ " jar Mcf ../../../$@ projects/int-gui2-lib/src/lib",
+)
+
+"""
+ Wrap the genrule for testing in a test
+"""
+
+sh_test(
+ name = "int-gui2-lib-tests",
+ size = "small",
+ srcs = [
+ ":ng-test.sh",
+ ],
+ data = [
+ ":_int-gui2-lib-test-genrule",
+ ],
+ deps = [
+ "@bazel_tools//tools/bash/runfiles",
+ ],
+)