Merge branch 'master' into feature/serviceTopology
# Conflicts:
# views/.yo-rc.json
# views/README.md
# views/ngXosLib/README.md
# views/ngXosLib/xosHelpers/src/services/csrfToken.interceptor.js
diff --git a/applications/README.md b/applications/README.md
new file mode 100644
index 0000000..dcb0552
--- /dev/null
+++ b/applications/README.md
@@ -0,0 +1,7 @@
+## Applications on XOS
+
+This directory contains applications that run on top of the XOS API.
+Initially, this includes:
+
+- Autoscaling Application
+- Subscriber Portal (Demo Application)
diff --git a/xos-apps/auto-scale/README.md b/applications/auto-scale/README.md
similarity index 88%
rename from xos-apps/auto-scale/README.md
rename to applications/auto-scale/README.md
index 3985719..cb11620 100644
--- a/xos-apps/auto-scale/README.md
+++ b/applications/auto-scale/README.md
@@ -1,3 +1,10 @@
+# Autoscaling Application
+The auto-scaling app uses monitoring data to decide when to scale a service up/down.
+
+It is treated as an application rather than yet another
+service because it offers only a GUI front-end; it is not
+modelled as a service that other services can build upon.
+
#How to
Ensure that the CORD config is installed and then run:
diff --git a/xos-apps/auto-scale/gui/.bowerrc b/applications/auto-scale/gui/.bowerrc
similarity index 100%
rename from xos-apps/auto-scale/gui/.bowerrc
rename to applications/auto-scale/gui/.bowerrc
diff --git a/xos-apps/auto-scale/gui/.editorconfig b/applications/auto-scale/gui/.editorconfig
similarity index 100%
rename from xos-apps/auto-scale/gui/.editorconfig
rename to applications/auto-scale/gui/.editorconfig
diff --git a/xos-apps/auto-scale/gui/.eslintrc b/applications/auto-scale/gui/.eslintrc
similarity index 100%
rename from xos-apps/auto-scale/gui/.eslintrc
rename to applications/auto-scale/gui/.eslintrc
diff --git a/xos-apps/auto-scale/gui/.gitignore b/applications/auto-scale/gui/.gitignore
similarity index 100%
rename from xos-apps/auto-scale/gui/.gitignore
rename to applications/auto-scale/gui/.gitignore
diff --git a/xos-apps/auto-scale/gui/bower.json b/applications/auto-scale/gui/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/bower.json
rename to applications/auto-scale/gui/bower.json
diff --git a/xos-apps/auto-scale/gui/env/default.js b/applications/auto-scale/gui/env/default.js
similarity index 100%
rename from xos-apps/auto-scale/gui/env/default.js
rename to applications/auto-scale/gui/env/default.js
diff --git a/xos-apps/auto-scale/gui/env/srikanth.js b/applications/auto-scale/gui/env/srikanth.js
similarity index 100%
rename from xos-apps/auto-scale/gui/env/srikanth.js
rename to applications/auto-scale/gui/env/srikanth.js
diff --git a/xos-apps/auto-scale/gui/gulp/build.js b/applications/auto-scale/gui/gulp/build.js
similarity index 100%
rename from xos-apps/auto-scale/gui/gulp/build.js
rename to applications/auto-scale/gui/gulp/build.js
diff --git a/xos-apps/auto-scale/gui/gulp/server.js b/applications/auto-scale/gui/gulp/server.js
similarity index 100%
rename from xos-apps/auto-scale/gui/gulp/server.js
rename to applications/auto-scale/gui/gulp/server.js
diff --git a/xos-apps/auto-scale/gui/gulpfile.js b/applications/auto-scale/gui/gulpfile.js
similarity index 100%
rename from xos-apps/auto-scale/gui/gulpfile.js
rename to applications/auto-scale/gui/gulpfile.js
diff --git a/xos-apps/auto-scale/gui/karma.conf.js b/applications/auto-scale/gui/karma.conf.js
similarity index 100%
rename from xos-apps/auto-scale/gui/karma.conf.js
rename to applications/auto-scale/gui/karma.conf.js
diff --git a/xos-apps/auto-scale/gui/package.json b/applications/auto-scale/gui/package.json
similarity index 100%
rename from xos-apps/auto-scale/gui/package.json
rename to applications/auto-scale/gui/package.json
diff --git a/xos-apps/auto-scale/gui/spec/.eslintrc b/applications/auto-scale/gui/spec/.eslintrc
similarity index 100%
rename from xos-apps/auto-scale/gui/spec/.eslintrc
rename to applications/auto-scale/gui/spec/.eslintrc
diff --git a/xos-apps/auto-scale/gui/spec/autoscaling.test.js b/applications/auto-scale/gui/spec/autoscaling.test.js
similarity index 100%
rename from xos-apps/auto-scale/gui/spec/autoscaling.test.js
rename to applications/auto-scale/gui/spec/autoscaling.test.js
diff --git a/xos-apps/auto-scale/gui/spec/autoscaling_data.mock.js b/applications/auto-scale/gui/spec/autoscaling_data.mock.js
similarity index 100%
rename from xos-apps/auto-scale/gui/spec/autoscaling_data.mock.js
rename to applications/auto-scale/gui/spec/autoscaling_data.mock.js
diff --git a/xos-apps/auto-scale/gui/src/css/style.css b/applications/auto-scale/gui/src/css/style.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/css/style.css
rename to applications/auto-scale/gui/src/css/style.css
diff --git a/xos-apps/auto-scale/gui/src/index.html b/applications/auto-scale/gui/src/index.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/index.html
rename to applications/auto-scale/gui/src/index.html
diff --git a/xos-apps/auto-scale/gui/src/js/autoscaling.service.js b/applications/auto-scale/gui/src/js/autoscaling.service.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/js/autoscaling.service.js
rename to applications/auto-scale/gui/src/js/autoscaling.service.js
diff --git a/xos-apps/auto-scale/gui/src/js/autoscaling_details.directive.js b/applications/auto-scale/gui/src/js/autoscaling_details.directive.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/js/autoscaling_details.directive.js
rename to applications/auto-scale/gui/src/js/autoscaling_details.directive.js
diff --git a/xos-apps/auto-scale/gui/src/js/main.js b/applications/auto-scale/gui/src/js/main.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/js/main.js
rename to applications/auto-scale/gui/src/js/main.js
diff --git a/xos-apps/auto-scale/gui/src/mocks/mock.json b/applications/auto-scale/gui/src/mocks/mock.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/mocks/mock.json
rename to applications/auto-scale/gui/src/mocks/mock.json
diff --git a/xos-apps/auto-scale/gui/src/templates/service-container.tpl.html b/applications/auto-scale/gui/src/templates/service-container.tpl.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/templates/service-container.tpl.html
rename to applications/auto-scale/gui/src/templates/service-container.tpl.html
diff --git a/xos-apps/auto-scale/gui/src/templates/service-detail.tpl.html b/applications/auto-scale/gui/src/templates/service-detail.tpl.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/templates/service-detail.tpl.html
rename to applications/auto-scale/gui/src/templates/service-detail.tpl.html
diff --git a/xos-apps/auto-scale/gui/src/templates/slice-detail.tpl.html b/applications/auto-scale/gui/src/templates/slice-detail.tpl.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/templates/slice-detail.tpl.html
rename to applications/auto-scale/gui/src/templates/slice-detail.tpl.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/.bower.json b/applications/auto-scale/gui/src/vendor/Chart.js/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/.bower.json
rename to applications/auto-scale/gui/src/vendor/Chart.js/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/.gitignore b/applications/auto-scale/gui/src/vendor/Chart.js/.gitignore
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/.gitignore
rename to applications/auto-scale/gui/src/vendor/Chart.js/.gitignore
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/.travis.yml b/applications/auto-scale/gui/src/vendor/Chart.js/.travis.yml
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/.travis.yml
rename to applications/auto-scale/gui/src/vendor/Chart.js/.travis.yml
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/CONTRIBUTING.md b/applications/auto-scale/gui/src/vendor/Chart.js/CONTRIBUTING.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/CONTRIBUTING.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/CONTRIBUTING.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/Chart.js b/applications/auto-scale/gui/src/vendor/Chart.js/Chart.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/Chart.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/Chart.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/Chart.min.js b/applications/auto-scale/gui/src/vendor/Chart.js/Chart.min.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/Chart.min.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/Chart.min.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/LICENSE.md b/applications/auto-scale/gui/src/vendor/Chart.js/LICENSE.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/LICENSE.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/LICENSE.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/README.md b/applications/auto-scale/gui/src/vendor/Chart.js/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/README.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/bower.json b/applications/auto-scale/gui/src/vendor/Chart.js/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/bower.json
rename to applications/auto-scale/gui/src/vendor/Chart.js/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/00-Getting-Started.md b/applications/auto-scale/gui/src/vendor/Chart.js/docs/00-Getting-Started.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/00-Getting-Started.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/docs/00-Getting-Started.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/01-Line-Chart.md b/applications/auto-scale/gui/src/vendor/Chart.js/docs/01-Line-Chart.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/01-Line-Chart.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/docs/01-Line-Chart.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/02-Bar-Chart.md b/applications/auto-scale/gui/src/vendor/Chart.js/docs/02-Bar-Chart.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/02-Bar-Chart.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/docs/02-Bar-Chart.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/03-Radar-Chart.md b/applications/auto-scale/gui/src/vendor/Chart.js/docs/03-Radar-Chart.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/03-Radar-Chart.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/docs/03-Radar-Chart.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/04-Polar-Area-Chart.md b/applications/auto-scale/gui/src/vendor/Chart.js/docs/04-Polar-Area-Chart.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/04-Polar-Area-Chart.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/docs/04-Polar-Area-Chart.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/05-Pie-Doughnut-Chart.md b/applications/auto-scale/gui/src/vendor/Chart.js/docs/05-Pie-Doughnut-Chart.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/05-Pie-Doughnut-Chart.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/docs/05-Pie-Doughnut-Chart.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/06-Advanced.md b/applications/auto-scale/gui/src/vendor/Chart.js/docs/06-Advanced.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/06-Advanced.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/docs/06-Advanced.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/07-Notes.md b/applications/auto-scale/gui/src/vendor/Chart.js/docs/07-Notes.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/docs/07-Notes.md
rename to applications/auto-scale/gui/src/vendor/Chart.js/docs/07-Notes.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/gulpfile.js b/applications/auto-scale/gui/src/vendor/Chart.js/gulpfile.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/gulpfile.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/gulpfile.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/package.json b/applications/auto-scale/gui/src/vendor/Chart.js/package.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/package.json
rename to applications/auto-scale/gui/src/vendor/Chart.js/package.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/bar.html b/applications/auto-scale/gui/src/vendor/Chart.js/samples/bar.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/bar.html
rename to applications/auto-scale/gui/src/vendor/Chart.js/samples/bar.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/doughnut.html b/applications/auto-scale/gui/src/vendor/Chart.js/samples/doughnut.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/doughnut.html
rename to applications/auto-scale/gui/src/vendor/Chart.js/samples/doughnut.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/line-customTooltips.html b/applications/auto-scale/gui/src/vendor/Chart.js/samples/line-customTooltips.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/line-customTooltips.html
rename to applications/auto-scale/gui/src/vendor/Chart.js/samples/line-customTooltips.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/line.html b/applications/auto-scale/gui/src/vendor/Chart.js/samples/line.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/line.html
rename to applications/auto-scale/gui/src/vendor/Chart.js/samples/line.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/pie-customTooltips.html b/applications/auto-scale/gui/src/vendor/Chart.js/samples/pie-customTooltips.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/pie-customTooltips.html
rename to applications/auto-scale/gui/src/vendor/Chart.js/samples/pie-customTooltips.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/pie.html b/applications/auto-scale/gui/src/vendor/Chart.js/samples/pie.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/pie.html
rename to applications/auto-scale/gui/src/vendor/Chart.js/samples/pie.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/polar-area.html b/applications/auto-scale/gui/src/vendor/Chart.js/samples/polar-area.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/polar-area.html
rename to applications/auto-scale/gui/src/vendor/Chart.js/samples/polar-area.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/radar.html b/applications/auto-scale/gui/src/vendor/Chart.js/samples/radar.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/samples/radar.html
rename to applications/auto-scale/gui/src/vendor/Chart.js/samples/radar.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Bar.js b/applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Bar.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Bar.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Bar.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Core.js b/applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Core.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Core.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Core.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Doughnut.js b/applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Doughnut.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Doughnut.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Doughnut.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Line.js b/applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Line.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Line.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Line.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.PolarArea.js b/applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.PolarArea.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.PolarArea.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.PolarArea.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Radar.js b/applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Radar.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/Chart.js/src/Chart.Radar.js
rename to applications/auto-scale/gui/src/vendor/Chart.js/src/Chart.Radar.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-animate/.bower.json b/applications/auto-scale/gui/src/vendor/angular-animate/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-animate/.bower.json
rename to applications/auto-scale/gui/src/vendor/angular-animate/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-animate/README.md b/applications/auto-scale/gui/src/vendor/angular-animate/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-animate/README.md
rename to applications/auto-scale/gui/src/vendor/angular-animate/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-animate/angular-animate.js b/applications/auto-scale/gui/src/vendor/angular-animate/angular-animate.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-animate/angular-animate.js
rename to applications/auto-scale/gui/src/vendor/angular-animate/angular-animate.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-animate/angular-animate.min.js b/applications/auto-scale/gui/src/vendor/angular-animate/angular-animate.min.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-animate/angular-animate.min.js
rename to applications/auto-scale/gui/src/vendor/angular-animate/angular-animate.min.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-animate/angular-animate.min.js.map b/applications/auto-scale/gui/src/vendor/angular-animate/angular-animate.min.js.map
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-animate/angular-animate.min.js.map
rename to applications/auto-scale/gui/src/vendor/angular-animate/angular-animate.min.js.map
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-animate/bower.json b/applications/auto-scale/gui/src/vendor/angular-animate/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-animate/bower.json
rename to applications/auto-scale/gui/src/vendor/angular-animate/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-animate/index.js b/applications/auto-scale/gui/src/vendor/angular-animate/index.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-animate/index.js
rename to applications/auto-scale/gui/src/vendor/angular-animate/index.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-animate/package.json b/applications/auto-scale/gui/src/vendor/angular-animate/package.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-animate/package.json
rename to applications/auto-scale/gui/src/vendor/angular-animate/package.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-chart.js/.bower.json b/applications/auto-scale/gui/src/vendor/angular-chart.js/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-chart.js/.bower.json
rename to applications/auto-scale/gui/src/vendor/angular-chart.js/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-chart.js/LICENSE b/applications/auto-scale/gui/src/vendor/angular-chart.js/LICENSE
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-chart.js/LICENSE
rename to applications/auto-scale/gui/src/vendor/angular-chart.js/LICENSE
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-chart.js/README.md b/applications/auto-scale/gui/src/vendor/angular-chart.js/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-chart.js/README.md
rename to applications/auto-scale/gui/src/vendor/angular-chart.js/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-chart.js/angular-chart.js b/applications/auto-scale/gui/src/vendor/angular-chart.js/angular-chart.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-chart.js/angular-chart.js
rename to applications/auto-scale/gui/src/vendor/angular-chart.js/angular-chart.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-chart.js/angular-chart.less b/applications/auto-scale/gui/src/vendor/angular-chart.js/angular-chart.less
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-chart.js/angular-chart.less
rename to applications/auto-scale/gui/src/vendor/angular-chart.js/angular-chart.less
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-chart.js/bower.json b/applications/auto-scale/gui/src/vendor/angular-chart.js/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-chart.js/bower.json
rename to applications/auto-scale/gui/src/vendor/angular-chart.js/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-chart.js/gulpfile.js b/applications/auto-scale/gui/src/vendor/angular-chart.js/gulpfile.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-chart.js/gulpfile.js
rename to applications/auto-scale/gui/src/vendor/angular-chart.js/gulpfile.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-chart.js/package.json b/applications/auto-scale/gui/src/vendor/angular-chart.js/package.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-chart.js/package.json
rename to applications/auto-scale/gui/src/vendor/angular-chart.js/package.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-mocks/.bower.json b/applications/auto-scale/gui/src/vendor/angular-mocks/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-mocks/.bower.json
rename to applications/auto-scale/gui/src/vendor/angular-mocks/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-mocks/README.md b/applications/auto-scale/gui/src/vendor/angular-mocks/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-mocks/README.md
rename to applications/auto-scale/gui/src/vendor/angular-mocks/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-mocks/angular-mocks.js b/applications/auto-scale/gui/src/vendor/angular-mocks/angular-mocks.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-mocks/angular-mocks.js
rename to applications/auto-scale/gui/src/vendor/angular-mocks/angular-mocks.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-mocks/bower.json b/applications/auto-scale/gui/src/vendor/angular-mocks/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-mocks/bower.json
rename to applications/auto-scale/gui/src/vendor/angular-mocks/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-mocks/ngAnimateMock.js b/applications/auto-scale/gui/src/vendor/angular-mocks/ngAnimateMock.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-mocks/ngAnimateMock.js
rename to applications/auto-scale/gui/src/vendor/angular-mocks/ngAnimateMock.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-mocks/ngMock.js b/applications/auto-scale/gui/src/vendor/angular-mocks/ngMock.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-mocks/ngMock.js
rename to applications/auto-scale/gui/src/vendor/angular-mocks/ngMock.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-mocks/ngMockE2E.js b/applications/auto-scale/gui/src/vendor/angular-mocks/ngMockE2E.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-mocks/ngMockE2E.js
rename to applications/auto-scale/gui/src/vendor/angular-mocks/ngMockE2E.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-mocks/package.json b/applications/auto-scale/gui/src/vendor/angular-mocks/package.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-mocks/package.json
rename to applications/auto-scale/gui/src/vendor/angular-mocks/package.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/.bower.json b/applications/auto-scale/gui/src/vendor/angular-ui-router/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/.bower.json
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/CHANGELOG.md b/applications/auto-scale/gui/src/vendor/angular-ui-router/CHANGELOG.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/CHANGELOG.md
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/CHANGELOG.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/CONTRIBUTING.md b/applications/auto-scale/gui/src/vendor/angular-ui-router/CONTRIBUTING.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/CONTRIBUTING.md
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/CONTRIBUTING.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/LICENSE b/applications/auto-scale/gui/src/vendor/angular-ui-router/LICENSE
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/LICENSE
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/LICENSE
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/README.md b/applications/auto-scale/gui/src/vendor/angular-ui-router/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/README.md
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/api/angular-ui-router.d.ts b/applications/auto-scale/gui/src/vendor/angular-ui-router/api/angular-ui-router.d.ts
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/api/angular-ui-router.d.ts
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/api/angular-ui-router.d.ts
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/bower.json b/applications/auto-scale/gui/src/vendor/angular-ui-router/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/bower.json
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/release/angular-ui-router.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/release/angular-ui-router.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/release/angular-ui-router.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/release/angular-ui-router.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/release/angular-ui-router.min.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/release/angular-ui-router.min.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/release/angular-ui-router.min.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/release/angular-ui-router.min.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/common.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/common.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/common.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/common.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/resolve.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/resolve.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/resolve.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/resolve.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/state.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/state.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/state.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/state.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/stateDirectives.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/stateDirectives.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/stateDirectives.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/stateDirectives.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/stateFilters.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/stateFilters.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/stateFilters.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/stateFilters.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/templateFactory.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/templateFactory.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/templateFactory.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/templateFactory.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/urlMatcherFactory.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/urlMatcherFactory.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/urlMatcherFactory.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/urlMatcherFactory.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/urlRouter.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/urlRouter.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/urlRouter.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/urlRouter.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/view.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/view.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/view.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/view.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/viewDirective.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/viewDirective.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/viewDirective.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/viewDirective.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/viewScroll.js b/applications/auto-scale/gui/src/vendor/angular-ui-router/src/viewScroll.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular-ui-router/src/viewScroll.js
rename to applications/auto-scale/gui/src/vendor/angular-ui-router/src/viewScroll.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/.bower.json b/applications/auto-scale/gui/src/vendor/angular/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/.bower.json
rename to applications/auto-scale/gui/src/vendor/angular/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/README.md b/applications/auto-scale/gui/src/vendor/angular/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/README.md
rename to applications/auto-scale/gui/src/vendor/angular/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/angular-csp.css b/applications/auto-scale/gui/src/vendor/angular/angular-csp.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/angular-csp.css
rename to applications/auto-scale/gui/src/vendor/angular/angular-csp.css
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/angular.js b/applications/auto-scale/gui/src/vendor/angular/angular.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/angular.js
rename to applications/auto-scale/gui/src/vendor/angular/angular.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/angular.min.js b/applications/auto-scale/gui/src/vendor/angular/angular.min.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/angular.min.js
rename to applications/auto-scale/gui/src/vendor/angular/angular.min.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/angular.min.js.gzip b/applications/auto-scale/gui/src/vendor/angular/angular.min.js.gzip
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/angular.min.js.gzip
rename to applications/auto-scale/gui/src/vendor/angular/angular.min.js.gzip
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/angular.min.js.map b/applications/auto-scale/gui/src/vendor/angular/angular.min.js.map
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/angular.min.js.map
rename to applications/auto-scale/gui/src/vendor/angular/angular.min.js.map
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/bower.json b/applications/auto-scale/gui/src/vendor/angular/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/bower.json
rename to applications/auto-scale/gui/src/vendor/angular/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/index.js b/applications/auto-scale/gui/src/vendor/angular/index.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/index.js
rename to applications/auto-scale/gui/src/vendor/angular/index.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/angular/package.json b/applications/auto-scale/gui/src/vendor/angular/package.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/angular/package.json
rename to applications/auto-scale/gui/src/vendor/angular/package.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/.bower.json b/applications/auto-scale/gui/src/vendor/bootstrap-css/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/.bower.json
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/LICENSE b/applications/auto-scale/gui/src/vendor/bootstrap-css/LICENSE
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/LICENSE
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/LICENSE
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/README.md b/applications/auto-scale/gui/src/vendor/bootstrap-css/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/README.md
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/bower.json b/applications/auto-scale/gui/src/vendor/bootstrap-css/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/bower.json
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.css b/applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.css
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.css
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.css.map b/applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.css.map
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.css.map
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.css.map
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.min.css b/applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.min.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.min.css
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap-theme.min.css
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.css b/applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.css
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.css
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.css.map b/applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.css.map
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.css.map
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.css.map
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.min.css b/applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.min.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.min.css
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/css/bootstrap.min.css
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.eot b/applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.eot
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.eot
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.svg b/applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.svg
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.svg
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.ttf b/applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.ttf
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.ttf
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.woff b/applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.woff
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.woff
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.woff2 b/applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.woff2
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.woff2
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/fonts/glyphicons-halflings-regular.woff2
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/js/bootstrap.js b/applications/auto-scale/gui/src/vendor/bootstrap-css/js/bootstrap.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/js/bootstrap.js
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/js/bootstrap.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/bootstrap-css/js/bootstrap.min.js b/applications/auto-scale/gui/src/vendor/bootstrap-css/js/bootstrap.min.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/bootstrap-css/js/bootstrap.min.js
rename to applications/auto-scale/gui/src/vendor/bootstrap-css/js/bootstrap.min.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/.bower.json b/applications/auto-scale/gui/src/vendor/jquery/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/.bower.json
rename to applications/auto-scale/gui/src/vendor/jquery/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/MIT-LICENSE.txt b/applications/auto-scale/gui/src/vendor/jquery/MIT-LICENSE.txt
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/MIT-LICENSE.txt
rename to applications/auto-scale/gui/src/vendor/jquery/MIT-LICENSE.txt
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/bower.json b/applications/auto-scale/gui/src/vendor/jquery/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/bower.json
rename to applications/auto-scale/gui/src/vendor/jquery/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/jsonp.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax/jsonp.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/jsonp.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax/jsonp.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/load.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax/load.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/load.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax/load.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/parseJSON.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax/parseJSON.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/parseJSON.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax/parseJSON.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/parseXML.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax/parseXML.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/parseXML.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax/parseXML.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/script.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax/script.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/script.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax/script.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/var/nonce.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax/var/nonce.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/var/nonce.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax/var/nonce.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/var/rquery.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax/var/rquery.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/var/rquery.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax/var/rquery.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/xhr.js b/applications/auto-scale/gui/src/vendor/jquery/src/ajax/xhr.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/ajax/xhr.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/ajax/xhr.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes.js b/applications/auto-scale/gui/src/vendor/jquery/src/attributes.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/attributes.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/attr.js b/applications/auto-scale/gui/src/vendor/jquery/src/attributes/attr.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/attr.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/attributes/attr.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/classes.js b/applications/auto-scale/gui/src/vendor/jquery/src/attributes/classes.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/classes.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/attributes/classes.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/prop.js b/applications/auto-scale/gui/src/vendor/jquery/src/attributes/prop.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/prop.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/attributes/prop.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/support.js b/applications/auto-scale/gui/src/vendor/jquery/src/attributes/support.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/support.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/attributes/support.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/val.js b/applications/auto-scale/gui/src/vendor/jquery/src/attributes/val.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/attributes/val.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/attributes/val.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/callbacks.js b/applications/auto-scale/gui/src/vendor/jquery/src/callbacks.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/callbacks.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/callbacks.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/core.js b/applications/auto-scale/gui/src/vendor/jquery/src/core.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/core.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/core.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/core/access.js b/applications/auto-scale/gui/src/vendor/jquery/src/core/access.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/core/access.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/core/access.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/core/init.js b/applications/auto-scale/gui/src/vendor/jquery/src/core/init.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/core/init.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/core/init.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/core/parseHTML.js b/applications/auto-scale/gui/src/vendor/jquery/src/core/parseHTML.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/core/parseHTML.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/core/parseHTML.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/core/ready.js b/applications/auto-scale/gui/src/vendor/jquery/src/core/ready.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/core/ready.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/core/ready.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/core/var/rsingleTag.js b/applications/auto-scale/gui/src/vendor/jquery/src/core/var/rsingleTag.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/core/var/rsingleTag.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/core/var/rsingleTag.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css.js b/applications/auto-scale/gui/src/vendor/jquery/src/css.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/addGetHookIf.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/addGetHookIf.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/addGetHookIf.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/addGetHookIf.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/curCSS.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/curCSS.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/curCSS.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/curCSS.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/defaultDisplay.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/defaultDisplay.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/defaultDisplay.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/defaultDisplay.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/hiddenVisibleSelectors.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/hiddenVisibleSelectors.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/hiddenVisibleSelectors.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/hiddenVisibleSelectors.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/support.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/support.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/support.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/support.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/swap.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/swap.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/swap.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/swap.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/cssExpand.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/var/cssExpand.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/cssExpand.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/var/cssExpand.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/getStyles.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/var/getStyles.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/getStyles.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/var/getStyles.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/isHidden.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/var/isHidden.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/isHidden.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/var/isHidden.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/rmargin.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/var/rmargin.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/rmargin.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/var/rmargin.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/rnumnonpx.js b/applications/auto-scale/gui/src/vendor/jquery/src/css/var/rnumnonpx.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/css/var/rnumnonpx.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/css/var/rnumnonpx.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/data.js b/applications/auto-scale/gui/src/vendor/jquery/src/data.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/data.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/data.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/data/Data.js b/applications/auto-scale/gui/src/vendor/jquery/src/data/Data.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/data/Data.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/data/Data.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/data/accepts.js b/applications/auto-scale/gui/src/vendor/jquery/src/data/accepts.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/data/accepts.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/data/accepts.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/data/var/data_priv.js b/applications/auto-scale/gui/src/vendor/jquery/src/data/var/data_priv.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/data/var/data_priv.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/data/var/data_priv.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/data/var/data_user.js b/applications/auto-scale/gui/src/vendor/jquery/src/data/var/data_user.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/data/var/data_user.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/data/var/data_user.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/deferred.js b/applications/auto-scale/gui/src/vendor/jquery/src/deferred.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/deferred.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/deferred.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/deprecated.js b/applications/auto-scale/gui/src/vendor/jquery/src/deprecated.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/deprecated.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/deprecated.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/dimensions.js b/applications/auto-scale/gui/src/vendor/jquery/src/dimensions.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/dimensions.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/dimensions.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/effects.js b/applications/auto-scale/gui/src/vendor/jquery/src/effects.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/effects.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/effects.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/effects/Tween.js b/applications/auto-scale/gui/src/vendor/jquery/src/effects/Tween.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/effects/Tween.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/effects/Tween.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/effects/animatedSelector.js b/applications/auto-scale/gui/src/vendor/jquery/src/effects/animatedSelector.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/effects/animatedSelector.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/effects/animatedSelector.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/event.js b/applications/auto-scale/gui/src/vendor/jquery/src/event.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/event.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/event.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/event/ajax.js b/applications/auto-scale/gui/src/vendor/jquery/src/event/ajax.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/event/ajax.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/event/ajax.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/event/alias.js b/applications/auto-scale/gui/src/vendor/jquery/src/event/alias.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/event/alias.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/event/alias.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/event/support.js b/applications/auto-scale/gui/src/vendor/jquery/src/event/support.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/event/support.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/event/support.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/exports/amd.js b/applications/auto-scale/gui/src/vendor/jquery/src/exports/amd.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/exports/amd.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/exports/amd.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/exports/global.js b/applications/auto-scale/gui/src/vendor/jquery/src/exports/global.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/exports/global.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/exports/global.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/intro.js b/applications/auto-scale/gui/src/vendor/jquery/src/intro.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/intro.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/intro.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/jquery.js b/applications/auto-scale/gui/src/vendor/jquery/src/jquery.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/jquery.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/jquery.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/manipulation.js b/applications/auto-scale/gui/src/vendor/jquery/src/manipulation.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/manipulation.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/manipulation.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/manipulation/_evalUrl.js b/applications/auto-scale/gui/src/vendor/jquery/src/manipulation/_evalUrl.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/manipulation/_evalUrl.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/manipulation/_evalUrl.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/manipulation/support.js b/applications/auto-scale/gui/src/vendor/jquery/src/manipulation/support.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/manipulation/support.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/manipulation/support.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/manipulation/var/rcheckableType.js b/applications/auto-scale/gui/src/vendor/jquery/src/manipulation/var/rcheckableType.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/manipulation/var/rcheckableType.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/manipulation/var/rcheckableType.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/offset.js b/applications/auto-scale/gui/src/vendor/jquery/src/offset.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/offset.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/offset.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/outro.js b/applications/auto-scale/gui/src/vendor/jquery/src/outro.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/outro.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/outro.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/queue.js b/applications/auto-scale/gui/src/vendor/jquery/src/queue.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/queue.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/queue.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/queue/delay.js b/applications/auto-scale/gui/src/vendor/jquery/src/queue/delay.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/queue/delay.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/queue/delay.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/selector-native.js b/applications/auto-scale/gui/src/vendor/jquery/src/selector-native.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/selector-native.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/selector-native.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/selector-sizzle.js b/applications/auto-scale/gui/src/vendor/jquery/src/selector-sizzle.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/selector-sizzle.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/selector-sizzle.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/selector.js b/applications/auto-scale/gui/src/vendor/jquery/src/selector.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/selector.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/selector.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/serialize.js b/applications/auto-scale/gui/src/vendor/jquery/src/serialize.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/serialize.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/serialize.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/traversing.js b/applications/auto-scale/gui/src/vendor/jquery/src/traversing.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/traversing.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/traversing.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/traversing/findFilter.js b/applications/auto-scale/gui/src/vendor/jquery/src/traversing/findFilter.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/traversing/findFilter.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/traversing/findFilter.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/traversing/var/rneedsContext.js b/applications/auto-scale/gui/src/vendor/jquery/src/traversing/var/rneedsContext.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/traversing/var/rneedsContext.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/traversing/var/rneedsContext.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/arr.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/arr.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/arr.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/arr.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/class2type.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/class2type.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/class2type.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/class2type.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/concat.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/concat.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/concat.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/concat.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/hasOwn.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/hasOwn.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/hasOwn.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/hasOwn.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/indexOf.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/indexOf.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/indexOf.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/indexOf.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/pnum.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/pnum.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/pnum.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/pnum.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/push.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/push.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/push.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/push.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/rnotwhite.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/rnotwhite.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/rnotwhite.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/rnotwhite.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/slice.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/slice.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/slice.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/slice.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/strundefined.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/strundefined.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/strundefined.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/strundefined.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/support.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/support.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/support.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/support.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/var/toString.js b/applications/auto-scale/gui/src/vendor/jquery/src/var/toString.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/var/toString.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/var/toString.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/jquery/src/wrap.js b/applications/auto-scale/gui/src/vendor/jquery/src/wrap.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/jquery/src/wrap.js
rename to applications/auto-scale/gui/src/vendor/jquery/src/wrap.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/.bower.json b/applications/auto-scale/gui/src/vendor/ng-lodash/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/.bower.json
rename to applications/auto-scale/gui/src/vendor/ng-lodash/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/.bowerrc b/applications/auto-scale/gui/src/vendor/ng-lodash/.bowerrc
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/.bowerrc
rename to applications/auto-scale/gui/src/vendor/ng-lodash/.bowerrc
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/.editorconfig b/applications/auto-scale/gui/src/vendor/ng-lodash/.editorconfig
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/.editorconfig
rename to applications/auto-scale/gui/src/vendor/ng-lodash/.editorconfig
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/.gitignore b/applications/auto-scale/gui/src/vendor/ng-lodash/.gitignore
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/.gitignore
rename to applications/auto-scale/gui/src/vendor/ng-lodash/.gitignore
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/.jscsrc b/applications/auto-scale/gui/src/vendor/ng-lodash/.jscsrc
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/.jscsrc
rename to applications/auto-scale/gui/src/vendor/ng-lodash/.jscsrc
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/.jshintrc b/applications/auto-scale/gui/src/vendor/ng-lodash/.jshintrc
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/.jshintrc
rename to applications/auto-scale/gui/src/vendor/ng-lodash/.jshintrc
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/.travis.yml b/applications/auto-scale/gui/src/vendor/ng-lodash/.travis.yml
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/.travis.yml
rename to applications/auto-scale/gui/src/vendor/ng-lodash/.travis.yml
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/CONTRIBUTING.md b/applications/auto-scale/gui/src/vendor/ng-lodash/CONTRIBUTING.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/CONTRIBUTING.md
rename to applications/auto-scale/gui/src/vendor/ng-lodash/CONTRIBUTING.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/License.txt b/applications/auto-scale/gui/src/vendor/ng-lodash/License.txt
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/License.txt
rename to applications/auto-scale/gui/src/vendor/ng-lodash/License.txt
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/README.md b/applications/auto-scale/gui/src/vendor/ng-lodash/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/README.md
rename to applications/auto-scale/gui/src/vendor/ng-lodash/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/bower.json b/applications/auto-scale/gui/src/vendor/ng-lodash/bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/bower.json
rename to applications/auto-scale/gui/src/vendor/ng-lodash/bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/build/ng-lodash.js b/applications/auto-scale/gui/src/vendor/ng-lodash/build/ng-lodash.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/build/ng-lodash.js
rename to applications/auto-scale/gui/src/vendor/ng-lodash/build/ng-lodash.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/build/ng-lodash.min.js b/applications/auto-scale/gui/src/vendor/ng-lodash/build/ng-lodash.min.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/build/ng-lodash.min.js
rename to applications/auto-scale/gui/src/vendor/ng-lodash/build/ng-lodash.min.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ng-lodash/package.json b/applications/auto-scale/gui/src/vendor/ng-lodash/package.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ng-lodash/package.json
rename to applications/auto-scale/gui/src/vendor/ng-lodash/package.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.bower.json b/applications/auto-scale/gui/src/vendor/ui.bootstrap/.bower.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.bower.json
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/.bower.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.editorconfig b/applications/auto-scale/gui/src/vendor/ui.bootstrap/.editorconfig
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.editorconfig
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/.editorconfig
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.gitattributes b/applications/auto-scale/gui/src/vendor/ui.bootstrap/.gitattributes
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.gitattributes
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/.gitattributes
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.gitignore b/applications/auto-scale/gui/src/vendor/ui.bootstrap/.gitignore
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.gitignore
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/.gitignore
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.jshintrc b/applications/auto-scale/gui/src/vendor/ui.bootstrap/.jshintrc
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.jshintrc
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/.jshintrc
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.npmignore b/applications/auto-scale/gui/src/vendor/ui.bootstrap/.npmignore
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.npmignore
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/.npmignore
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.travis.yml b/applications/auto-scale/gui/src/vendor/ui.bootstrap/.travis.yml
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/.travis.yml
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/.travis.yml
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/CHANGELOG.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/CHANGELOG.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/CHANGELOG.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/CHANGELOG.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/CODE_OF_CONDUCT.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/CODE_OF_CONDUCT.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/CODE_OF_CONDUCT.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/CODE_OF_CONDUCT.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/CONTRIBUTING.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/CONTRIBUTING.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/CONTRIBUTING.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/CONTRIBUTING.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/Gruntfile.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/Gruntfile.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/Gruntfile.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/Gruntfile.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/LICENSE b/applications/auto-scale/gui/src/vendor/ui.bootstrap/LICENSE
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/LICENSE
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/LICENSE
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/README.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/README.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/karma.conf.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/karma.conf.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/karma.conf.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/karma.conf.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/changelog.tpl.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/changelog.tpl.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/changelog.tpl.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/changelog.tpl.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/app.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/app.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/app.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/app.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/demo.css b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/demo.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/demo.css
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/demo.css
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/favicon.ico b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/favicon.ico
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/favicon.ico
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/favicon.ico
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/github-16px.png b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/github-16px.png
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/github-16px.png
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/github-16px.png
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/header.png b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/header.png
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/header.png
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/header.png
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/img/glyphicons-halflings-white.png b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/img/glyphicons-halflings-white.png
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/img/glyphicons-halflings-white.png
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/img/glyphicons-halflings-white.png
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/img/glyphicons-halflings.png b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/img/glyphicons-halflings.png
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/img/glyphicons-halflings.png
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/img/glyphicons-halflings.png
Binary files differ
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/plunker.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/plunker.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/plunker.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/plunker.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-generic.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-generic.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-generic.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-generic.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-html.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-html.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-html.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-html.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-javascript.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-javascript.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-javascript.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow-javascript.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow.css b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow.css
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow.css
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/rainbow.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/smoothscroll-angular-custom.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/smoothscroll-angular-custom.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/smoothscroll-angular-custom.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/smoothscroll-angular-custom.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/uglifyjs.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/uglifyjs.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/uglifyjs.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/assets/uglifyjs.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/index.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/index.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/index.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/demo/index.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/raw-files-generator.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/raw-files-generator.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/raw-files-generator.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/raw-files-generator.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/test-lib/helpers.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/test-lib/helpers.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/test-lib/helpers.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/test-lib/helpers.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/test-lib/jquery-1.8.2.min.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/test-lib/jquery-1.8.2.min.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/test-lib/jquery-1.8.2.min.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/test-lib/jquery-1.8.2.min.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/validate-commit-msg.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/validate-commit-msg.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/misc/validate-commit-msg.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/misc/validate-commit-msg.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/package.json b/applications/auto-scale/gui/src/vendor/ui.bootstrap/package.json
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/package.json
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/package.json
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/accordion.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/accordion.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/accordion.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/accordion.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/test/accordion.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/test/accordion.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/test/accordion.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/accordion/test/accordion.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/alert.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/alert.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/alert.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/alert.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/test/alert.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/test/alert.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/test/alert.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/alert/test/alert.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/buttons.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/buttons.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/buttons.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/buttons.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/test/buttons.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/test/buttons.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/test/buttons.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/buttons/test/buttons.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/carousel.css b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/carousel.css
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/carousel.css
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/carousel.css
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/carousel.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/carousel.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/carousel.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/carousel.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/README.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/README.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/README.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/README.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/test/carousel.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/test/carousel.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/test/carousel.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/carousel/test/carousel.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/collapse.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/collapse.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/collapse.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/collapse.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/test/collapse.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/test/collapse.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/test/collapse.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/collapse/test/collapse.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dateparser/dateparser.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dateparser/dateparser.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dateparser/dateparser.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dateparser/dateparser.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dateparser/test/dateparser.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dateparser/test/dateparser.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dateparser/test/dateparser.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dateparser/test/dateparser.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/datepicker.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/datepicker.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/datepicker.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/datepicker.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/test/datepicker.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/test/datepicker.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/test/datepicker.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/datepicker/test/datepicker.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/dropdown.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/dropdown.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/dropdown.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/dropdown.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/test/dropdown.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/test/dropdown.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/test/dropdown.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/dropdown/test/dropdown.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/modal.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/modal.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/modal.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/modal.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/modal.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/modal.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/modal.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/modal.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/modalWindow.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/modalWindow.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/modalWindow.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/modalWindow.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/multiMap.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/multiMap.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/multiMap.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/modal/test/multiMap.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/pagination.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/pagination.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/pagination.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/pagination.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/test/pager.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/test/pager.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/test/pager.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/test/pager.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/test/pagination.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/test/pagination.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/test/pagination.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/pagination/test/pagination.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/popover.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/popover.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/popover.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/popover.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover-html.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover-html.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover-html.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover-html.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover-template.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover-template.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover-template.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover-template.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/popover/test/popover.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/position/position.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/position/position.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/position/position.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/position/position.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/position/test/position.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/position/test/position.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/position/test/position.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/position/test/position.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/position/test/test.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/position/test/test.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/position/test/test.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/position/test/test.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/progressbar.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/progressbar.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/progressbar.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/progressbar.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/test/progressbar.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/test/progressbar.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/test/progressbar.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/progressbar/test/progressbar.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/rating.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/rating.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/rating.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/rating.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/test/rating.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/test/rating.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/test/rating.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/rating/test/rating.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/stackedMap/stackedMap.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/stackedMap/stackedMap.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/stackedMap/stackedMap.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/stackedMap/stackedMap.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/stackedMap/test/stackedMap.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/stackedMap/test/stackedMap.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/stackedMap/test/stackedMap.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/stackedMap/test/stackedMap.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/tabs.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/tabs.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/tabs.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/tabs.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/test/tabs.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/test/tabs.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/test/tabs.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tabs/test/tabs.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/test/timepicker.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/test/timepicker.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/test/timepicker.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/test/timepicker.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/timepicker.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/timepicker.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/timepicker.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/timepicker/timepicker.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip-template.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip-template.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip-template.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip-template.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip2.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip2.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip2.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/test/tooltip2.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/tooltip.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/tooltip.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/tooltip.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/tooltip/tooltip.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/demo.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/demo.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/demo.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/demo.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/demo.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/demo.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/demo.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/demo.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/readme.md b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/readme.md
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/readme.md
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/docs/readme.md
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-highlight-ngsanitize.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-highlight-ngsanitize.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-highlight-ngsanitize.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-highlight-ngsanitize.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-highlight.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-highlight.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-highlight.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-highlight.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-parser.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-parser.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-parser.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-parser.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-popup.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-popup.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-popup.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead-popup.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead.spec.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead.spec.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead.spec.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/test/typeahead.spec.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/typeahead.js b/applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/typeahead.js
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/typeahead.js
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/src/typeahead/typeahead.js
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/accordion/accordion-group.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/accordion/accordion-group.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/accordion/accordion-group.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/accordion/accordion-group.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/accordion/accordion.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/accordion/accordion.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/accordion/accordion.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/accordion/accordion.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/alert/alert.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/alert/alert.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/alert/alert.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/alert/alert.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/carousel/carousel.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/carousel/carousel.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/carousel/carousel.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/carousel/carousel.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/carousel/slide.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/carousel/slide.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/carousel/slide.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/carousel/slide.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/datepicker.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/datepicker.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/datepicker.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/datepicker.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/day.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/day.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/day.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/day.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/month.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/month.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/month.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/month.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/popup.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/popup.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/popup.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/popup.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/year.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/year.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/year.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/datepicker/year.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/modal/backdrop.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/modal/backdrop.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/modal/backdrop.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/modal/backdrop.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/modal/window.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/modal/window.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/modal/window.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/modal/window.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/pagination/pager.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/pagination/pager.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/pagination/pager.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/pagination/pager.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/pagination/pagination.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/pagination/pagination.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/pagination/pagination.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/pagination/pagination.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover-html.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover-html.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover-html.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover-html.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover-template.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover-template.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover-template.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover-template.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/popover/popover.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/bar.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/bar.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/bar.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/bar.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/progress.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/progress.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/progress.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/progress.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/progressbar.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/progressbar.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/progressbar.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/progressbar/progressbar.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/rating/rating.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/rating/rating.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/rating/rating.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/rating/rating.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tabs/tab.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tabs/tab.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tabs/tab.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tabs/tab.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tabs/tabset.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tabs/tabset.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tabs/tabset.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tabs/tabset.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/timepicker/timepicker.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/timepicker/timepicker.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/timepicker/timepicker.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/timepicker/timepicker.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-html-popup.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-html-popup.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-html-popup.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-html-popup.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-popup.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-popup.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-popup.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-popup.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-template-popup.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-template-popup.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-template-popup.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/tooltip/tooltip-template-popup.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/typeahead/typeahead-match.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/typeahead/typeahead-match.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/typeahead/typeahead-match.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/typeahead/typeahead-match.html
diff --git a/xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/typeahead/typeahead-popup.html b/applications/auto-scale/gui/src/vendor/ui.bootstrap/template/typeahead/typeahead-popup.html
similarity index 100%
rename from xos-apps/auto-scale/gui/src/vendor/ui.bootstrap/template/typeahead/typeahead-popup.html
rename to applications/auto-scale/gui/src/vendor/ui.bootstrap/template/typeahead/typeahead-popup.html
diff --git a/xos-apps/auto-scale/xos_auto_scaling_app.py b/applications/auto-scale/xos_auto_scaling_app.py
similarity index 100%
rename from xos-apps/auto-scale/xos_auto_scaling_app.py
rename to applications/auto-scale/xos_auto_scaling_app.py
diff --git a/applications/subscriberPortal/.bowerrc b/applications/subscriberPortal/.bowerrc
new file mode 100644
index 0000000..bfd1e92
--- /dev/null
+++ b/applications/subscriberPortal/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "src/bower_components/"
+}
diff --git a/applications/subscriberPortal/.gitignore b/applications/subscriberPortal/.gitignore
new file mode 100644
index 0000000..ca08d4d
--- /dev/null
+++ b/applications/subscriberPortal/.gitignore
@@ -0,0 +1,2 @@
+npm-debug.log
+src/bower_components
diff --git a/applications/subscriberPortal/README.md b/applications/subscriberPortal/README.md
new file mode 100644
index 0000000..f414994
--- /dev/null
+++ b/applications/subscriberPortal/README.md
@@ -0,0 +1,42 @@
+# Subscriber Portal
+
+This is a demonstrative implementation of a subscriber portal.
+Note that this is intended to demonstrate a possible implementation, but it is not the only way.
+
+This demo is developed with AngularJs, but your subscriber portal could be developed using whichever framework
+in whichever language as it should only integrate XOS api with your services (eg: Authentication, CRM, Bug Tracker...)
+
+## Concept Demonstrated
+
+This is intended to be a portal for a Subscriber user to manage a Parent Control Application provided by XOS.
+To Subscriber will be able to choose between two bundles:
+ - Basic Bundle
+ - Family Bundle
+
+The subscriber should enable the _Family Bundle_ trough the _Bundles_ page.
+Once enable he will be able to define different levels of Parental Control for each device in his house.
+
+### Data Sources
+
+_Bundles_ are intended as a group of services offered by a company, so they should be managed by the company services and business logic.
+They are not intended to be part of XOS, so for demonstrative purposes have been hardcoded into the application.
+Consider that this kind of information can be provided by a remote service.
+
+_Subscribers_, _Users_ and _Parental Control_ are information managed by XOS and currently provided by its API.
+
+## Getting started
+
+_All commands in this section refers to `applications/subscriberPortal`_
+
+_Note that NodeJs and Bower are required to run this demo_
+
+To open this demo:
+
+ - open `env/default.js` and replace `host` with the URL of your XOS installation.
+ - from the portal root execute `npm start`
+
+This should open the demo in the browser.
+
+### Bugs
+
+Please report any bug or question trough github issues.
diff --git a/applications/subscriberPortal/bower.json b/applications/subscriberPortal/bower.json
new file mode 100644
index 0000000..32241cd
--- /dev/null
+++ b/applications/subscriberPortal/bower.json
@@ -0,0 +1,26 @@
+{
+ "name": "subscriber-portal",
+ "description": "Demo implementation for a subscriber portal in XOS",
+ "main": "index.js",
+ "authors": [
+ "Matteo Scandolo"
+ ],
+ "license": "ISC",
+ "homepage": "https://github.com/open-cloud/xos",
+ "moduleType": [],
+ "private": true,
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "dependencies": {
+ "angular-animate": "~1.4.9",
+ "jquery": "~2.2.0",
+ "angular-resource": "~1.4.9",
+ "angular-route": "~1.4.9",
+ "angular-cookies": "~1.4.9"
+ }
+}
diff --git a/applications/subscriberPortal/bs-config.js b/applications/subscriberPortal/bs-config.js
new file mode 100644
index 0000000..f79f762
--- /dev/null
+++ b/applications/subscriberPortal/bs-config.js
@@ -0,0 +1,69 @@
+
+/*
+ |--------------------------------------------------------------------------
+ | Browser-sync config file
+ |--------------------------------------------------------------------------
+ |
+ | For up-to-date information about the options:
+ | http://www.browsersync.io/docs/options/
+ |
+ | There are more options than you see here, these are just the ones that are
+ | set internally. See the website for more info.
+ |
+ |
+ */
+
+var httpProxy = require('http-proxy');
+var environment = process.env.NODE_ENV;
+
+if (environment){
+ var conf = require(`./env/${environment}.js`);
+}
+else{
+ var conf = require('./env/default.js')
+}
+
+var proxy = httpProxy.createProxyServer({
+ target: conf.host || 'http://0.0.0.0:9999'
+});
+
+proxy.on('error', function(error, req, res) {
+ res.writeHead(500, {
+ 'Content-Type': 'text/plain'
+ });
+ console.error('[Proxy]', error);
+});
+
+module.exports = {
+ "files": [
+ './src/**/*'
+ ],
+ "server": {
+ baseDir: './src',
+ //directory: true,
+ routes: {
+ '/rs/dashboard': './mocks/dashboard.json',
+ '/rs/bundle': './mocks/bundle.json',
+ '/rs/users': './mocks/users.json'
+ },
+ middleware: function(req, res, next){
+ if(
+ req.url.indexOf('/xos/') !== -1 ||
+ req.url.indexOf('/xoslib/') !== -1 ||
+ req.url.indexOf('/hpcapi/') !== -1
+ ){
+ console.log(req.headers)
+ if(req.headers['X-CSRFToken']){
+ req.headers['x-csrftoken'] = req.headers['x-csrftoken'];
+ req.headers.cookie = `xoscsrftoken=${req.headers['x-csrftoken']}; xossessionid=${req.headers['sessionid']}`;
+ }
+ proxy.web(req, res);
+ }
+ else{
+ next();
+ }
+ }
+ },
+ "port": 3000,
+ "open": "local"
+};
\ No newline at end of file
diff --git a/applications/subscriberPortal/env/default.js b/applications/subscriberPortal/env/default.js
new file mode 100644
index 0000000..3ec6da8
--- /dev/null
+++ b/applications/subscriberPortal/env/default.js
@@ -0,0 +1,11 @@
+// This is a default configuration for your development environment.
+// You can duplicate this configuration for any of your Backend Environments.
+// Different configurations are loaded setting a NODE_ENV variable that contain the config file name.
+// `NODE_ENV=local npm start`
+//
+// If xoscsrftoken or xossessionid are not specified the browser value are used
+// (works only for local environment as both application are served on the same domain)
+
+module.exports = {
+ host: 'http://clnode078.clemson.cloudlab.us:9999/'
+};
diff --git a/applications/subscriberPortal/mocks/bundle.json b/applications/subscriberPortal/mocks/bundle.json
new file mode 100644
index 0000000..035f23f
--- /dev/null
+++ b/applications/subscriberPortal/mocks/bundle.json
@@ -0,0 +1,33 @@
+{
+ "bundle": {
+ "id": "family",
+ "name": "Family Bundle",
+ "functions": [
+ {
+ "id": "internet",
+ "name": "Internet",
+ "desc": "Basic internet connectivity.",
+ "params": {}
+ },
+ {
+ "id": "firewall",
+ "name": "Firewall",
+ "desc": "Normal firewall protection.",
+ "params": {}
+ },
+ {
+ "id": "url_filter",
+ "name": "Parental Control",
+ "desc": "Variable levels of URL filtering.",
+ "params": {
+ "level": "PG",
+ "levels": [ "PG", "PG-13", "R" ]
+ }
+ }
+ ]
+ },
+ "bundles": [
+ { "id": "basic", "name": "Basic Bundle" },
+ { "id": "family", "name": "Family Bundle" }
+ ]
+}
diff --git a/applications/subscriberPortal/mocks/dashboard.json b/applications/subscriberPortal/mocks/dashboard.json
new file mode 100644
index 0000000..696b74b
--- /dev/null
+++ b/applications/subscriberPortal/mocks/dashboard.json
@@ -0,0 +1,10 @@
+{
+ "bundle_name": "Family Bundle",
+ "bundle_desc": "This is the bundle description. Lorem ipsum dolor sit amet, consectetur adipisicing elit.",
+ "users": [
+ { "id": 1, "name": "Mom's MacBook", "icon_id": "mom", "mac": "00:11:22:33:44:55" },
+ { "id": 1, "name": "Dad's iPad", "icon_id": "dad", "mac": "00:11:22:33:44:66" },
+ { "id": 1, "name": "Dick's laptop", "icon_id": "boy2", "mac": "00:11:22:33:44:77" },
+ { "id": 1, "name": "Jane's laptop", "icon_id": "girl1", "mac": "00:11:22:33:44:88" }
+ ]
+}
diff --git a/applications/subscriberPortal/mocks/users.json b/applications/subscriberPortal/mocks/users.json
new file mode 100644
index 0000000..3b9ed10
--- /dev/null
+++ b/applications/subscriberPortal/mocks/users.json
@@ -0,0 +1,48 @@
+{
+ "users": [
+ {
+ "id": 1,
+ "name": "Mom's MacBook",
+ "mac": "010203040506",
+ "icon_id": "mom",
+ "profile": {
+ "url_filter": {
+ "level": "R"
+ }
+ }
+ },
+ {
+ "id": 2,
+ "name": "Dad's iPad",
+ "mac": "010203040507",
+ "icon_id": "dad",
+ "profile": {
+ "url_filter": {
+ "level": "R"
+ }
+ }
+ },
+ {
+ "id": 3,
+ "name": "Dick's laptop",
+ "mac": "010203040508",
+ "icon_id": "boy2",
+ "profile": {
+ "url_filter": {
+ "level": "PG_13"
+ }
+ }
+ },
+ {
+ "id": 4,
+ "name": "Jane's laptop",
+ "mac": "010203040509",
+ "icon_id": "girl1",
+ "profile": {
+ "url_filter": {
+ "level": "PG"
+ }
+ }
+ }
+ ]
+}
diff --git a/applications/subscriberPortal/package.json b/applications/subscriberPortal/package.json
new file mode 100644
index 0000000..94254b8
--- /dev/null
+++ b/applications/subscriberPortal/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "subscriber-portal",
+ "version": "1.0.0",
+ "description": "Demo implementation for a subscriber portal in XOS",
+ "main": "index.js",
+ "scripts": {
+ "test": "karma start",
+ "prestart": "npm install && bower install",
+ "start": "browser-sync start --config bs-config.js"
+ },
+ "author": "Matteo Scandolo",
+ "license": "ISC",
+ "devDependencies": {
+ "browser-sync": "^2.11.1",
+ "http-proxy": "^1.12.1"
+ }
+}
diff --git a/applications/subscriberPortal/src/app/data/pc_cats.json b/applications/subscriberPortal/src/app/data/pc_cats.json
new file mode 100644
index 0000000..299fc13
--- /dev/null
+++ b/applications/subscriberPortal/src/app/data/pc_cats.json
@@ -0,0 +1,135 @@
+{
+ "_comment_": "Parental Control Categories - data file",
+
+ "level_order": [
+ "NONE", "G", "PG", "PG_13", "R", "ALL"
+ ],
+
+ "category_order": [
+ "Safe", "Search", "Shopping", "Sports", "Privacy", "Dating", "Games",
+ "Social", "Illegal", "Weapons", "Drugs", "Gambling", "Cyberbully",
+ "Pornography", "Adult", "Anonymizers", "Suicide", "Malware"
+ ],
+
+ "descriptions": {
+ "Safe": [
+ "."
+ ],
+ "Search": [
+ "Sites which provide the ability to perform searches for specific ",
+ "topics or websites across the entire Internet, and which display ",
+ "results in a multi-page format that allows material to be sorted ",
+ "based on content, topic, or file type."
+ ],
+ "Shopping": [
+ "."
+ ],
+ "Sports": [
+ "Sites which analyze, promote, or providing information about ",
+ "competitive sports and its fans whether official or unofficial."
+ ],
+ "Privacy": [
+ "Sites which provide hosted online advertising intended to attract ",
+ "web traffic, deliver marketing messages or capture email addresses."
+ ],
+ "Dating": [
+ "Sites which promote or provide the opportunity for establishing ",
+ "romantic relationship."
+ ],
+ "Games": [
+ "Sites which related to the development, promotion, review, and ",
+ "enjoyment of online, PC, and console videogaming."
+ ],
+ "Social": [
+ "Sites which facilitate online socializing and the development or ",
+ "maintenance of personal and professional relationships across ",
+ "geographical and organizational boundaries."
+ ],
+ "Illegal": [
+ "Sites which promote or provide the means to practice illegal or ",
+ "unauthorized acts using computer-programming skills. And sites ",
+ "which offer custom academic writing services for free or for ",
+ "purchase. These sites are geared toward students who do not want ",
+ "to write their own papers, but will download or buy previously ",
+ "written or custom written papers."
+ ],
+ "Weapons": [
+ "Sites which sell, manufacture, or describe the manufacture of weapons."
+ ],
+ "Drugs": [
+ "Sites which promote, offer, sell, supply, encourage or otherwise ",
+ "advocate the recreational or illegal use, cultivation, manufacture, ",
+ "or distribution of drugs, pharmaceuticals, intoxicating plants or ",
+ "chemicals and their related paraphernalia. And sites which glamorize, ",
+ "glorify, tout or otherwise encourage the consumption of alcohol. And ",
+ "sites which sell, glamorize, enable or encourage the use of tobacco ",
+ "and tobacco-related products."
+ ],
+ "Gambling": [
+ "."
+ ],
+ "Cyberbully": [
+ "Sites or pages where people post targeted, deliberate and slanderous ",
+ "or offensive content about other people with the INTENT to torment, ",
+ "threaten, humiliate or defame them. Content is often sexual, ",
+ "malicious or hostile in nature and is submitted via interactive ",
+ "digital technology. And sites which advocate hostility, aggression ",
+ "and the denigration of an individual or group on the basis of race, ",
+ "religion, gender, nationality, ethnic origin, or other involuntary ",
+ "characteristics. Sites that use purported scientific or commonly ",
+ "accredited methods to justify inequality, aggression, and hostility."
+ ],
+ "Pornography": [
+ "Sites which contain explicit material for the purpose of causing ",
+ "sexual excitement or arousing lascivious interest."
+ ],
+ "Adult": [
+ "Sites which contain sexually explicit information that is not ",
+ "medical or scientific nature and yet are also not pornographic. ",
+ "And sites which feature social or family nudism/naturism, nudist ",
+ "camps/resorts, or „nudist-only‟ travel."
+ ],
+ "Anonymizers": [
+ "Sites which provide anonymous access to websites through a PHP or ",
+ "CGI proxy, allowing users to gain access to websites blocked by ",
+ "corporate and school proxies as well as parental control filtering ",
+ "solutions."
+ ],
+ "Suicide": [
+ "Sites which advocate, normalize, or glamourize repetitive and ",
+ "deliberate ways to inflict non-fatal harm to oneself. And sites ",
+ "advocating or glorifying suicide as well as educating people on how ",
+ "to commit suicide."
+ ],
+ "Malware": [
+ "Sites where the domain was found to either contain malware or take ",
+ "advantage of other exploits to deliver adware, spyware or malware. ",
+ "And Sites that contain direct links to malware file downloads: ",
+ ".exe, .dll, .ocx, and others. These URLs are generally highly malicious."
+ ]
+ },
+
+ "_prohibited_comment_": [
+ "Note: Level NONE allows nothing (prohibits everything)",
+ " level ALL allows everything (prohibits nothing)",
+ " Levels G, PG, PG_13, R prohibitions listed below:"
+ ],
+
+ "prohibited": {
+ "G": [
+ "Games", "Social", "Illegal", "Weapons", "Drugs", "Gambling",
+ "Cyberbully", "Pornography", "Adult", "Anonymizers", "Suicide", "Malware"
+ ],
+ "PG": [
+ "Social", "Illegal", "Weapons", "Drugs", "Gambling",
+ "Cyberbully", "Pornography", "Adult", "Anonymizers", "Suicide", "Malware"
+ ],
+ "PG_13": [
+ "Illegal", "Weapons", "Drugs", "Gambling",
+ "Cyberbully", "Pornography", "Adult", "Anonymizers", "Suicide", "Malware"
+ ],
+ "R": [
+ "Pornography", "Adult", "Anonymizers", "Suicide", "Malware"
+ ]
+ }
+}
diff --git a/applications/subscriberPortal/src/app/fw/foot/foot.css b/applications/subscriberPortal/src/app/fw/foot/foot.css
new file mode 100644
index 0000000..b8746d6
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/foot/foot.css
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+div.foot {
+ width: 100%;
+ height: 30px;
+ background-color: white;
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ margin-left: auto;
+ margin-right: auto;
+ z-index: 100;
+ box-shadow: 0 10px 5px 10px gray;
+}
+
+.foot div {
+ position: absolute;
+ top: 50%;
+ transform: translate(0, -50%);
+ font-style: italic;
+ font-size: 12px;
+ color: #3C3C3C;
+}
+
+.foot div.left {
+ left: 25px;
+}
+
+.foot div.right {
+ right: 25px;
+}
diff --git a/applications/subscriberPortal/src/app/fw/foot/foot.html b/applications/subscriberPortal/src/app/fw/foot/foot.html
new file mode 100644
index 0000000..ac21269
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/foot/foot.html
@@ -0,0 +1,10 @@
+<!--Foot partial html-->
+<div class="foot">
+ <div class="left">
+
+ </div>
+
+ <div class="right">
+ © ONOS Project. All rights reserved.
+ </div>
+</div>
diff --git a/applications/subscriberPortal/src/app/fw/foot/foot.js b/applications/subscriberPortal/src/app/fw/foot/foot.js
new file mode 100644
index 0000000..fdaabb8
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/foot/foot.js
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+angular.module('cordFoot', [])
+ .directive('foot', function () {
+ return {
+ restrict: 'E',
+ templateUrl: 'app/fw/foot/foot.html'
+ };
+ });
diff --git a/applications/subscriberPortal/src/app/fw/icon/icon.js b/applications/subscriberPortal/src/app/fw/icon/icon.js
new file mode 100644
index 0000000..b0d48fa
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/icon/icon.js
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ 'use strict';
+
+ angular.module('cordGui')
+
+ .directive('icon', [function () {
+ return {
+ restrict: 'E',
+ compile: function (element, attrs) {
+ var html =
+ '<svg class="embedded-icon" width="' + attrs.size + '" ' +
+ 'height="' + attrs.size + '" viewBox="0 0 50 50">' +
+ '<g class="icon">' +
+ '<circle cx="25" cy="25" r="25"></circle>' +
+ '<use width="50" height="50" class="glyph '
+ + attrs.id + '" xlink:href="#' + attrs.id +
+ '"></use>' +
+ '</g>' +
+ '</svg>';
+ element.replaceWith(html);
+ }
+ };
+ }]);
+}());
diff --git a/applications/subscriberPortal/src/app/fw/mast/mast.css b/applications/subscriberPortal/src/app/fw/mast/mast.css
new file mode 100644
index 0000000..b79d89e
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/mast/mast.css
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+div.mast {
+ width: 100%;
+ height: 85px;
+ background-color: white;
+ position: relative;
+ box-shadow: 0 10px 5px -7px gray;
+ z-index: 100;
+}
+
+.mast div {
+ position: absolute;
+ top: 50%;
+ transform: translate(0, -50%);
+}
+
+.mast div.left {
+ left: 25px;
+}
+
+.mast div.right {
+ right: 7%;
+ width: 37%;
+}
+
+.mast img {
+ width: 220px;
+}
+
+.mast a,
+.mast a:visited {
+ text-decoration: none;
+ color: #3C3C3C;
+}
+
+.mast li.logout {
+ list-style-type: none;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translate(0, -50%);
+ font-size: 90%;
+}
+.mast li.logout:hover {
+ font-weight: bold;
+ list-style-type: none;
+ cursor: pointer;
+}
diff --git a/applications/subscriberPortal/src/app/fw/mast/mast.html b/applications/subscriberPortal/src/app/fw/mast/mast.html
new file mode 100644
index 0000000..2ff7f94
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/mast/mast.html
@@ -0,0 +1,14 @@
+<!--Mast HTML-->
+
+<div class="mast" ng-controller="CordMastCtrl">
+ <div class="left">
+ <img src="/imgs/logo.png">
+ </div>
+
+ <div class="right">
+ <nav ng-show="page.curr !== 'login'"></nav>
+ <li class="logout"
+ ng-show="page.curr !== 'login'"
+ ng-click="logout()">LOGOUT</li>
+ </div>
+</div>
diff --git a/applications/subscriberPortal/src/app/fw/mast/mast.js b/applications/subscriberPortal/src/app/fw/mast/mast.js
new file mode 100644
index 0000000..9b27628
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/mast/mast.js
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ 'use strict';
+
+ var urlSuffix = '/rs/logout';
+
+ angular.module('cordMast', [])
+ .controller('CordMastCtrl', function ($log, $scope, $location, User) {
+ $scope.logout = function () {
+ User.logout()
+ .then(function(){
+ $location.path('/login');
+ });
+ };
+ })
+ .directive('mast', function () {
+ return {
+ restrict: 'E',
+ templateUrl: 'app/fw/mast/mast.html'
+ };
+ });
+}());
diff --git a/applications/subscriberPortal/src/app/fw/nav/nav.css b/applications/subscriberPortal/src/app/fw/nav/nav.css
new file mode 100644
index 0000000..464f95b
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/nav/nav.css
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+.nav ul {
+ display: table;
+ table-layout: fixed;
+ list-style-type: none;
+ width: 80%;
+}
+
+.nav li {
+ padding: 2.5% 0;
+ color: #3C3C3C;
+}
+.nav li:hover {
+ border-bottom: 2px solid #CE5650;
+ color: black;
+}
+.nav li.selected {
+ font-weight: bolder;
+ color: #3C3C3C;
+ letter-spacing: 0.03em;
+ border-bottom: 2px solid #CE5650;
+}
+
+.nav a,
+.nav a:visited {
+ display: table-cell;
+ text-align: center;
+ text-decoration: none;
+ color: black;
+}
diff --git a/applications/subscriberPortal/src/app/fw/nav/nav.html b/applications/subscriberPortal/src/app/fw/nav/nav.html
new file mode 100644
index 0000000..d87f961
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/nav/nav.html
@@ -0,0 +1,17 @@
+<!--Nav HTML-->
+<div class="nav">
+ <ul>
+ <a href="#/home">
+ <li ng-class="{selected: page.curr === 'dashboard'}"
+ ng-click="$route.reload()">Home</li>
+ </a>
+ <a href="#/user">
+ <li ng-class="{selected: page.curr === 'user'}"
+ ng-click="$route.reload()">Users</li>
+ </a>
+ <a href="#/bundle">
+ <li ng-class="{selected: page.curr === 'bundle'}"
+ ng-click="$route.reload()">Bundles</li>
+ </a>
+ </ul>
+</div>
diff --git a/applications/subscriberPortal/src/app/fw/nav/nav.js b/applications/subscriberPortal/src/app/fw/nav/nav.js
new file mode 100644
index 0000000..9ba3e37
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/nav/nav.js
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+angular.module('cordNav', [])
+ .directive('nav', function () {
+ return {
+ restrict: 'E',
+ templateUrl: 'app/fw/nav/nav.html'
+ };
+ });
diff --git a/applications/subscriberPortal/src/app/fw/services/helpers.js b/applications/subscriberPortal/src/app/fw/services/helpers.js
new file mode 100644
index 0000000..6f6c4a6
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/services/helpers.js
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ "use strict";
+
+ angular.module('cordGui')
+ .service('Helpers', function(){
+ this.randomDate = function(start, end) {
+ return new Date(
+ start.getTime() + Math.random() * (end.getTime() - start.getTime())
+ );
+ }
+ });
+
+}());
\ No newline at end of file
diff --git a/applications/subscriberPortal/src/app/fw/services/rest.js b/applications/subscriberPortal/src/app/fw/services/rest.js
new file mode 100644
index 0000000..e97f091
--- /dev/null
+++ b/applications/subscriberPortal/src/app/fw/services/rest.js
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ "use strict";
+
+ angular.module('cordRest', [])
+ .factory('SetCSRFToken', function setCSRFToken($cookies) {
+ return {
+ request: function(request){
+ request.headers['X-CSRFToken'] = $cookies.get('xoscsrftoken');
+ request.headers['sessionId'] = $cookies.get('sessionid');
+ return request;
+ }
+ };
+ })
+ .service('User', function($http, $q, $cookies, cordConfig){
+ this.login = function(username, password){
+ var deferred = $q.defer();
+ var user;
+
+ // logging in the user
+ $http.post(cordConfig.url + '/xoslib/login/', {username: username, password: password})
+ .then(function(res){
+ $cookies.put('user', res.data.user);
+ $cookies.put('sessionid', res.data.xossessionid);
+ user = JSON.parse(res.data.user);
+ return $http.get(cordConfig.url + '/xos/tenantrootprivileges?user=' + user.id);
+ })
+ .then(function(subscribers){
+ // subscribers are an array because the way Django perform query
+ // but one user is related to only one subscriber
+
+ $cookies.put('subscriberId', subscribers.data[0].id);
+ deferred.resolve(user);
+ })
+ .catch(function(e){
+ deferred.reject(e);
+ throw new Error(e);
+ });
+
+ return deferred.promise;
+ };
+
+ this.isLoggedIn = function(){
+ var user = $cookies.get('user');
+ if( angular.isDefined(user)){
+ return true;
+ }
+ return false;
+ };
+
+ this.logout = function(){
+ var deferred = $q.defer();
+ var sessionId = $cookies.get('sessionid');
+ $http.post(cordConfig.url + '/xoslib/logout/', {xossessionid: sessionId})
+ .then(function(res){
+ $cookies.remove('user');
+ deferred.resolve();
+ })
+ .catch(function(e){
+ throw new Error(e);
+ });
+
+ return deferred.promise;
+ };
+ })
+ .service('Subscribers', function($resource, cordConfig){
+ return $resource(cordConfig.url + '/xoslib/rs/subscriber');
+ })
+ .service('SubscriberUsers', function($resource, $filter, cordConfig, Helpers){
+ return $resource(cordConfig.url + '/xoslib/rs/subscriber/:subscriberId/users/:id', {}, {
+ query: {
+ method: 'GET',
+ isArray: true,
+ interceptor: {
+ response: function(res){
+ // this is used to fake some data that are not XOS related,
+ // but can be provided by any external services
+
+ // add an icon to the user
+ res.data.map(function(user){
+ switch (user.name){
+ case 'Mom\'s PC':
+ user['icon_id'] = 'mom';
+ break
+ case 'Jack\'s Laptop':
+ user['icon_id'] = 'boy2';
+ break
+ case 'Jill\'s Laptop':
+ user['icon_id'] = 'girl1';
+ break
+ case 'Dad\'s PC':
+ user['icon_id'] = 'dad';
+ break
+ }
+
+ return user;
+ });
+
+ // add a random login date to the user
+ res.data.forEach(function(user){
+ if(!angular.isDefined(cordConfig.userActivity[user.id])){
+ var date = Helpers.randomDate(new Date(2015, 0, 1), new Date());
+ cordConfig.userActivity[user.id] = $filter('date')(date, 'mediumTime');
+ }
+ });
+ return res.data;
+ }
+ }
+ }
+ });
+ })
+ .service('SubscriberUsersUrlFilterLevel', function($q, $http, cordConfig){
+ this.updateUrlFilterLevel = function(subscriberId, userId, level){
+ var deferred = $q.defer();
+
+ $http.put(cordConfig.url + '/xoslib/rs/subscriber/' + subscriberId + '/users/' + userId + '/url_filter/' + level)
+ .then(function(res){
+ deferred.resolve(res);
+ })
+ .catch(function(e){
+ throw new Error(e);
+ });
+
+ return deferred.promise;
+ };
+ });
+}());
\ No newline at end of file
diff --git a/applications/subscriberPortal/src/app/view/bundle/available.html b/applications/subscriberPortal/src/app/view/bundle/available.html
new file mode 100644
index 0000000..6f300d4
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/bundle/available.html
@@ -0,0 +1,5 @@
+<div ng-cloak class="ng-hide ng-cloak" ng-show="show" id="available">
+ <h3>{{available.name}}</h3>
+ <p>{{available.desc}}</p>
+ <button ng-click="changeBundle(available.id)">Apply</button>
+</div>
diff --git a/applications/subscriberPortal/src/app/view/bundle/bundle.css b/applications/subscriberPortal/src/app/view/bundle/bundle.css
new file mode 100644
index 0000000..84fa842
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/bundle/bundle.css
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+div#bundle div.main-left {
+ width: 61%;
+ padding: 4% 0 0 1%;
+}
+div#bundle div.main-right {
+ width: 37%;
+ padding-top: 4%;
+}
+
+#bundle table {
+ width: 95%;
+ margin-top: 5%;
+ margin-left: 2%;
+ border-radius: 3px;
+}
+
+#bundle td {
+ font-size: 90%;
+}
+#bundle td.icon {
+ text-align: center;
+ width: 50px;
+ height: 50px;
+ padding: 4%;
+}
+#bundle td.name {
+ border-left: solid 1px rgba(136, 0, 0, 0.25);
+ padding-left: 3%;
+}
+#bundle td.desc {
+ width: 60%;
+ text-align: left;
+ font-style: italic;
+}
+/* animation specific */
+#bundle tr.fadein.ng-leave td.name,
+#bundle tr.fadein.ng-leave-active td.name {
+ opacity: 0;
+ border: none;
+}
+
+#bundle img {
+ width: 100%;
+}
+
+#bundle h2 {
+ text-align: center;
+ padding: 3%;
+ font-weight: lighter;
+ border: 1px solid #3C3C3C;
+ cursor: pointer;
+}
+#bundle h2:hover {
+ color: #CE5650;
+ border-color: #CE5650;
+}
+
+div#bundles {
+ position: relative;
+}
+
+div#available.ng-hide-add.ng-hide-add-active,
+div#available.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transition: all linear 0.5s;
+ transition: all linear 0.5s;
+}
+div#available.ng-hide {
+ opacity: 0;
+ top: -80px;
+}
+
+div#available {
+ position: absolute;
+ padding: 5%;
+ opacity: 1;
+ top: -10px;
+ width: 100%;
+}
+
+#available p {
+ text-indent: initial;
+ text-align: initial;
+}
+
+#available button {
+ float: right;
+ width: 33%;
+ margin-top: 5%;
+}
diff --git a/applications/subscriberPortal/src/app/view/bundle/bundle.html b/applications/subscriberPortal/src/app/view/bundle/bundle.html
new file mode 100644
index 0000000..8852d86
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/bundle/bundle.html
@@ -0,0 +1,24 @@
+<!-- Bundle page partial html -->
+<div id="bundle" class="container">
+ <div class="main-left">
+ <h4>You are subscribed to the</h4>
+ <h3>{{name}}</h3>
+ <p>{{desc}}</p>
+ <table>
+ <tr ng-repeat="func in funcs" class="fadein">
+ <td class="icon">
+ <img ng-src="{{'/imgs/' + func.id + '.png'}}">
+ </td>
+ <td class="name">{{func.name}}</td>
+ <td class="desc">{{func.desc}}</td>
+ </tr>
+ </table>
+ </div>
+ <div class="main-right">
+ <img src="imgs/bundle.jpg">
+ <div ng-click="showBundles()">
+ <h2>Available Bundles</h2>
+ </div>
+ <div id="bundles" bundle-available></div>
+ </div>
+</div>
\ No newline at end of file
diff --git a/applications/subscriberPortal/src/app/view/bundle/bundle.js b/applications/subscriberPortal/src/app/view/bundle/bundle.js
new file mode 100644
index 0000000..310118b
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/bundle/bundle.js
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ 'use strict';
+
+ var urlSuffix = '/rs/bundle';
+
+ var basic = 'basic',
+ family = 'family';
+
+ angular.module('cordBundle', [])
+ .controller('CordBundleCtrl', function ($log, $scope, $resource, cordConfig) {
+ var BundleData, resource,
+ getData;
+ $scope.page.curr = 'bundle';
+ $scope.show = false;
+
+ // set the current bundle
+ $scope.name = cordConfig.bundles[cordConfig.activeBundle].name;
+ $scope.desc = cordConfig.bundles[cordConfig.activeBundle].desc;
+ $scope.funcs = cordConfig.bundles[cordConfig.activeBundle].functions;
+
+ // set the available bundle
+ if(cordConfig.activeBundle === 0) {
+ $scope.available = cordConfig.bundles[1];
+ }
+ else{
+ $scope.available = cordConfig.bundles[0];
+ }
+
+ // switching the bundles
+ $scope.changeBundle = function (id) {
+ if(cordConfig.activeBundle === 0){
+ cordConfig.activeBundle = 1;
+ $scope.available = cordConfig.bundles[0];
+ }
+ else{
+ cordConfig.activeBundle = 0;
+ $scope.available = cordConfig.bundles[1];
+ }
+ $scope.name = cordConfig.bundles[cordConfig.activeBundle].name;
+ $scope.desc = cordConfig.bundles[cordConfig.activeBundle].desc;
+ $scope.funcs = cordConfig.bundles[cordConfig.activeBundle].functions;
+ };
+
+ // hiding and showing bundles
+ $scope.showBundles = function () {
+ $scope.show = !$scope.show;
+ };
+
+ $log.debug('Cord Bundle Ctrl has been created.');
+ })
+ .directive('bundleAvailable', function () {
+ return {
+ templateUrl: 'app/view/bundle/available.html'
+ };
+ });
+}());
diff --git a/applications/subscriberPortal/src/app/view/common/common.css b/applications/subscriberPortal/src/app/view/common/common.css
new file mode 100644
index 0000000..800fe24
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/common/common.css
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+[ng\:cloak], [ng-cloak], .ng-cloak {
+ display: none !important;
+}
+
+html, body, div#frame, div#view {
+ height: 100%;
+ overflow: scroll;
+}
+
+head, body, footer,
+h1, h2, h3, h4, h5, h6, p,
+a, ul, li, div,
+table, tr, td, th, thead, tbody,
+form, select, input, option, label {
+ padding: 0;
+ margin: 0;
+}
+
+h1, h2, h3, h4, h5, h6,
+p, a, li, th, td,
+select, input, option, label, div {
+ font-family: sans-serif, "Droid Sans", "Lucida Grande", Arial, Helvetica;
+ color: #3C3C3C;
+}
+
+body {
+ background-color: white;
+ overflow: hidden;
+}
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+th, td {
+ color: rgba(0, 0, 0, 0.8);
+}
+h3 {
+ margin-bottom: 4%;
+ font-size: xx-large;
+ font-weight: lighter;
+}
+h4 {
+ font-size: large;
+ font-weight: lighter;
+}
+h5 {
+ color: rgb(107, 107, 107);
+ font-style: italic;
+ font-weight: normal;
+ font-size: 90%;
+ margin-bottom: 1%;
+}
+p {
+ font-size: 100%;
+ color: rgba(0,0,0, 0.8);
+ text-indent: 20px;
+ text-align: justify;
+ padding-right: 5%;
+}
+th {
+ background-color: #7AB6EA;
+ color: white;
+ letter-spacing: 0.05em;
+ font-weight: lighter;
+}
+
+button,
+input[type="button"],
+input[type="reset"] {
+ height: 30px;
+ box-shadow: none;
+ border: none;
+ outline: none;
+ cursor: pointer;
+ letter-spacing: 0.02em;
+ font-size: 14px;
+ background-color: lightgray;
+ transition: background-color 0.4s;
+}
+button:hover,
+input[type="button"]:hover,
+input[type="reset"]:hover {
+ color: white;
+ background-color: rgb(122, 188, 229);
+}
+
+button[disabled],
+input[type="button"][disabled],
+input[type="reset"][disabled] {
+ background-color: lightgray;
+ color: graytext;
+}
+
+
+button[disabled]:hover,
+input[type="button"][disabled]:hover,
+input[type="reset"][disabled]:hover {
+ cursor: default;
+}
+
+div.container {
+ width: 85%;
+ margin: 0 auto;
+ min-height: 100%;
+}
+div.main-left, div.main-right {
+ float: left;
+}
+div.main-left {
+ width: 37%;
+ padding-left: 1%;
+}
+div.main-right {
+ width: 61%;
+}
+
+svg#icon-defs {
+ display: none;
+}
+
+g.icon circle {
+ fill: none;
+}
+g.icon use.glyph.checkMark {
+ fill: rgb(68, 189, 83)
+}
+g.icon use.glyph.xMark {
+ fill: #CE5650;
+}
+
+th.user-pic {
+ background-color: white;
+}
+th.user-pic,
+td.user-pic {
+ width: 30px;
+ padding-left: 4%;
+}
+td.user-pic img {
+ width: 25px;
+}
+
+/* animation */
+.fadein {
+ transition: all linear 0.5s;
+}
+.fadein.ng-enter-stagger,
+.fadein.ng-leave-stagger {
+ transition-delay: 0.2s;
+ animation-delay: 0.2s;
+}
+.fadein.ng-enter {
+ opacity: 0;
+}
+.fadein.ng-enter.ng-enter-active {
+ opacity: 1;
+}
+.fadein.ng-leave,
+.fadein.ng-leave-active {
+ opacity: 0;
+}
diff --git a/applications/subscriberPortal/src/app/view/home/home.css b/applications/subscriberPortal/src/app/view/home/home.css
new file mode 100644
index 0000000..58f07a5
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/home/home.css
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+#home div.main-left {
+ width: 55%;
+ padding: 0;
+}
+#home div.main-right {
+ padding: 1% 0 0 3%;
+ width: 42%;
+}
+#home div.move-down {
+ margin-top: 5%;
+}
+
+#home div.image-holder {
+ width: 100%;
+ position: relative;
+}
+
+#home div.main-left img {
+ width: 100%;
+}
+
+#home div.main-right div.bundle-title {
+ padding: 2% 0;
+}
+
+#home h4 {
+ padding-bottom: 2%;
+}
+
+#home p {
+ margin-bottom: 3%;
+}
+
+#home table {
+ width: 94%;
+ table-layout: fixed;
+ margin-left: 6%;
+ border-left: 1px solid #CE5650;
+}
+
+#home table.users th,
+#home table.users td {
+ font-size: 90%;
+}
+
+#home td, #home th {
+ text-align: left;
+ padding: 2%;
+}
diff --git a/applications/subscriberPortal/src/app/view/home/home.html b/applications/subscriberPortal/src/app/view/home/home.html
new file mode 100644
index 0000000..a3d7fb2
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/home/home.html
@@ -0,0 +1,42 @@
+<!-- Home page partial html -->
+<div id="home" class="container">
+ <div class="main-left">
+ <img src="/imgs/home.jpg">
+ </div>
+
+ <div class="main-right">
+ <div class="move-down">
+ <div class="bundle-title">
+ <h4>Welcome Dad!</h4>
+ <h5>You are subscribed to the</h5>
+ <h3>{{bundle_name}}</h3>
+ </div>
+
+ <p>{{bundle_desc}}</p>
+
+
+ <h4>Users</h4>
+ <table class="users">
+ <thead>
+ <tr>
+ <th class="user-pic"></th>
+ <th>Name</th>
+ <th>Last Login</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ <!--<pre>{{users | json}}</pre>-->
+
+ <tr ng-repeat="user in users" class="fadein">
+ <td class="user-pic">
+ <img ng-src="{{'/imgs/' + user.icon_id + '.jpg'}}">
+ </td>
+ <td>{{user.name}}</td>
+ <td>{{shared.userActivity[user.id]}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
\ No newline at end of file
diff --git a/applications/subscriberPortal/src/app/view/home/home.js b/applications/subscriberPortal/src/app/view/home/home.js
new file mode 100644
index 0000000..c7de985
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/home/home.js
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ 'use strict';
+
+ angular.module('cordHome', [])
+ .controller('CordHomeCtrl', function ($log, $scope, $cookies, cordConfig, SubscriberUsers) {
+
+ $scope.page.curr = 'dashboard';
+
+ SubscriberUsers.query({subscriberId: $cookies.get('subscriberId')}).$promise
+ .then(function(res){
+ $scope.bundle_name = cordConfig.bundles[cordConfig.activeBundle].name;
+ $scope.bundle_desc = cordConfig.bundles[cordConfig.activeBundle].desc;
+ $scope.users = res;
+ })
+ .catch(function(){
+ $log.error('Problem with resource', SubscriberUsers);
+ });
+
+ $log.debug('Cord Home Ctrl has been created.');
+ });
+}());
diff --git a/applications/subscriberPortal/src/app/view/login/login.css b/applications/subscriberPortal/src/app/view/login/login.css
new file mode 100644
index 0000000..b4275c5
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/login/login.css
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+div#login {
+ background: url("/imgs/login.jpg") no-repeat center;
+ background-size: contain;
+ position: absolute;
+ top: 3%;
+ left: 5%;
+}
+
+div#login-wrapper {
+ text-align: center;
+}
+
+#login h2 {
+ margin: 1%;
+ color: rgb(115, 115, 115);
+ font-size: xx-large;
+ font-weight: lighter;
+ text-align: left;
+ position: absolute;
+ top: -140px;
+}
+
+div#login-form {
+ display: inline-block;
+}
+
+#login div.outline {
+ position: absolute;
+ border: 1px solid rgba(115, 115, 115, 0.7);
+ background-color: white;
+ opacity: .6;
+ top: -160px;
+ left: -25px;
+ width: 300px;
+ height: 245px;
+ border-radius: 1px;
+}
+
+div#login-form {
+ margin-left: 2.5%;
+ position: relative;
+ width: 255px;
+ margin-top: 33.5%;
+}
+
+#login-form form {
+ line-height: 250%;
+}
+
+#login-form input {
+ display: block;
+ height: 40px;
+ width: 230px;
+ font-size: 19px;
+ padding: 0 5px;
+ margin-bottom: 3.5%;
+ border-radius: 1px;
+ position: absolute;
+}
+
+#login-form .login-error{
+ background: red;
+ border: 2px solid darkred;
+ color: white;
+ position: absolute;
+ height: 40px;
+ width: 230px;
+ padding: 0 5px;
+ border-radius: 1px;
+ top: 70px;
+ font-size: 10px;
+}
+
+#login-form input[type="text"] {
+ top: -90px;
+}
+#login-form input[type="password"] {
+ top: -35px;
+}
+
+#login-form input[type="text"],
+#login-form input[type="password"] {
+ border: 2px solid rgba(115, 115, 115, 0.7);
+ transition: border 0.1s;
+}
+#login-form input[type="text"]:focus,
+#login-form input[type="password"]:focus,
+#login-form input[type="button"]:focus {
+ outline: none;
+ border: solid 2px rgba(122, 188, 229, 0.5);
+}
+
+#login-form a {
+ text-decoration: none;
+}
+
+#login-form input[type="button"] {
+ top: 25px;
+ width: 245px;
+ height: 30px;
+ cursor: pointer;
+ letter-spacing: 0.02em;
+ font-size: 100%;
+ color: #3C3C3C;
+ background-color: lightgray;
+ transition: background-color 0.4s;
+}
+
+#login-form input[type="button"]:hover {
+ color: white;
+ background-color: rgb(122, 188, 229);
+}
+
+#login-form input.ng-invalid.ng-touched {
+ background-color: #CE5650;
+ color: white;
+}
diff --git a/applications/subscriberPortal/src/app/view/login/login.html b/applications/subscriberPortal/src/app/view/login/login.html
new file mode 100644
index 0000000..6359cce
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/login/login.html
@@ -0,0 +1,18 @@
+<!-- Login page partial html -->
+<div id="login" class="container">
+ <div id="login-wrapper">
+ <div id="login-form">
+ <div class="outline"></div>
+ <h2>Subscriber Portal</h2>
+ <form ng-submit="login()">
+ <input ng-model="email" type="text" placeholder="email" required>
+ <input ng-model="password" type="password" placeholder="password" required>
+ <input ng-click="login()" type="button" value="Log In">
+ <div class="login-error" ng-show="error">
+ Sorry, your login failed.
+ Please try again.
+ </div>
+ </form>
+ </div>
+ </div>
+</div>
\ No newline at end of file
diff --git a/applications/subscriberPortal/src/app/view/login/login.js b/applications/subscriberPortal/src/app/view/login/login.js
new file mode 100644
index 0000000..77ef724
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/login/login.js
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ 'use strict';
+
+ angular.module('cordLogin', [])
+ .controller('CordLoginCtrl', function ($log, $scope, $resource, $location, $window, User) {
+
+ $scope.page.curr = 'login';
+
+ $scope.login = function () {
+ if ($scope.email && $scope.password) {
+ //getResource($scope.email);
+
+ User.login($scope.email, $scope.password)
+ .then(function(user){
+ $location.url('/home');
+ })
+ .catch(function(e){
+ $scope.error = true;
+ });
+
+ $scope.shared.login = $scope.email;
+ }
+ };
+
+ $log.debug('Cord Login Ctrl has been created.');
+ });
+}());
diff --git a/applications/subscriberPortal/src/app/view/user/ratingPanel.html b/applications/subscriberPortal/src/app/view/user/ratingPanel.html
new file mode 100644
index 0000000..04ee430
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/user/ratingPanel.html
@@ -0,0 +1,22 @@
+<!--Partial HTML for rating panel directive-->
+<div id="rating-panel">
+ <div ng-cloak class="ng-hide ng-cloak panel" ng-show="ratingsShown">
+ <table>
+ <tr>
+ <th class="title">Category</th>
+ <th ng-repeat="rating in level_order">{{rating}}</th>
+ </tr>
+ <tr ng-repeat="cat in category_order">
+ <td class="title">{{cat}}</td>
+ <td ng-repeat="r in level_order">
+ <div ng-if="prohibitedSites[r][cat]">
+ <icon size="15" id="xMark"></icon>
+ </div>
+ <div ng-if="!prohibitedSites[r][cat]">
+ <icon size="15" id="checkMark"></icon>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+</div>
\ No newline at end of file
diff --git a/applications/subscriberPortal/src/app/view/user/user.css b/applications/subscriberPortal/src/app/view/user/user.css
new file mode 100644
index 0000000..a3f64d5
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/user/user.css
@@ -0,0 +1,219 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+#user div {
+ padding-top: 2%;
+}
+
+#user .icon-saved{
+ background-image: url('../../../imgs/icon-saved.gif');
+ display: inline-block;
+ width: 15px;
+ height: 15px;
+ background-size: cover;
+}
+
+/* when hiding the picture */
+#user .icon-saved.ng-hide-add { animation:0.5s lightSpeedOut ease; }
+
+/* when showing the picture */
+#user .icon-saved.ng-hide-remove { animation:0.5s lightSpeedIn ease; }
+
+/* light speed out */
+@keyframes lightSpeedOut {
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0;
+ }
+}
+
+@keyframes lightSpeedIn {
+
+ 0% {
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+#user div.main-left {
+ width: 98%;
+ padding-left: 1%;
+}
+#user div.main-left.family {
+ width: 62%;
+ padding-left: 1%;
+}
+
+#user div.main-right {
+ width: 0;
+}
+#user div.main-right.family {
+ width: 37%;
+}
+
+#user table.user-info,
+#user table.user-form {
+ float: left;
+ width: 100%;
+}
+
+#user table.user-info th,
+#user table.user-form th {
+ text-align: left;
+ padding: 2% 1%;
+}
+
+#user span.help:hover {
+ cursor: pointer;
+ color: #CE5650;
+}
+
+#user div.main-left.family table.user-info th,
+#user div.main-right.family table.user-form th {
+ padding: 17px;
+}
+
+#user div.main-left.family table.user-info td,
+#user div.main-right.family table.user-form td {
+ padding: 10px;
+ height: 23px;
+}
+#user table.user-info td {
+ padding: 1%;
+}
+
+#user table.user-form td {
+ border-left: 1px solid #CE5650;
+}
+
+#user table.user-form td.buttons {
+ text-align: right;
+ border: none;
+}
+
+#user table.user-form tr.options td {
+ padding-left: 5%;
+}
+
+#user select,
+#user select:focus {
+ border: none;
+}
+
+#user select {
+ font-size: 95%;
+}
+
+#user option,
+#user option:focus {
+ border: none;
+}
+
+#user option[selected] {
+ background-color: rgb(122, 188, 229);
+}
+
+#user label {
+ font-weight: bold;
+ display: block;
+ text-align: center;
+ padding: 5%;
+}
+
+#user input[type="button"],
+#user input[type="reset"] {
+ width: 30%;
+}
+
+#user td.buttons div {
+ display: inline;
+}
+#user td.buttons svg {
+ vertical-align: middle;
+}
+
+#rating-panel th,
+#rating-panel td {
+ text-align: center;
+ padding: 1%;
+ font-weight: lighter;
+}
+
+#rating-panel th.title,
+#rating-panel td.title {
+ width: 125px;
+ text-align: left;
+}
+
+#rating-panel th {
+ background-color: white;
+ padding-top: 3%;
+ border-bottom: 1px solid #CE5650;
+ color: #3C3C3C;
+ font-weight: normal;
+}
+
+#rating-panel tr th:first-child,
+#rating-panel tr td:first-child {
+ padding-left: 5%;
+}
+#rating-panel tr th:last-child,
+#rating-panel tr td:last-child {
+ padding-right: 5%;
+}
+
+div#rating-panel {
+ position: relative;
+ pointer-events: none;
+}
+
+#rating-panel div.ng-hide-add.ng-hide-add-active,
+#rating-panel div.ng-hide-remove.ng-hide-remove-active {
+ -webkit-transition: all linear 0.75s;
+ transition: all linear 0.75s;
+}
+
+#rating-panel div.panel {
+ position: absolute;
+ top: 0;
+ left: -6%;
+ height: 545px;
+ overflow: auto;
+ padding: 0;
+ pointer-events: auto;
+ box-shadow: 0 3px 23px 7px rgb(118, 118, 118);
+ border-radius: 3px;
+}
+#rating-panel table {
+ table-layout: fixed;
+ width: 500px;
+ background-color: white;
+ opacity: 1;
+}
+
+#rating-panel div.ng-hide {
+ opacity: 0;
+ left: -55%;
+}
diff --git a/applications/subscriberPortal/src/app/view/user/user.html b/applications/subscriberPortal/src/app/view/user/user.html
new file mode 100644
index 0000000..0065799
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/user/user.html
@@ -0,0 +1,44 @@
+<!-- Users page partial html -->
+<div class="container">
+ <div id="user">
+ <div class="main-left" ng-class="{family: isFamily}">
+ <table class="user-info">
+ <tr>
+ <th class="user-pic"></th>
+ <th>Name</th>
+ <th>Last Login</th>
+ </tr>
+ <tr ng-repeat="user in users" class="fadein">
+ <td class="user-pic">
+ <img ng-src="{{'/imgs/' + user.icon_id + '.jpg'}}">
+ </td>
+ <td>{{user.name}}</td>
+ <td>{{shared.userActivity[user.id]}}</td>
+ </tr>
+ </table>
+ </div>
+
+ <div class="main-right" ng-class="{family: isFamily}">
+ <form ng-if="isFamily" name="changeLevels">
+ <table class="user-form">
+ <tr>
+ <th>
+ Select Site Rating
+ <span class="help" ng-click="showRatings()"> (?)</span>
+ </th>
+ </tr>
+ <tr ng-repeat="user in users" class="options">
+ <td>
+ <select ng-model="user.level" ng-options="l for l in levels" ng-change="updateLevel(user)">
+ </select>
+ <user-updated-tick user="user">Saved</user-updated-tick>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ <div ng-if="isFamily">
+ <ratings-panel></ratings-panel>
+ </div>
+ </div>
+</div>
\ No newline at end of file
diff --git a/applications/subscriberPortal/src/app/view/user/user.js b/applications/subscriberPortal/src/app/view/user/user.js
new file mode 100644
index 0000000..57e0a4c
--- /dev/null
+++ b/applications/subscriberPortal/src/app/view/user/user.js
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ 'use strict';
+
+ angular.module('cordUser', [])
+ .controller('CordUserCtrl', function ($log, $scope, $resource, $timeout, $filter, SubscriberUsers, cordConfig, SubscriberUsersUrlFilterLevel) {
+
+ $scope.page.curr = 'user';
+ $scope.isFamily = false;
+ $scope.newLevels = {};
+ $scope.showCheck = false;
+ $scope.ratingsShown = false;
+
+ SubscriberUsers.query({subscriberId: $cookies.get('subscriberId')}).$promise
+ .then(function(res){
+ $scope.isFamily = cordConfig.bundles[cordConfig.activeBundle].id === 'family';
+ // if bundle is family search for url_filter level
+ if ($scope.isFamily) {
+ angular.forEach(cordConfig.bundles[cordConfig.activeBundle].functions, function(fn){
+ if(fn.id === 'url_filter'){
+ $scope.levels = fn.params.levels;
+ }
+ });
+ }
+ $scope.users = res;
+ })
+ .catch(function () {
+ $log.error('Problem with resource', SubscriberUsers);
+ });
+
+ $scope.updateLevel = function(user){
+ // TODO save this data and show a confirmation to the user
+ // NOTE subscriberId should be retrieved by login
+ SubscriberUsersUrlFilterLevel.updateUrlFilterLevel(1, user.id, user.level)
+ .then(function(){
+ user.updated = true;
+ })
+ .catch(function(e){
+ throw new Error(e);
+ });
+ };
+
+ $scope.showRatings = function () {
+ $scope.ratingsShown = !$scope.ratingsShown;
+ };
+
+ $log.debug('Cord User Ctrl has been created.');
+ })
+ .directive('userUpdatedTick', function($timeout){
+ return {
+ restric: 'E',
+ scope: {
+ user: '='
+ },
+ template: '<span class="icon-saved" ng-show="saved"></span>',
+ link: function(scope, elem){
+ scope.saved = false;
+ scope.$watch('user.updated', function(val){
+ if(val){
+ scope.saved = true;
+ $timeout(function(){
+ scope.saved = false;
+ }, 3000);
+ }
+ });
+ }
+ }
+ })
+ .directive('ratingsPanel', function ($log) {
+ return {
+ templateUrl: 'app/view/user/ratingPanel.html',
+ link: function (scope, elem, attrs) {
+ function fillSubMap(order, bool) {
+ var result = {};
+ $.each(order, function (index, cat) {
+ result[cat] = bool;
+ });
+ return result;
+ }
+ function processSubMap(prhbSites) {
+ var result = {};
+ $.each(prhbSites, function (index, cat) {
+ result[cat] = true;
+ });
+ return result;
+ }
+
+ function preprocess(data, order) {
+ return {
+ ALL: fillSubMap(order, false),
+ G: processSubMap(data.G),
+ PG: processSubMap(data.PG),
+ PG_13: processSubMap(data.PG_13),
+ R: processSubMap(data.R),
+ NONE: fillSubMap(order, true)
+ };
+ }
+
+ $.getJSON('/app/data/pc_cats.json', function (data) {
+ scope.level_order = data.level_order;
+ scope.category_order = data.category_order;
+ scope.prohibitedSites = preprocess(
+ data.prohibited, data.category_order
+ );
+ scope.$apply();
+ });
+ }
+ };
+ });
+}());
diff --git a/applications/subscriberPortal/src/cord.js b/applications/subscriberPortal/src/cord.js
new file mode 100644
index 0000000..c7a5b65
--- /dev/null
+++ b/applications/subscriberPortal/src/cord.js
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+(function () {
+ 'use strict';
+
+ var modules = [
+ 'ngRoute',
+ 'ngResource',
+ 'ngAnimate',
+ 'ngCookies',
+ 'cordRest',
+ 'cordMast',
+ 'cordFoot',
+ 'cordNav',
+ 'cordLogin',
+ 'cordHome',
+ 'cordUser',
+ 'cordBundle'
+ ];
+
+ angular.module('cordGui', modules)
+ .config(function ($routeProvider, $httpProvider) {
+
+ $httpProvider.interceptors.push('SetCSRFToken');
+
+ $routeProvider
+ .when('/login', {
+ controller: 'CordLoginCtrl',
+ controllerAs: 'ctrl',
+ templateUrl: 'app/view/login/login.html'
+ })
+ .when('/home', {
+ controller: 'CordHomeCtrl',
+ controllerAs: 'ctrl',
+ templateUrl: 'app/view/home/home.html'
+ })
+ .when('/user', {
+ controller: 'CordUserCtrl',
+ controllerAs: 'ctrl',
+ templateUrl: 'app/view/user/user.html'
+ })
+ .when('/bundle', {
+ controller: 'CordBundleCtrl',
+ controllerAs: 'ctrl',
+ templateUrl: 'app/view/bundle/bundle.html'
+ })
+ .otherwise({
+ redirectTo: '/login'
+ });
+ })
+ .controller('CordCtrl', function ($scope, $location, cordConfig) {
+ $scope.shared = {
+ url: 'http://' + $location.host() + ':' + $location.port()
+ };
+ $scope.shared.userActivity = cordConfig.userActivity;
+ $scope.page = {};
+ })
+ .constant('cordConfig', {
+ url: '',
+ userActivity: {}, //check if really needed
+ activeBundle: 1,
+ bundles: [
+ {
+ "id": "family",
+ "name": "Family Bundle",
+ "desc": "Description for family bundle",
+ "functions": [
+ {
+ "id": "internet",
+ "name": "Internet",
+ "desc": "Basic internet connectivity.",
+ "params": {}
+ },
+ {
+ "id": "firewall",
+ "name": "Firewall",
+ "desc": "Normal firewall protection.",
+ "params": {}
+ },
+ {
+ "id": "url_filter",
+ "name": "Parental Control",
+ "desc": "Variable levels of URL filtering.",
+ "params": {
+ "level": "PG",
+ "levels": [ "PG", "PG_13", "R" ]
+ }
+ }
+ ]
+ },
+ {
+ "id": "basic",
+ "name": "Basic Bundle",
+ "desc": "Description for basic bundle",
+ "functions": [
+ {
+ "id": "internet",
+ "name": "Internet",
+ "desc": "Basic internet connectivity.",
+ "params": {}
+ },
+ {
+ "id": "firewall",
+ "name": "Firewall",
+ "desc": "Normal firewall protection.",
+ "params": {}
+ }
+ ]
+ }
+ ]
+ })
+ .run(function($rootScope, $location, cordConfig, User){
+ cordConfig.url = 'http://' + $location.host() + ':' + $location.port();
+
+ // basic authentication
+ $rootScope.$on('$routeChangeStart', function(next, current) {
+ if(!User.isLoggedIn()){
+ $location.path('/login');
+ }
+ });
+ });
+}());
diff --git a/applications/subscriberPortal/src/imgs/bird.png b/applications/subscriberPortal/src/imgs/bird.png
new file mode 100644
index 0000000..8688cd6
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/bird.png
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/boy2.jpg b/applications/subscriberPortal/src/imgs/boy2.jpg
new file mode 100644
index 0000000..8b8ea58
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/boy2.jpg
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/bundle.jpg b/applications/subscriberPortal/src/imgs/bundle.jpg
new file mode 100644
index 0000000..8ea09f9
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/bundle.jpg
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/dad.jpg b/applications/subscriberPortal/src/imgs/dad.jpg
new file mode 100644
index 0000000..f7b84ad
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/dad.jpg
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/firewall.png b/applications/subscriberPortal/src/imgs/firewall.png
new file mode 100644
index 0000000..2da59f0
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/firewall.png
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/girl1.jpg b/applications/subscriberPortal/src/imgs/girl1.jpg
new file mode 100644
index 0000000..aeb9f64
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/girl1.jpg
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/home.jpg b/applications/subscriberPortal/src/imgs/home.jpg
new file mode 100644
index 0000000..050da93
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/home.jpg
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/icon-saved.gif b/applications/subscriberPortal/src/imgs/icon-saved.gif
new file mode 100644
index 0000000..fafa659
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/icon-saved.gif
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/internet.png b/applications/subscriberPortal/src/imgs/internet.png
new file mode 100644
index 0000000..0644c59
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/internet.png
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/login.jpg b/applications/subscriberPortal/src/imgs/login.jpg
new file mode 100644
index 0000000..5acb7bd
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/login.jpg
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/logo.png b/applications/subscriberPortal/src/imgs/logo.png
new file mode 100644
index 0000000..f8b11df
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/logo.png
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/mom.jpg b/applications/subscriberPortal/src/imgs/mom.jpg
new file mode 100644
index 0000000..c56e869
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/mom.jpg
Binary files differ
diff --git a/applications/subscriberPortal/src/imgs/url_filter.png b/applications/subscriberPortal/src/imgs/url_filter.png
new file mode 100644
index 0000000..c5c8960
--- /dev/null
+++ b/applications/subscriberPortal/src/imgs/url_filter.png
Binary files differ
diff --git a/applications/subscriberPortal/src/index.html b/applications/subscriberPortal/src/index.html
new file mode 100644
index 0000000..b00e425
--- /dev/null
+++ b/applications/subscriberPortal/src/index.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<!--
+~ Copyright 2015 Open Networking Laboratory
+~
+~ 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.
+~
+-->
+<html>
+<head>
+ <meta charset="utf-8">
+ <link rel="shortcut icon" href="imgs/bird.png">
+
+ <title>CORD Subscriber Portal</title>
+
+ <script src="bower_components/angular/angular.js"></script>
+ <script src="bower_components/angular-route/angular-route.js"></script>
+ <script src="bower_components/angular-animate/angular-animate.js"></script>
+ <script src="bower_components/angular-resource/angular-resource.js"></script>
+ <script src="bower_components/angular-cookies/angular-cookies.js"></script>
+ <script src="bower_components/jquery/dist/jquery.js"></script>
+
+ <script src="cord.js"></script>
+ <script src="app/fw/services/rest.js"></script>
+ <script src="app/fw/services/helpers.js"></script>
+ <link rel="stylesheet" href="app/view/common/common.css">
+
+ <script src="app/fw/mast/mast.js"></script>
+ <link rel="stylesheet" href="app/fw/mast/mast.css">
+ <script src="app/fw/foot/foot.js"></script>
+ <link rel="stylesheet" href="app/fw/foot/foot.css">
+
+ <script src="app/fw/nav/nav.js"></script>
+ <link rel="stylesheet" href="app/fw/nav/nav.css">
+
+ <script src="app/fw/icon/icon.js"></script>
+
+ <script src="app/view/login/login.js"></script>
+ <link rel="stylesheet" href="app/view/login/login.css">
+
+ <script src="app/view/home/home.js"></script>
+ <link rel="stylesheet" href="app/view/home/home.css">
+
+ <script src="app/view/user/user.js"></script>
+ <link rel="stylesheet" href="app/view/user/user.css">
+
+ <script src="app/view/bundle/bundle.js"></script>
+ <link rel="stylesheet" href="app/view/bundle/bundle.css">
+
+</head>
+<body ng-app="cordGui">
+<div id="frame" ng-controller="CordCtrl as cordCtrl">
+
+<mast></mast>
+<foot></foot>
+ <div id="view" ng-view></div>
+
+ <svg id="icon-defs">
+ <defs>
+ <symbol id="bird" viewBox="352 224 113 112">
+ <path d="M427.7,300.4 c-6.9,0.6-13.1,5-19.2,7.1c-18.1,6.2-33.9,
+ 9.1-56.5,4.7c24.6,17.2,36.6,13,63.7,0.1c-0.5,0.6-0.7,1.3-1.3,
+ 1.9c1.4-0.4,2.4-1.7,3.4-2.2c-0.4,0.7-0.9,1.5-1.4,1.9c2.2-0.6,
+ 3.7-2.3,5.9-3.9c-2.4,2.1-4.2,5-6,8c-1.5,2.5-3.1,4.8-5.1,6.9c-1,
+ 1-1.9,1.9-2.9,2.9c-1.4,1.3-2.9,2.5-5.1,2.9c1.7,0.1,3.6-0.3,6.5
+ -1.9c-1.6,2.4-7.1,6.2-9.9,7.2c10.5-2.6,19.2-15.9,25.7-18c18.3
+ -5.9,13.8-3.4,27-14.2c1.6-1.3,3-1,5.1-0.8c1.1,0.1,2.1,0.3,3.2,
+ 0.5c0.8,0.2,1.4,0.4,2.2,0.8l1.8,0.9c-1.9-4.5-2.3-4.1-5.9-6c-2.3
+ -1.3-3.3-3.8-6.2-4.9c-7.1-2.6-11.9,11.7-11.7-5c0.1-8,4.2-14.4,
+ 6.4-22c1.1-3.8,2.3-7.6,2.4-11.5c0.1-2.3,0-4.7-0.4-7c-2-11.2-8.4
+ -21.5-19.7-24.8c-1-0.3-1.1-0.3-0.9,0c9.6,17.1,7.2,38.3,3.1,54.2
+ C429.9,285.5,426.7,293.2,427.7,300.4z"></path>
+ </symbol>
+ <symbol id="checkMark" viewBox="0 0 10 10">
+ <path d="M2.6,4.5c0,0,0.7-0.4,1.2,0.3l1.0,1.8c0,0,2.7-5.4,2.8-5.7c
+ 0,0,0.5-0.9,1.4-0.1c0,0,0.5,0.5,0,1.3S6.8,7.3,5.6,9.2c0,0-0.4,0.5
+ -1.2,0.1S2.2,5.4,2.2,5.4S2.2,4.7,2.6,4.5z"></path>
+ </symbol>
+ <symbol id="xMark" viewBox="0 0 10 10">
+ <path d="M9.0,7.2C8.2,6.9,7.4,6.1,6.7,5.2c0.4-0.5,0.7-0.8,0.8-1.0C
+ 7.8,3.5,9.4,1.6,8.1,1.1C6.8,0.6,6.6,1.7,6.6,1.7C6.4,2.1,6.0,2.7,
+ 5.4,3.4C4.9,2.5,4.5,1.9,4.5,1.9S3.8,0.2,2.9,0.7C1.9,1.1,2.3,2.3,
+ 2.3,2.3c0.3,1.1,0.8,2.1,1.4,2.9C2.5,6.4,1.3,7.4,1.3,7.4S0.8,7.8,
+ 0.8,8.1C0.9,8.3,0.9,9.6,2.4,9.1C3.1,8.8,4.1,7.9,5.1,7.0c1.3,1.3,
+ 2.5,1.9,2.5,1.9s0.5,0.5,1.4-0.2C9.8,7.9,9.0,7.2,9.0,7.2z"></path>
+ </symbol>
+ </defs>
+ </svg>
+ </div>
+
+ <script type='text/javascript' id="__bs_script__">
+ //<![CDATA[
+ document.write("<script async src='http://HOST:3000/browser-sync/browser-sync-client.2.11.1.js'><\/script>".replace("HOST", location.hostname));
+ //]]>
+ </script>
+</body>
+</html>
diff --git a/containers/xos/Dockerfile b/containers/xos/Dockerfile
index 7e9db23..f65eb37 100644
--- a/containers/xos/Dockerfile
+++ b/containers/xos/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:14.04.2
+FROM ubuntu:14.04.3
# XXX Workaround for docker bug:
# https://github.com/docker/docker/issues/6345
@@ -70,7 +70,7 @@
google_api_python_client \
httplib2.ca_certs_locater
-ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/site-packages/suit/static/suit/js/
+ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/
# Install XOS
RUN git clone git://github.com/open-cloud/xos.git /tmp/xos && \
@@ -86,10 +86,9 @@
# Set environment variables.
ENV HOME /root
-ENV PYTHONPATH /usr/local/lib/python2.7/site-packages:/usr/lib/python2.7/dist-packages
# Define working directory.
WORKDIR /opt/xos
# Define default command.
-CMD update-ca-certificates && python manage.py runserver 0.0.0.0:8000 --insecure
+CMD update-ca-certificates && python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure --makemigrations
diff --git a/containers/xos/Dockerfile.devel b/containers/xos/Dockerfile.devel
index 93f5025..a8a9710 100644
--- a/containers/xos/Dockerfile.devel
+++ b/containers/xos/Dockerfile.devel
@@ -1,4 +1,4 @@
-FROM python:2.7.11
+FROM ubuntu:14.04.3
# XXX Workaround for docker bug:
# https://github.com/docker/docker/issues/6345
@@ -70,7 +70,7 @@
google_api_python_client \
httplib2.ca_certs_locater
-ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/site-packages/suit/static/suit/js/
+ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/
# Install XOS
ADD xos /opt/xos
@@ -85,10 +85,9 @@
# Set environment variables.
ENV HOME /root
-ENV PYTHONPATH /usr/local/lib/python2.7/site-packages:/usr/lib/python2.7/dist-packages
# Define working directory.
WORKDIR /opt/xos
# Define default command.
-CMD update-ca-certificates && python manage.py runserver 0.0.0.0:8000 --insecure
+CMD update-ca-certificates && python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure --makemigrations
diff --git a/containers/xos/Dockerfile.templ b/containers/xos/Dockerfile.templ
index 828c16b..25270a6 100644
--- a/containers/xos/Dockerfile.templ
+++ b/containers/xos/Dockerfile.templ
@@ -65,7 +65,7 @@
pyyaml \
requests
-ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/site-packages/suit/static/suit/js/
+ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/
# Install XOS
RUN git clone XOS_GIT_REPO -b XOS_GIT_BRANCH /tmp/xos && \
@@ -80,10 +80,9 @@
# Set environment variables.
ENV HOME /root
-ENV PYTHONPATH /usr/local/lib/python2.7/site-packages:/usr/lib/python2.7/dist-packages
# Define working directory.
WORKDIR /root
# Define default command.
-CMD python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure
+CMD update-ca-certificates && python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure --makemigrations
diff --git a/views/.yo-rc.json b/views/.yo-rc.json
new file mode 100644
index 0000000..33606db
--- /dev/null
+++ b/views/.yo-rc.json
@@ -0,0 +1,6 @@
+{
+ "generator-xos": {
+ "name": "sampleView",
+ "folder": "ngXosViews"
+ }
+}
\ No newline at end of file
diff --git a/views/README.md b/views/README.md
new file mode 100644
index 0000000..fb0c5bc
--- /dev/null
+++ b/views/README.md
@@ -0,0 +1,133 @@
+# ngXosLib
+
+This is a collection of helpers to develop views as Angular SPA.
+
+## Tools
+
+These tools are designed to help develop a graphical view. They assume XOS is running on your system and responding at: `localhost:9999`. The `xos/configurations/frontend` is normally sufficient for GUI development.
+
+### Apigen
+
+Usage: `npm run apigen`
+
+This tool generates an angular resource file for each endpoint available in Swagger.
+
+>You can generate api related documentation with: `npm run apidoc`. The output is locate in `api/docs`. You can also see a list of available methods through Swagger at `http://localhost:9999/docs/`
+
+### Vendors
+
+XOS comes with a set of common libraries, as listed in `bower.json`:
+- angular
+- angular-route
+- angular-resource
+- angular-cookie
+- ng-lodash
+
+These libraries are served through Django, so they are not included in your minified vendor file. To add a library and generate a new file (that will override the old one):
+- enter `ngXosLib` folder
+- run `bower install [myPackage] --save`
+- rebuild the file with `gulp vendor`
+
+>_NOTE before adding libraries please discuss it on the devel list to avoid this file becoming too big_
+
+### Helpers
+
+XOS comes with a helper library that is automatically loaded in the Django template.
+
+To use it, add `xos.helpers` to your required modules:
+
+```
+angular.module('xos.myView', [
+ 'xos.helpers'
+])
+```
+
+It will automatically add a `token` to all your requests. Eventually you can take advantage of some other services:
+
+- **NoHyperlinks Interceptor**: will add a `?no_hyperlinks=1` to your request, to tell Django to return ids instead of links.
+- **XosApi** wrapper for `/xos` endpoints.
+- **XoslibApi** wrapper for `/xoslib` endpoints.
+- **HpcApi** wrapper for `/hpcapi` endpoints.
+
+>_NOTE: for the API related service, check the documentation in Section [Apigen](#apigen)._
+
+# ngXosViews
+
+In addition to auto-generated Django Admin Views and developer-defined Service Views, a set of custom views can be generate in XOS.
+
+These views are based on AngularJs and they communicate with XOS through the REST APIs, providing a powerful and flexible way to present and manage data.
+
+## How to Create a View
+
+### Getting Started
+
+We have created a [yeoman](http://yeoman.io/) generator to help scaffold views.
+
+>As it is in an early stage of development, you should manually link it to your system. To do this enter `/views/ngXosLib/generator-xos` and run `npm link`.
+
+#### To Generate a New View
+
+From `/views` run `yo xos`. This command will create a new folder with the provided name in `/views/ngXosViews` that contains your application.
+
+>If you left View name empty it should be `/views/ngXosViews/sampleView`
+
+#### Run a Development Server
+
+In your `view` folder run `npm start`.
+
+This will install the required dependencies and start a local server with [BrowserSync](http://www.browsersync.io/).
+
+#### Publish Your View
+
+Once your view is done, from your view root folder, run: `npm run build`.
+
+This will build your application and copy files in the appropriate directories for use by Django.
+
+At this point you can enter: `http://localhost:9999/admin/core/dashboardview/add/` and add your custom view.
+
+>_NOTE: url field should be `template:xosSampleView`_
+
+##### Add This View to a Configuration Setup
+
+You can easily set this as a default view in a configuration by editing the `{config}.yml` file for that configuration. Add these lines:
+
+```
+{TabName}:
+ type: tosca.nodes.DashboardView
+ properties:
+ url: template:{viewName}
+```
+
+Then edit the _User_ section (normally it starts with `padmin@vicci.org`) as follows:
+
+```
+padmin@vicci.org:
+ type: tosca.nodes.User
+ properties:
+ firstname: XOS
+ lastname: admin
+ is_admin: true
+ requirements:
+ - tenant_dashboard:
+ node: Tenant
+ relationship: tosca.relationships.UsesDashboard
+ - {custom_dashboard}:
+ node: {TabName}
+ relationship: tosca.relationships.UsesDashboard
+```
+
+#### Install Dependencies in Your App
+
+To install a local dependency use bower with `--save`. Common modules are saved in `devDependencies` as they already loaded in the Django template.
+
+The `npm start` command watches your dependencies and will automatically inject it in your `index.html`.
+
+#### Linting
+
+A styleguide is enforced through [EsLint](http://eslint.org/) and is checked during the build process. We **highly** recommend installing the linter in your editor to have realtime hints.
+
+#### Test
+
+The generator sets up a test environment with a default test.
+To run it, execute: `npm test`
+
diff --git a/views/ngXosLib/xosHelpers/src/services/api.services.js b/views/ngXosLib/xosHelpers/src/services/api.services.js
index 7a4baba..c7384f8 100644
--- a/views/ngXosLib/xosHelpers/src/services/api.services.js
+++ b/views/ngXosLib/xosHelpers/src/services/api.services.js
@@ -29,4 +29,4 @@
}
return hpcApiCache;
}
-})();
\ No newline at end of file
+})();
diff --git a/xos-apps/README.md b/xos-apps/README.md
deleted file mode 100644
index 66d71eb..0000000
--- a/xos-apps/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## Applications on XOS
-
-This directory may prove to be unnecessary, but for now we
-are using it for applications that run on top of the XOS API.
-Initially, this includes only an auto-scaling app that uses
-monitoring data to decide when to scale a service up/down.
-
-This is treated as an application rather than yet another
-service because it offers only a GUI front-end; it is not
-modelled as a service that other services can build upon.
diff --git a/xos/configurations/common/Makefile.devstack b/xos/configurations/common/Makefile.devstack
index e60434e..0dff27c 100644
--- a/xos/configurations/common/Makefile.devstack
+++ b/xos/configurations/common/Makefile.devstack
@@ -15,7 +15,7 @@
flat_name:
echo private|tr -d '\n' > $(SETUPDIR)/flat_net_name
- bash -c "source $(SETUPDIR)/admin-openrc.sh; openstack network set --share private"
+ bash -c "source $(SETUPDIR)/admin-openrc.sh; neutron net-update private --shared"
nodes_yaml:
export SETUPDIR=$(SETUPDIR); bash ./make-nodes-yaml.sh
diff --git a/xos/configurations/cord/Dockerfile.cord b/xos/configurations/cord/Dockerfile.cord
index 9fde1b0..3e63eb2 100644
--- a/xos/configurations/cord/Dockerfile.cord
+++ b/xos/configurations/cord/Dockerfile.cord
@@ -4,21 +4,21 @@
ADD xos/configurations/common/flat_net_name /root/setup/
ADD xos/configurations/common/nodes.yaml /opt/xos/configurations/commmon/
ADD xos/configurations/common/id_rsa.pub /root/setup/padmin_public_key
-ADD xos/configurations/common/id_rsa.pub /opt/xos/observers/vcpe/vcpe_public_key
-ADD xos/configurations/common/id_rsa /opt/xos/observers/vcpe/vcpe_private_key
-ADD xos/configurations/common/id_rsa.pub /opt/xos/observers/monitoring_channel/monitoring_channel_public_key
-ADD xos/configurations/common/id_rsa /opt/xos/observers/monitoring_channel/monitoring_channel_private_key
-ADD xos/configurations/common/id_rsa.pub /opt/xos/observers/onos/onos_key.pub
-ADD xos/configurations/common/id_rsa /opt/xos/observers/onos/onos_key
+ADD xos/configurations/common/id_rsa.pub /opt/xos/synchronizers/vcpe/vcpe_public_key
+ADD xos/configurations/common/id_rsa /opt/xos/synchronizers/vcpe/vcpe_private_key
+ADD xos/configurations/common/id_rsa.pub /opt/xos/synchronizers/monitoring_channel/monitoring_channel_public_key
+ADD xos/configurations/common/id_rsa /opt/xos/synchronizers/monitoring_channel/monitoring_channel_private_key
+ADD xos/configurations/common/id_rsa.pub /opt/xos/synchronizers/onos/onos_key.pub
+ADD xos/configurations/common/id_rsa /opt/xos/synchronizers/onos/onos_key
ADD xos/configurations/common/node_key.pub /root/setup/node_key.pub
ADD xos/configurations/common/node_key /root/setup/node_key
ADD xos/configurations/common/ceilometer_url /root/setup/ceilometer_url
-ADD xos/observers/vcpe/supervisor/vcpe-observer.conf /etc/supervisor/conf.d/
-ADD xos/observers/vbng/supervisor/vbng-observer.conf /etc/supervisor/conf.d/
-ADD xos/observers/onos/supervisor/onos-observer.conf /etc/supervisor/conf.d/
-ADD xos/observers/monitoring_channel/supervisor/monitoring_channel_observer.conf /etc/supervisor/conf.d/
-RUN sed -i 's/proxy_ssh=True/proxy_ssh=False/' /opt/xos/observers/vcpe/vcpe_observer_config
-RUN sed -i 's/proxy_ssh=True/proxy_ssh=False/' /opt/xos/observers/monitoring_channel/monitoring_channel_observer_config
+ADD xos/synchronizers/vcpe/supervisor/vcpe-observer.conf /etc/supervisor/conf.d/
+ADD xos/synchronizers/vbng/supervisor/vbng-observer.conf /etc/supervisor/conf.d/
+ADD xos/synchronizers/onos/supervisor/onos-observer.conf /etc/supervisor/conf.d/
+ADD xos/synchronizers/monitoring_channel/supervisor/monitoring_channel_observer.conf /etc/supervisor/conf.d/
+RUN sed -i 's/proxy_ssh=True/proxy_ssh=False/' /opt/xos/synchronizers/vcpe/vcpe_synchronizer_config
+RUN sed -i 's/proxy_ssh=True/proxy_ssh=False/' /opt/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer_config
ADD xos/configurations/cord/virtualbng.json /root/setup/
ADD xos/configurations/cord/vtn-network-cfg.json /root/setup/
diff --git a/xos/configurations/cord/ceilometer.yaml b/xos/configurations/cord/ceilometer.yaml
index 82e697a..0ea5cbd 100644
--- a/xos/configurations/cord/ceilometer.yaml
+++ b/xos/configurations/cord/ceilometer.yaml
@@ -26,7 +26,7 @@
kind: ceilometer
# public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
# artifacts:
-# pubkey: /opt/xos/observers/vcpe/vcpe_public_key
+# pubkey: /opt/xos/synchronizers/vcpe/vcpe_public_key
Private:
diff --git a/xos/configurations/cord/cord.yaml b/xos/configurations/cord/cord.yaml
index 8aa4676..565c419 100644
--- a/xos/configurations/cord/cord.yaml
+++ b/xos/configurations/cord/cord.yaml
@@ -34,9 +34,9 @@
view_url: /admin/cord/vcpeservice/$id$/
backend_network_label: hpc_client
public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
- private_key_fn: /opt/xos/observers/vcpe/vcpe_private_key
+ private_key_fn: /opt/xos/synchronizers/vcpe/vcpe_private_key
artifacts:
- pubkey: /opt/xos/observers/vcpe/vcpe_public_key
+ pubkey: /opt/xos/synchronizers/vcpe/vcpe_public_key
service_vbng:
type: tosca.nodes.VBNGService
@@ -54,7 +54,7 @@
view_url: /admin/onos/onosservice/$id$/
public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
artifacts:
- pubkey: /opt/xos/observers/onos/onos_key.pub
+ pubkey: /opt/xos/synchronizers/onos/onos_key.pub
#
# To actually bring up the vBNG app
@@ -118,13 +118,13 @@
"defaultVlan" : "1"
},
"basic" : {
- "driver" : "default"
+ "driver" : "pmc-olt"
}
}
}
}
artifacts:
- pubkey: /opt/xos/observers/onos/onos_key.pub
+ pubkey: /opt/xos/synchronizers/onos/onos_key.pub
vOLT_ONOS_app:
@@ -137,7 +137,21 @@
node: service_volt
relationship: tosca.relationships.UsedByService
properties:
- dependencies: org.onosproject.openflow-base, org.onosproject.olt
+ install_dependencies: onos-ext-notifier-1.0-SNAPSHOT.oar, onos-ext-volt-event-publisher-1.0-SNAPSHOT.oar
+ dependencies: org.onosproject.openflow-base, org.onosproject.olt, org.ciena.onos.ext_notifier, org.ciena.onos.volt_event_publisher
+ component_config: >
+ {
+ "org.ciena.onos.ext_notifier.KafkaNotificationBridge":{
+ "rabbit.user": "<rabbit_user>",
+ "rabbit.password": "<rabbit_password>",
+ "rabbit.host": "<rabbit_host>",
+ "publish.rabbit": "true",
+ "volt.events.rabbit.topic": "notifications.info",
+ "volt.events.rabbit.exchange": "voltlistener",
+ "volt.events.opaque.info": "{project_id: <keystone_tenant_id>, user_id: <keystone_user_id>}",
+ "publish.volt.events": "true"
+ }
+ }
# config_network-cfg.json: >
# {
# "devices" : {
@@ -439,6 +453,18 @@
path: andybavier/docker-vcpe
tag: develop
+ # Let's add a user who can be administrator of the household
+ johndoe@myhouse.com:
+ type: tosca.nodes.User
+ properties:
+ password: letmein
+ firstname: john
+ lastname: doe
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+
# A subscriber
My House:
type: tosca.nodes.CORDSubscriber
@@ -448,6 +474,10 @@
cdn_enable: false
url_filter_enable: false
url_filter_level: R
+ requirements:
+ - house_admin:
+ node: johndoe@myhouse.com
+ relationship: tosca.relationships.AdminPrivilege
Mom's PC:
type: tosca.nodes.CORDUser
diff --git a/xos/configurations/cord/docker-compose.yml b/xos/configurations/cord/docker-compose.yml
index 3518f80..bfb04b8 100644
--- a/xos/configurations/cord/docker-compose.yml
+++ b/xos/configurations/cord/docker-compose.yml
@@ -29,7 +29,7 @@
extra_hosts:
- ctl:${MYIP}
volumes:
- - ../setup/id_rsa:/opt/xos/observers/onos/onos_key:ro # private key
+ - ../setup/id_rsa:/opt/xos/synchronizers/onos/onos_key:ro # private key
xos_synchronizer_vcpe:
image: xosproject/xos-synchronizer-openstack
@@ -42,7 +42,7 @@
extra_hosts:
- ctl:${MYIP}
volumes:
- - ../setup/id_rsa:/opt/xos/observers/vcpe/vcpe_private_key:ro # private key
+ - ../setup/id_rsa:/opt/xos/synchronizers/vcpe/vcpe_private_key:ro # private key
- ../setup:/root/setup:ro
xos_synchronizer_vbng:
@@ -67,7 +67,7 @@
extra_hosts:
- ctl:${MYIP}
volumes:
- - ../setup/id_rsa:/opt/xos/observers/monitoring_channel/monitoring_channel_private_key:ro # private key
+ - ../setup/id_rsa:/opt/xos/synchronizers/monitoring_channel/monitoring_channel_private_key:ro # private key
# FUTURE
@@ -88,6 +88,6 @@
- ../setup:/root/setup:ro
- ../common/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
- ./xos_cord_config:/opt/xos/xos_configuration/xos_cord_config:ro
- - ../setup/id_rsa.pub:/opt/xos/observers/onos/onos_key.pub:ro
- - ../setup/id_rsa.pub:/opt/xos/observers/vcpe/vcpe_public_key:ro
- - ../setup/id_rsa.pub:/opt/xos/observers/monitoring_channel/monitoring_channel_public_key:ro
+ - ../setup/id_rsa.pub:/opt/xos/synchronizers/onos/onos_key.pub:ro
+ - ../setup/id_rsa.pub:/opt/xos/synchronizers/vcpe/vcpe_public_key:ro
+ - ../setup/id_rsa.pub:/opt/xos/synchronizers/monitoring_channel/monitoring_channel_public_key:ro
diff --git a/xos/configurations/frontend/docker-compose.yml b/xos/configurations/frontend/docker-compose.yml
index 2779deb..95dfe8a 100644
--- a/xos/configurations/frontend/docker-compose.yml
+++ b/xos/configurations/frontend/docker-compose.yml
@@ -20,4 +20,4 @@
- xos_db
volumes:
- ../common/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
- - ../../core/xoslib:/opt/xos/core/xoslib:ro
+ - ../../core/xoslib:/opt/xos/core/xoslib
diff --git a/xos/configurations/opencloud/Makefile b/xos/configurations/opencloud/Makefile
new file mode 100644
index 0000000..aef4946
--- /dev/null
+++ b/xos/configurations/opencloud/Makefile
@@ -0,0 +1,35 @@
+xos:
+ sudo docker-compose up -d
+ bash ./wait_for_xos.sh
+ sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/opencloud/opencloud.yaml
+
+containers:
+ cd ../../../containers/xos; make devel
+ cd ../../../containers/synchronizer; make
+
+stop:
+ sudo docker-compose stop
+
+showlogs:
+ sudo docker-compose logs
+
+rm: stop
+ sudo docker-compose rm
+
+ps:
+ sudo docker-compose ps
+
+enter-xos:
+ sudo docker exec -it devel_xos_1 bash
+
+enter-synchronizer:
+ sudo docker exec -it devel_xos_synchronizer_openstack_1 bash
+
+upgrade_pkgs:
+ sudo pip install httpie --upgrade
+
+rebuild_xos:
+ make -C ../../../containers/xos devel
+
+rebuild_synchronizer:
+ make -C ../../../containers/synchronizer
diff --git a/xos/configurations/opencloud/README.md b/xos/configurations/opencloud/README.md
new file mode 100644
index 0000000..97449ed
--- /dev/null
+++ b/xos/configurations/opencloud/README.md
@@ -0,0 +1,24 @@
+# XOS OpenCloud Portal
+
+This configuration can be used to bring up XOS on the OpenCloud portal. It launches
+XOS in three Docker containers (development GUI, Synchronizer, database) and configures XOS
+with the `opencloud.yaml` TOSCA file in this directory. *docker-compose* is used to manage
+the containers.
+
+## Docker Helpers
+
+Stop the containers: `make stop`
+
+Restart the containers: `make stop; make`
+
+Delete the containers and relaunch them: `make rm; make`
+
+Build the containers from scratch using the local XOS source tree: `make containers`
+
+View logs: `make showlogs`
+
+See what containers are running: `make ps`
+
+Open a shell on the XOS container: `make enter-xos`
+
+Open a shell on the Synchronizer container: `make enter-synchronizer`
diff --git a/xos/configurations/opencloud/docker-compose.yml b/xos/configurations/opencloud/docker-compose.yml
new file mode 100644
index 0000000..828175e
--- /dev/null
+++ b/xos/configurations/opencloud/docker-compose.yml
@@ -0,0 +1,34 @@
+xos_db:
+ image: xosproject/xos-postgres
+ expose:
+ - "5432"
+
+xos_synchronizer_openstack:
+ image: xosproject/xos-synchronizer-openstack
+ #command: bash -c "update-ca-certificates; sleep 120; python /opt/xos/synchronizers/openstack/xos-synchronizer.py"
+ command: sleep 86400
+ labels:
+ org.xosproject.kind: synchronizer
+ org.xosproject.target: openstack
+ links:
+ - xos_db
+ volumes:
+ - ../common/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
+ - /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro
+
+# FUTURE
+#xos_swarm_synchronizer:
+# image: xosproject/xos-swarm-synchronizer
+# labels:
+# org.xosproject.kind: synchronizer
+# org.xosproject.target: swarm
+
+xos:
+ image: xosproject/xos
+ command: python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure --makemigrations
+ ports:
+ - "80:8000"
+ links:
+ - xos_db
+ volumes:
+ - ../common/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
diff --git a/xos/configurations/opencloud/opencloud.yaml b/xos/configurations/opencloud/opencloud.yaml
index 15142a6..0b4a3ed 100644
--- a/xos/configurations/opencloud/opencloud.yaml
+++ b/xos/configurations/opencloud/opencloud.yaml
@@ -329,6 +329,7 @@
properties:
display_name: I2-atl
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -343,6 +344,7 @@
properties:
display_name: I2-chi
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -357,6 +359,7 @@
properties:
display_name: I2-hou
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -371,6 +374,7 @@
properties:
display_name: I2-kas
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -385,6 +389,7 @@
properties:
display_name: I2-lax
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -399,6 +404,7 @@
properties:
display_name: I2-nyc
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -413,6 +419,7 @@
properties:
display_name: I2-slc
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -427,6 +434,7 @@
properties:
display_name: I2-seae
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -441,6 +449,7 @@
properties:
display_name: I2-sng
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -455,6 +464,7 @@
properties:
display_name: I2-wdc
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: backbone
@@ -469,6 +479,7 @@
properties:
display_name: Princeton
site_url: http://opencloud.us/
+ hosts_nodes: true
requirements:
- deployment:
node: campus
@@ -483,6 +494,7 @@
properties:
display_name: Stanford
site_url: http://opencloud.us/
+ hosts_nodes: true
requirements:
- deployment:
node: campus
@@ -497,6 +509,7 @@
properties:
display_name: Washington
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: campus
@@ -511,6 +524,7 @@
properties:
display_name: GTech
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: campus
@@ -525,6 +539,7 @@
properties:
display_name: Arizona
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: campus
@@ -539,6 +554,7 @@
properties:
display_name: Internet2
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: campus
@@ -553,6 +569,7 @@
properties:
display_name: Singapore
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: campus
@@ -567,6 +584,7 @@
properties:
display_name: ON.Lab
site_url: http://opencloud.us/
+ hosts_nodes: false
requirements:
- deployment:
node: campus
diff --git a/xos/configurations/opencloud/wait_for_xos.sh b/xos/configurations/opencloud/wait_for_xos.sh
new file mode 100644
index 0000000..4f486af
--- /dev/null
+++ b/xos/configurations/opencloud/wait_for_xos.sh
@@ -0,0 +1,12 @@
+#! /bin/bash
+echo "Waiting for XOS to come up"
+until http 0.0.0.0:80 &> /dev/null
+do
+ sleep 1
+ RUNNING_CONTAINER=`sudo docker ps|grep "xos"|awk '{print $$NF}'`
+ if [[ $RUNNING_CONTAINER == "" ]]; then
+ echo Container may have failed. check with \"make showlogs\'
+ exit 1
+ fi
+done
+echo "XOS is ready"
diff --git a/xos/core/xoslib/methods/ceilometerview.py b/xos/core/xoslib/methods/ceilometerview.py
index 825cce4..1b46855 100644
--- a/xos/core/xoslib/methods/ceilometerview.py
+++ b/xos/core/xoslib/methods/ceilometerview.py
@@ -468,6 +468,80 @@
'label': '',
'description': _("Number of VCPUs"),
}),
+ ("disk.read.requests", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Number of read requests"),
+ }),
+ ("disk.write.requests", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Number of write requests"),
+ }),
+ ("disk.read.bytes", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Volume of reads"),
+ }),
+ ("disk.write.bytes", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Volume of writes"),
+ }),
+ ("disk.read.requests.rate", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Average rate of read requests"),
+ }),
+ ("disk.write.requests.rate", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Average rate of write requests"),
+ }),
+ ("disk.read.bytes.rate", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Average rate of reads"),
+ }),
+ ("disk.write.bytes.rate", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Average volume of writes"),
+ }),
+ ("disk.root.size", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Size of root disk"),
+ }),
+ ("disk.ephemeral.size", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Size of ephemeral disk"),
+ }),
+ ("network.incoming.bytes", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Number of incoming bytes "
+ "on the network for a VM interface"),
+ }),
+ ("network.outgoing.bytes", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Number of outgoing bytes "
+ "on the network for a VM interface"),
+ }),
+ ("network.incoming.packets", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Number of incoming "
+ "packets for a VM interface"),
+ }),
+ ("network.outgoing.packets", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Number of outgoing "
+ "packets for a VM interface"),
+ }),
("network.incoming.bytes.rate", {
'type': _("Nova"),
'label': '',
@@ -480,6 +554,18 @@
'description': _("Average rate per sec of outgoing "
"bytes on a VM network interface"),
}),
+ ("network.incoming.packets.rate", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Average rate per sec of incoming "
+ "packets on a VM network interface"),
+ }),
+ ("network.outgoing.packets.rate", {
+ 'type': _("Nova"),
+ 'label': '',
+ 'description': _("Average rate per sec of outgoing "
+ "packets on a VM network interface"),
+ }),
])
# Adding flavor based meters into meters_info dict
# TODO(lsmola) this kind of meter will be probably deprecated
@@ -512,21 +598,76 @@
'label': '',
'description': _("Existence of network"),
}),
+ ('network.create', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Creation requests for this network"),
+ }),
+ ('network.update', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Update requests for this network"),
+ }),
('subnet', {
'type': _("Neutron"),
'label': '',
'description': _("Existence of subnet"),
}),
+ ('subnet.create', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Creation requests for this subnet"),
+ }),
+ ('subnet.update', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Update requests for this subnet"),
+ }),
('port', {
'type': _("Neutron"),
'label': '',
'description': _("Existence of port"),
}),
+ ('port.create', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Creation requests for this port"),
+ }),
+ ('port.update', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Update requests for this port"),
+ }),
+ ('router', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Existence of router"),
+ }),
+ ('router.create', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Creation requests for this router"),
+ }),
+ ('router.update', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Update requests for this router"),
+ }),
('ip.floating', {
'type': _("Neutron"),
'label': '',
'description': _("Existence of floating ip"),
}),
+ ('ip.floating.create', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Creation requests for this floating ip"),
+ }),
+ ('ip.floating.update', {
+ 'type': _("Neutron"),
+ 'label': '',
+ 'description': _("Update requests for this floating ip"),
+ }),
])
def _get_glance_meters_info(self):
diff --git a/xos/core/xoslib/methods/cordsubscriber.py b/xos/core/xoslib/methods/cordsubscriber.py
index 49e32a5..0615024 100644
--- a/xos/core/xoslib/methods/cordsubscriber.py
+++ b/xos/core/xoslib/methods/cordsubscriber.py
@@ -228,7 +228,7 @@
def get_users(self, request, pk=None):
subscriber = self.get_object()
- return Response({"users": subscriber.users})
+ return Response(subscriber.users)
def get_user_level(self, request, pk=None, uid=None):
subscriber = self.get_object()
diff --git a/xos/core/xoslib/methods/loginview.py b/xos/core/xoslib/methods/loginview.py
new file mode 100755
index 0000000..69ee289
--- /dev/null
+++ b/xos/core/xoslib/methods/loginview.py
@@ -0,0 +1,101 @@
+from rest_framework.decorators import api_view
+from rest_framework.response import Response
+from rest_framework.reverse import reverse
+from rest_framework import serializers
+from rest_framework import generics
+from rest_framework.views import APIView
+from core.models import *
+from services.hpc.models import *
+from services.requestrouter.models import *
+from django.forms import widgets
+from django.core.exceptions import PermissionDenied
+from django.contrib.contenttypes.models import ContentType
+import json
+import socket
+import time
+import django.middleware.csrf
+from xos.exceptions import *
+from django.contrib.sessions.backends.db import SessionStore
+from django.contrib.sessions.models import Session
+from django.contrib.auth import authenticate
+
+def date_handler(obj):
+ return obj.isoformat() if hasattr(obj, 'isoformat') else obj
+
+def serialize_user(model):
+ serialized = model_to_dict(model)
+ del serialized['timezone']
+ del serialized['password']
+ return json.dumps(serialized, default=date_handler)
+
+class LoginView(APIView):
+ method_kind = "list"
+ method_name = "login"
+
+ def do_login(self, request, username, password):
+ if not username:
+ raise XOSMissingField("No username specified")
+
+ if not password:
+ raise XOSMissingField("No password specified")
+
+ u=authenticate(username=username, password=password)
+ if not u:
+ raise PermissionDenied("Failed to authenticate user %s" % username)
+
+ auth = {"username": username, "password": password}
+ request.session["auth"] = auth
+ request.session['_auth_user_id'] = u.pk
+ request.session['_auth_user_backend'] = u.backend
+ request.session.save()
+
+ return Response({
+ "xoscsrftoken": django.middleware.csrf.get_token(request),
+ "xossessionid": request.session.session_key,
+ "user": serialize_user(u)
+ })
+
+ def get(self, request, format=None):
+ username = request.GET.get("username", None)
+ password = request.GET.get("password", None)
+
+ return self.do_login(request, username, password)
+
+ def post(self, request, format=None):
+ username = request.DATA.get("username", None)
+ password = request.DATA.get("password", None)
+
+ return self.do_login(request, username, password)
+
+class LogoutView(APIView):
+ method_kind = "list"
+ method_name = "logout"
+
+ def do_logout(self, request, sessionid):
+ if not sessionid:
+ raise XOSMissingField("No xossessionid specified")
+
+ # Make sure the session exists. This prevents us from accidentally
+ # creating empty sessions with SessionStore()
+ session = Session.objects.filter(session_key=sessionid)
+ if not session:
+ # session doesn't exist
+ raise PermissionDenied("Session does not exist")
+
+ session = SessionStore(session_key=sessionid)
+ if "auth" in session:
+ del session["auth"]
+ session.save()
+ if "_auth_user_id" in session:
+ del session["_auth_user_id"]
+ session.save()
+
+ return Response("Logged Out")
+
+ def get(self, request, format=None):
+ sessionid = request.GET.get("xossessionid", None)
+ return self.do_logout(request, sessionid)
+
+ def post(self, request, format=None):
+ sessionid = request.DATA.get("xossessionid", None)
+ return self.do_logout(request, sessionid)
\ No newline at end of file
diff --git a/xos/services/onos/models.py b/xos/services/onos/models.py
index 80e903e..1e869d1 100644
--- a/xos/services/onos/models.py
+++ b/xos/services/onos/models.py
@@ -38,6 +38,7 @@
KIND = ONOS_KIND
default_attributes = {"name": "",
+ "install_dependencies": "",
"dependencies": ""}
def __init__(self, *args, **kwargs):
onos_services = ONOSService.get_service_objects().all()
@@ -84,6 +85,14 @@
def dependencies(self, value):
self.set_attribute("dependencies", value)
+ @property
+ def install_dependencies(self):
+ return self.get_attribute("install_dependencies", self.default_attributes["install_dependencies"])
+
+ @install_dependencies.setter
+ def install_dependencies(self, value):
+ self.set_attribute("install_dependencies", value)
+
#@property
#def instance(self):
# instance_id = self.get_attribute("instance_id", self.default_attributes["instance_id"])
diff --git a/xos/synchronizers/base/ansible.py b/xos/synchronizers/base/ansible.py
index 7c30685..d2dca3b 100644
--- a/xos/synchronizers/base/ansible.py
+++ b/xos/synchronizers/base/ansible.py
@@ -195,7 +195,7 @@
print "ANSIBLE_CONFIG=%s" % config_pathname
print "ANSIBLE_HOSTS=%s" % hosts_pathname
- return run_template(name, opts, path, ansible_config = config_pathname, ansible_hosts = hosts_pathname, run_ansible_script="/opt/xos/observer/run_ansible_verbose")
+ return run_template(name, opts, path, ansible_config = config_pathname, ansible_hosts = hosts_pathname, run_ansible_script="/opt/xos/synchronizers/base/run_ansible_verbose")
diff --git a/xos/synchronizers/base/xos-synchronizer.py b/xos/synchronizers/base/xos-synchronizer.py
index 3fffd33..493b94a 100644
--- a/xos/synchronizers/base/xos-synchronizer.py
+++ b/xos/synchronizers/base/xos-synchronizer.py
@@ -8,7 +8,7 @@
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
from synchronizers.base.backend import Backend
from xos.config import Config, DEFAULT_CONFIG_FN
-from core.models import Instance
+from core.models import Instance,NetworkTemplate
from xos.logger import Logger, logging, logger
from django.db import ProgrammingError
import time
@@ -67,9 +67,12 @@
while not models_active:
try:
_ = Instance.objects.first()
+ _ = NetworkTemplate.objects.first()
models_active = True
- except ProgrammingError:
+ except Exception,e:
+ logger.info(str(e))
logger.info('Waiting for data model to come up before starting...')
+ time.sleep(10)
wait = True
if (wait):
diff --git a/xos/synchronizers/helloworld/run.sh b/xos/synchronizers/helloworld/run.sh
index f56ffe3..1b9d834 100755
--- a/xos/synchronizers/helloworld/run.sh
+++ b/xos/synchronizers/helloworld/run.sh
@@ -3,4 +3,4 @@
#fi
export XOS_DIR=/opt/xos
-python helloworld-observer.py -C $XOS_DIR/observers/helloworld/helloworld_config
+python helloworld-synchronizer.py -C $XOS_DIR/synchronizers/helloworld/helloworld_config
diff --git a/xos/synchronizers/helloworld/start.sh b/xos/synchronizers/helloworld/start.sh
index 89240cd..7945db3 100755
--- a/xos/synchronizers/helloworld/start.sh
+++ b/xos/synchronizers/helloworld/start.sh
@@ -1,4 +1,4 @@
export XOS_DIR=/opt/xos
-echo $XOS_DIR/observers/helloworld/helloworld_config
-python helloworld-observer.py -C $XOS_DIR/observers/helloworld/helloworld_config
+echo $XOS_DIR/synchronizers/helloworld/helloworld_config
+python helloworld-synchronizer.py -C $XOS_DIR/synchronizers/helloworld/helloworld_config
diff --git a/xos/synchronizers/helloworldservice_complete/helloworldservice_config b/xos/synchronizers/helloworldservice_complete/helloworldservice_config
index b779d0e..69894fc 100644
--- a/xos/synchronizers/helloworldservice_complete/helloworldservice_config
+++ b/xos/synchronizers/helloworldservice_complete/helloworldservice_config
@@ -15,11 +15,11 @@
# Optional name
name=helloworldservice
# This is the location to the dependency graph you generate
-dependency_graph=/opt/xos/observers/helloworldservice_complete/model-deps
+dependency_graph=/opt/xos/synchronizers/helloworldservice_complete/model-deps
# The location of your SyncSteps
steps_dir=/opt/xos/synchronizers/helloworldservice_complete/steps
# A temporary directory that will be used by ansible
-sys_dir=/opt/xos/observers/helloworldservice_complete/sys
+sys_dir=/opt/xos/synchronizers/helloworldservice_complete/sys
# Location of the file to save logging messages to the backend log is often used
logfile=/var/log/xos_backend.log
# If this option is true, then nothing will change, we simply pretend to run
diff --git a/xos/synchronizers/helloworldservice_complete/run.sh b/xos/synchronizers/helloworldservice_complete/run.sh
index 6bce079..331f8ae 100755
--- a/xos/synchronizers/helloworldservice_complete/run.sh
+++ b/xos/synchronizers/helloworldservice_complete/run.sh
@@ -1,3 +1,3 @@
# Runs the XOS observer using helloworldservice_config
export XOS_DIR=/opt/xos
-python helloworldservice-observer.py -C $XOS_DIR/observers/helloworldservice_complete/helloworldservice_config
+python helloworldservice-synchronizer.py -C $XOS_DIR/synchronizers/helloworldservice_complete/helloworldservice_config
diff --git a/xos/synchronizers/helloworldservice_complete/steps/sync_helloworldtenant.py b/xos/synchronizers/helloworldservice_complete/steps/sync_helloworldtenant.py
index b7ed2a8..69a08f5 100644
--- a/xos/synchronizers/helloworldservice_complete/steps/sync_helloworldtenant.py
+++ b/xos/synchronizers/helloworldservice_complete/steps/sync_helloworldtenant.py
@@ -23,7 +23,7 @@
template_name = "sync_helloworldtenant.yaml"
# The location of the SSH private key to use when ansible connects to
# instances.
- service_key_name = "/opt/xos/observers/helloworldservice_complete/helloworldservice_private_key"
+ service_key_name = "/opt/xos/synchronizers/helloworldservice_complete/helloworldservice_private_key"
def __init__(self, *args, **kwargs):
super(SyncHelloWorldTenantComplete, self).__init__(*args, **kwargs)
diff --git a/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.py b/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.py
index 2e4eca8..db7d318 100644
--- a/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.py
+++ b/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.py
@@ -23,7 +23,7 @@
observes=MonitoringChannel
requested_interval=0
template_name = "sync_monitoringchannel.yaml"
- service_key_name = "/opt/xos/observers/monitoring_channel/monitoring_channel_private_key"
+ service_key_name = "/opt/xos/synchronizers/monitoring_channel/monitoring_channel_private_key"
def __init__(self, *args, **kwargs):
super(SyncMonitoringChannel, self).__init__(*args, **kwargs)
diff --git a/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.yaml b/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.yaml
index 6c5fc8c..cedf3a4 100644
--- a/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.yaml
+++ b/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.yaml
@@ -25,14 +25,14 @@
{% if delete %}
- name: Remove tenant
# FIXME: Adding dummy template action to avoid "action attribute missing in task" error
- template: src=/opt/xos/observers/monitoring_channel/templates/ceilometer_proxy_config.j2 dest=/usr/local/share/monitoring-channel-{{ unique_id }}_ceilometer_proxy_config mode=0777
+ template: src=/opt/xos/synchronizers/monitoring_channel/templates/ceilometer_proxy_config.j2 dest=/usr/local/share/monitoring-channel-{{ unique_id }}_ceilometer_proxy_config mode=0777
notify:
- stop monitoring-channel
- remove container
{% else %}
{% if full_setup %}
- name: Docker repository
- copy: src=/opt/xos/observers/monitoring_channel/files/docker.list
+ copy: src=/opt/xos/synchronizers/monitoring_channel/files/docker.list
dest=/etc/apt/sources.list.d/docker.list
- name: Import the repository key
@@ -61,12 +61,12 @@
shell: rm -f /etc/resolv.conf
- name: Install resolv.conf
- copy: src=/opt/xos/observers/monitoring_channel/files/vm-resolv.conf
+ copy: src=/opt/xos/synchronizers/monitoring_channel/files/vm-resolv.conf
dest=/etc/resolv.conf
{% endif %}
- name: ceilometer proxy config
- template: src=/opt/xos/observers/monitoring_channel/templates/ceilometer_proxy_config.j2 dest=/usr/local/share/monitoring-channel-{{ unique_id }}_ceilometer_proxy_config mode=0777
+ template: src=/opt/xos/synchronizers/monitoring_channel/templates/ceilometer_proxy_config.j2 dest=/usr/local/share/monitoring-channel-{{ unique_id }}_ceilometer_proxy_config mode=0777
notify:
# - restart monitoring-channel
- stop monitoring-channel
@@ -74,10 +74,10 @@
- start monitoring-channel
- name: Monitoring channel upstart
- template: src=/opt/xos/observers/monitoring_channel/templates/monitoring-channel.conf.j2 dest=/etc/init/monitoring-channel-{{ unique_id }}.conf
+ template: src=/opt/xos/synchronizers/monitoring_channel/templates/monitoring-channel.conf.j2 dest=/etc/init/monitoring-channel-{{ unique_id }}.conf
- name: Monitoring channel startup script
- template: src=/opt/xos/observers/monitoring_channel/templates/start-monitoring-channel.sh.j2 dest=/usr/local/sbin/start-monitoring-channel-{{ unique_id }}.sh mode=0755
+ template: src=/opt/xos/synchronizers/monitoring_channel/templates/start-monitoring-channel.sh.j2 dest=/usr/local/sbin/start-monitoring-channel-{{ unique_id }}.sh mode=0755
notify:
# - restart monitoring-channel
- stop monitoring-channel
diff --git a/xos/synchronizers/monitoring_channel/supervisor/monitoring_channel_observer.conf b/xos/synchronizers/monitoring_channel/supervisor/monitoring_channel_observer.conf
index 1b78703..1c2dd42 100644
--- a/xos/synchronizers/monitoring_channel/supervisor/monitoring_channel_observer.conf
+++ b/xos/synchronizers/monitoring_channel/supervisor/monitoring_channel_observer.conf
@@ -1,2 +1,2 @@
[program:monitoring_channel_observer]
-command=python /opt/xos/observers/monitoring_channel/monitoring_channel_observer.py -C /opt/xos/observers/monitoring_channel/monitoring_channel_observer_config
+command=python /opt/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer.py -C /opt/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer_config
diff --git a/xos/synchronizers/onos/onos-ext-notifier-1.0-SNAPSHOT.oar b/xos/synchronizers/onos/onos-ext-notifier-1.0-SNAPSHOT.oar
new file mode 100644
index 0000000..893c01a
--- /dev/null
+++ b/xos/synchronizers/onos/onos-ext-notifier-1.0-SNAPSHOT.oar
Binary files differ
diff --git a/xos/synchronizers/onos/onos-ext-volt-event-publisher-1.0-SNAPSHOT.oar b/xos/synchronizers/onos/onos-ext-volt-event-publisher-1.0-SNAPSHOT.oar
new file mode 100644
index 0000000..7a32268
--- /dev/null
+++ b/xos/synchronizers/onos/onos-ext-volt-event-publisher-1.0-SNAPSHOT.oar
Binary files differ
diff --git a/xos/synchronizers/onos/run.sh b/xos/synchronizers/onos/run.sh
index ea4c511..b108d5b 100755
--- a/xos/synchronizers/onos/run.sh
+++ b/xos/synchronizers/onos/run.sh
@@ -3,4 +3,4 @@
#fi
export XOS_DIR=/opt/xos
-python onos-observer.py -C $XOS_DIR/observers/onos/onos_observer_config
+python onos-synchronizer.py -C $XOS_DIR/synchronizers/onos/onos_synchronizer_config
diff --git a/xos/synchronizers/onos/start.sh b/xos/synchronizers/onos/start.sh
index c13ffbe..f0a1535 100755
--- a/xos/synchronizers/onos/start.sh
+++ b/xos/synchronizers/onos/start.sh
@@ -3,4 +3,4 @@
#fi
export XOS_DIR=/opt/xos
-nohup python onos-observer.py -C $XOS_DIR/observers/onos/onos_observer_config > /dev/null 2>&1 &
+nohup python onos-synchronizer.py -C $XOS_DIR/synchronizers/onos/onos_synchronizer_config > /dev/null 2>&1 &
diff --git a/xos/synchronizers/onos/steps/sync_onosapp.py b/xos/synchronizers/onos/steps/sync_onosapp.py
index 91eec44..8942e59 100644
--- a/xos/synchronizers/onos/steps/sync_onosapp.py
+++ b/xos/synchronizers/onos/steps/sync_onosapp.py
@@ -5,12 +5,14 @@
import sys
import base64
import time
+import re
+import json
from django.db.models import F, Q
from xos.config import Config
from synchronizers.base.syncstep import SyncStep
from synchronizers.base.ansible import run_template_ssh
from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
-from core.models import Service, Slice
+from core.models import Service, Slice, ControllerSlice, ControllerUser
from services.onos.models import ONOSService, ONOSApp
from xos.logger import Logger, logging
@@ -25,7 +27,7 @@
observes=ONOSApp
requested_interval=0
template_name = "sync_onosapp.yaml"
- service_key_name = "/opt/xos/observers/onos/onos_key"
+ service_key_name = "/opt/xos/synchronizers/onos/onos_key"
def __init__(self, *args, **kwargs):
super(SyncONOSApp, self).__init__(*args, **kwargs)
@@ -86,10 +88,31 @@
result = result + '], "ipPrefix": "%s"}' % ipPrefix
return result
+ def get_dynamic_parameter_value(self, o, param):
+ instance = self.get_instance(o)
+ if not instance:
+ raise "No instance for ONOS App"
+ if param == 'rabbit_host':
+ return instance.controller.rabbit_host
+ if param == 'rabbit_user':
+ return instance.controller.rabbit_user
+ if param == 'rabbit_password':
+ return instance.controller.rabbit_password
+ if param == 'keystone_tenant_id':
+ cslice = ControllerSlice.objects.get(slice=instance.slice)
+ if not cslice:
+ raise Exception("Controller slice object for %s does not exist" % instance.slice.name)
+ return cslice.tenant_id
+ if param == 'keystone_user_id':
+ cuser = ControllerUser.objects.get(user=instance.creator)
+ if not cuser:
+ raise Exception("Controller user object for %s does not exist" % instance.creator)
+ return cuser.kuser_id
def write_configs(self, o):
o.config_fns = []
o.rest_configs = []
+ o.component_configs = []
o.files_dir = self.get_files_dir(o)
if not os.path.exists(o.files_dir):
@@ -131,6 +154,20 @@
# later.
file(os.path.join(o.files_dir, fn),"w").write(" " +value)
o.rest_configs.append( {"endpoint": endpoint, "fn": fn} )
+ if name.startswith("component_config"):
+ components = json.loads(value)
+ for component in components.keys():
+ config = components[component]
+ for key in config.keys():
+ config_val = config[key]
+ found = re.findall('<(.+?)>',config_val)
+ for x in found:
+ #Get value corresponding to that string
+ val = self.get_dynamic_parameter_value(o, x)
+ if val:
+ config_val = re.sub('<'+x+'>', val, config_val)
+ #TODO: else raise an exception?
+ o.component_configs.append( {"component": component, "config_params": "'{\""+key+"\":\""+config_val+"\"}'"} )
def prepare_record(self, o):
self.write_configs(o)
@@ -145,11 +182,17 @@
fields["config_fns"] = o.config_fns
fields["rest_configs"] = o.rest_configs
fields["early_rest_configs"] = o.early_rest_configs
+ fields["component_configs"] = o.component_configs
if o.dependencies:
fields["dependencies"] = [x.strip() for x in o.dependencies.split(",")]
else:
fields["dependencies"] = []
+ if o.install_dependencies:
+ fields["install_dependencies"] = [x.strip() for x in o.install_dependencies.split(",")]
+ else:
+ fields["install_dependencies"] = []
+
if (instance.isolation=="container"):
fields["ONOS_container"] = "%s-%s" % (instance.slice.name, str(instance.id))
else:
diff --git a/xos/synchronizers/onos/steps/sync_onosapp.yaml b/xos/synchronizers/onos/steps/sync_onosapp.yaml
index a03368b..f0af0d6 100644
--- a/xos/synchronizers/onos/steps/sync_onosapp.yaml
+++ b/xos/synchronizers/onos/steps/sync_onosapp.yaml
@@ -7,6 +7,13 @@
vars:
appname: {{ appname }}
dependencies: {{ dependencies }}
+{% if component_configs %}
+ component_configs:
+{% for component_config in component_configs %}
+ - component: {{ component_config.component }}
+ config_params: {{ component_config.config_params }}
+{% endfor %}
+{% endif %}
{% if rest_configs %}
rest_configs:
{% for rest_config in rest_configs %}
@@ -25,7 +32,7 @@
tasks:
- name: Get Docker IP
- script: /opt/xos/observers/onos/scripts/dockerip.sh {{ ONOS_container }}
+ script: /opt/xos/synchronizers/onos/scripts/dockerip.sh {{ ONOS_container }}
register: onosaddr
- name: Wait for ONOS to come up
@@ -86,6 +93,30 @@
wait_for: timeout=15
{% endif %}
+{% if install_dependencies %}
+ - name: Install app file directory
+ file:
+ path=/home/ubuntu/{{ appname }}/apps/
+ state=directory
+
+ - name: Copy over app install files to ONOS host
+ copy:
+ src=/opt/xos/synchronizers/onos/{{ '{{' }} item {{ '}}' }}
+ dest=/home/ubuntu/{{ appname }}/apps/{{ '{{' }} item {{ '}}' }}
+ with_items:
+ {% for install_app in install_dependencies %}
+ - {{ install_app }}
+ {% endfor %}
+
+ - name: POST onos-app install command
+ command: >
+ curl -XPOST -HContent-Type:application/octet-stream -u karaf:karaf --data-binary @/home/ubuntu/{{ appname }}/apps/{{ '{{' }} item {{ '}}' }} http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/applications
+ with_items:
+ {% for dependency in install_dependencies %}
+ - {{ dependency }}
+ {% endfor %}
+{% endif %}
+
{% if dependencies %}
- name: Add dependencies to ONOS
uri:
@@ -99,6 +130,23 @@
{% endfor %}
{% endif %}
+{% if component_configs %}
+ - name: Add ONOS component configuration values
+ command: >
+ curl -XPOST -HContent-Type:application/json -u karaf:karaf -d {{ '{{' }} item.config_params | to_json {{ '}}' }} http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/configuration/{{
+ '{{' }} item.component {{ '}}' }}
+ with_items: "component_configs"
+
+# uri:
+# url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/configuration/{{ '{{' }} item.component {{ '}}' }} #http://localhost:8181/onos/v1/configuration/
+# body: "{{ '{{' }} item.config_params | to_json {{ '}}' }}"
+# body_format: json
+# method: POST
+# user: karaf
+# password: karaf
+# with_items: "component_configs"
+{% endif %}
+
{% if rest_configs %}
# Do this after services have been activated, or it will cause an exception.
# vOLT will re-read its net config; vbng may not.
diff --git a/xos/synchronizers/onos/steps/sync_onosservice.py b/xos/synchronizers/onos/steps/sync_onosservice.py
index 0474dc6..e70be0c 100644
--- a/xos/synchronizers/onos/steps/sync_onosservice.py
+++ b/xos/synchronizers/onos/steps/sync_onosservice.py
@@ -24,7 +24,7 @@
observes=ONOSService
requested_interval=0
template_name = "sync_onosservice.yaml"
- service_key_name = "/opt/xos/observers/onos/onos_key"
+ service_key_name = "/opt/xos/synchronizers/onos/onos_key"
def __init__(self, *args, **kwargs):
super(SyncONOSService, self).__init__(*args, **kwargs)
diff --git a/xos/synchronizers/onos/steps/sync_onosservice.yaml b/xos/synchronizers/onos/steps/sync_onosservice.yaml
index fd9c3db..a51fde5 100644
--- a/xos/synchronizers/onos/steps/sync_onosservice.yaml
+++ b/xos/synchronizers/onos/steps/sync_onosservice.yaml
@@ -52,7 +52,7 @@
- "9876:9876"
- name: Get Docker IP
- script: /opt/xos/observers/onos/scripts/dockerip.sh {{ ONOS_container }}
+ script: /opt/xos/synchronizers/onos/scripts/dockerip.sh {{ ONOS_container }}
register: dockerip
- name: Wait for ONOS to come up
diff --git a/xos/synchronizers/onos/supervisor/onos-observer.conf b/xos/synchronizers/onos/supervisor/onos-observer.conf
index 36e00d9..995644e 100644
--- a/xos/synchronizers/onos/supervisor/onos-observer.conf
+++ b/xos/synchronizers/onos/supervisor/onos-observer.conf
@@ -4,6 +4,6 @@
nodaemon=true
[program:synchronizer]
-command=python /opt/xos/observers/onos/onos-observer.py -C /opt/xos/observers/onos/onos_observer_config
+command=python /opt/xos/synchronizers/onos/onos-synchronizer.py -C /opt/xos/synchronizers/onos/onos_synchronizer_config
stderr_logfile=/var/log/supervisor/synchronizer.err.log
stdout_logfile=/var/log/supervisor/synchronizer.out.log
diff --git a/xos/synchronizers/openstack/steps/sync_container.yaml b/xos/synchronizers/openstack/steps/sync_container.yaml
index 77e57cd..82588dc 100644
--- a/xos/synchronizers/openstack/steps/sync_container.yaml
+++ b/xos/synchronizers/openstack/steps/sync_container.yaml
@@ -90,16 +90,16 @@
register: systemctl
- name: container upstart
- template: src=/opt/xos/openstack_observer/templates/container.conf.j2 dest=/etc/init/container-{{ container_name }}.conf
+ template: src=/opt/xos/synchronizers/openstack/templates/container.conf.j2 dest=/etc/init/container-{{ container_name }}.conf
- name: container systemd
- template: src=/opt/xos/openstack_observer/templates/container.service.j2 dest=/lib/systemd/system/container-{{ container_name }}.service
+ template: src=/opt/xos/synchronizers/openstack/templates/container.service.j2 dest=/lib/systemd/system/container-{{ container_name }}.service
- name: container startup script
- template: src=/opt/xos/openstack_observer/templates/start-container.sh.j2 dest=/usr/local/sbin/start-container-{{ container_name }}.sh mode=0755
+ template: src=/opt/xos/synchronizers/openstack/templates/start-container.sh.j2 dest=/usr/local/sbin/start-container-{{ container_name }}.sh mode=0755
- name: container teardown script
- template: src=/opt/xos/openstack_observer/templates/stop-container.sh.j2 dest=/usr/local/sbin/stop-container-{{ container_name }}.sh mode=0755
+ template: src=/opt/xos/synchronizers/openstack/templates/stop-container.sh.j2 dest=/usr/local/sbin/stop-container-{{ container_name }}.sh mode=0755
- name: restart systemd
shell: systemctl daemon-reload
diff --git a/xos/synchronizers/openstack/xos-synchronizer.py b/xos/synchronizers/openstack/xos-synchronizer.py
index 3fffd33..493b94a 100644
--- a/xos/synchronizers/openstack/xos-synchronizer.py
+++ b/xos/synchronizers/openstack/xos-synchronizer.py
@@ -8,7 +8,7 @@
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
from synchronizers.base.backend import Backend
from xos.config import Config, DEFAULT_CONFIG_FN
-from core.models import Instance
+from core.models import Instance,NetworkTemplate
from xos.logger import Logger, logging, logger
from django.db import ProgrammingError
import time
@@ -67,9 +67,12 @@
while not models_active:
try:
_ = Instance.objects.first()
+ _ = NetworkTemplate.objects.first()
models_active = True
- except ProgrammingError:
+ except Exception,e:
+ logger.info(str(e))
logger.info('Waiting for data model to come up before starting...')
+ time.sleep(10)
wait = True
if (wait):
diff --git a/xos/synchronizers/vbng/run.sh b/xos/synchronizers/vbng/run.sh
index efb586f..de3ed7c 100755
--- a/xos/synchronizers/vbng/run.sh
+++ b/xos/synchronizers/vbng/run.sh
@@ -3,4 +3,4 @@
#fi
export XOS_DIR=/opt/xos
-python vbng-observer.py -C $XOS_DIR/observers/vbng/vbng_observer_config
+python vbng-synchronizer.py -C $XOS_DIR/synchronizers/vbng/vbng_synchronizer_config
diff --git a/xos/synchronizers/vbng/start.sh b/xos/synchronizers/vbng/start.sh
index 98008f4..9553610 100755
--- a/xos/synchronizers/vbng/start.sh
+++ b/xos/synchronizers/vbng/start.sh
@@ -3,4 +3,4 @@
#fi
export XOS_DIR=/opt/xos
-nohup python vbng-observer.py -C $XOS_DIR/observers/vbng/vbng_observer_config > /dev/null 2>&1 &
+nohup python vbng-synchronizer.py -C $XOS_DIR/synchronizers/vbng/vbng_synchronizer_config > /dev/null 2>&1 &
diff --git a/xos/synchronizers/vbng/supervisor/vbng-observer.conf b/xos/synchronizers/vbng/supervisor/vbng-observer.conf
index cff77b8..a999318 100644
--- a/xos/synchronizers/vbng/supervisor/vbng-observer.conf
+++ b/xos/synchronizers/vbng/supervisor/vbng-observer.conf
@@ -1,2 +1,2 @@
[program:vbng-observer]
-command=python /opt/xos/observers/vbng/vbng-observer.py -C /opt/xos/observers/vbng/vbng_observer_config
+command=python /opt/xos/synchronizers/vbng/vbng-synchronizer.py -C /opt/xos/synchronizers/vbng/vbng_synchronizer_config
diff --git a/xos/synchronizers/vcpe/run.sh b/xos/synchronizers/vcpe/run.sh
index f180e66..f7c670d 100755
--- a/xos/synchronizers/vcpe/run.sh
+++ b/xos/synchronizers/vcpe/run.sh
@@ -3,4 +3,4 @@
#fi
export XOS_DIR=/opt/xos
-python vcpe-observer.py -C $XOS_DIR/observers/vcpe/vcpe_observer_config
+python vcpe-synchronizer.py -C $XOS_DIR/synchronizers/vcpe/vcpe_synchronizer_config
diff --git a/xos/synchronizers/vcpe/start.sh b/xos/synchronizers/vcpe/start.sh
index b402e5d..dc5619b 100755
--- a/xos/synchronizers/vcpe/start.sh
+++ b/xos/synchronizers/vcpe/start.sh
@@ -3,4 +3,4 @@
#fi
export XOS_DIR=/opt/xos
-nohup python vcpe-observer.py -C $XOS_DIR/observers/vcpe/vcpe_observer_config > /dev/null 2>&1 &
+nohup python vcpe-synchronizer.py -C $XOS_DIR/synchronizers/vcpe/vcpe_synchronizer_config > /dev/null 2>&1 &
diff --git a/xos/synchronizers/vcpe/steps/sync_vcpetenant.py b/xos/synchronizers/vcpe/steps/sync_vcpetenant.py
index 691671a..f0e9301 100644
--- a/xos/synchronizers/vcpe/steps/sync_vcpetenant.py
+++ b/xos/synchronizers/vcpe/steps/sync_vcpetenant.py
@@ -30,7 +30,7 @@
observes=VCPETenant
requested_interval=0
template_name = "sync_vcpetenant.yaml"
- service_key_name = "/opt/xos/observers/vcpe/vcpe_private_key"
+ service_key_name = "/opt/xos/synchronizers/vcpe/vcpe_private_key"
def __init__(self, *args, **kwargs):
super(SyncVCPETenant, self).__init__(*args, **kwargs)
diff --git a/xos/synchronizers/vcpe/steps/sync_vcpetenant.yaml b/xos/synchronizers/vcpe/steps/sync_vcpetenant.yaml
index fdc21da..b9b4b9e 100644
--- a/xos/synchronizers/vcpe/steps/sync_vcpetenant.yaml
+++ b/xos/synchronizers/vcpe/steps/sync_vcpetenant.yaml
@@ -58,7 +58,7 @@
tasks:
{% if full_setup %}
- name: Docker repository
- copy: src=/opt/xos/observers/vcpe/files/docker.list
+ copy: src=/opt/xos/synchronizers/vcpe/files/docker.list
dest=/etc/apt/sources.list.d/docker.list
- name: Import the repository key
@@ -90,7 +90,7 @@
shell: rm -f /etc/resolv.conf
- name: Install resolv.conf
- copy: src=/opt/xos/observers/vcpe/files/vm-resolv.conf
+ copy: src=/opt/xos/synchronizers/vcpe/files/vm-resolv.conf
dest=/etc/resolv.conf
- name: Verify if vcpe_stats_notifier ([] is to avoid capturing the shell process) cron job is already running
@@ -105,7 +105,7 @@
when: cron_job_pids_count.stdout == "0"
- name: Copy cron job to destination
- copy: src=/opt/xos/observers/vcpe/vcpe_stats_notifier.py
+ copy: src=/opt/xos/synchronizers/vcpe/vcpe_stats_notifier.py
dest=~/bin/vcpe_stats_notifier.py
when: cron_job_pids_count.stdout == "0"
@@ -121,10 +121,10 @@
{% endif %}
- name: vCPE upstart
- template: src=/opt/xos/observers/vcpe/templates/vcpe.conf.j2 dest=/etc/init/vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}.conf
+ template: src=/opt/xos/synchronizers/vcpe/templates/vcpe.conf.j2 dest=/etc/init/vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}.conf
- name: vCPE startup script
- template: src=/opt/xos/observers/vcpe/templates/start-vcpe.sh.j2 dest=/usr/local/sbin/start-vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}.sh mode=0755
+ template: src=/opt/xos/synchronizers/vcpe/templates/start-vcpe.sh.j2 dest=/usr/local/sbin/start-vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}.sh mode=0755
notify:
# - restart vcpe
- stop vcpe
@@ -135,22 +135,22 @@
file: path=/etc/vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}/dnsmasq.d state=directory owner=root group=root
- name: vCPE basic dnsmasq config
- copy: src=/opt/xos/observers/vcpe/files/vcpe.dnsmasq dest=/etc/vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}/dnsmasq.d/vcpe.conf owner=root group=root
+ copy: src=/opt/xos/synchronizers/vcpe/files/vcpe.dnsmasq dest=/etc/vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}/dnsmasq.d/vcpe.conf owner=root group=root
notify:
- restart dnsmasq
- name: dnsmasq config
- template: src=/opt/xos/observers/vcpe/templates/dnsmasq_servers.j2 dest=/etc/vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}/dnsmasq.d/servers.conf owner=root group=root
+ template: src=/opt/xos/synchronizers/vcpe/templates/dnsmasq_servers.j2 dest=/etc/vcpe-{{ s_tags[0] }}-{{ c_tags[0] }}/dnsmasq.d/servers.conf owner=root group=root
notify:
- restart dnsmasq
# These are samples, not necessary for correct function of demo
# - name: networking info
-# template: src=/opt/xos/observers/vcpe/templates/vlan_sample.j2 dest=/etc/vlan_sample owner=root group=root
+# template: src=/opt/xos/synchronizers/vcpe/templates/vlan_sample.j2 dest=/etc/vlan_sample owner=root group=root
# - name: firewall info
-# template: src=/opt/xos/observers/vcpe/templates/firewall_sample.j2 dest=/etc/firewall_sample owner=root group=root
+# template: src=/opt/xos/synchronizers/vcpe/templates/firewall_sample.j2 dest=/etc/firewall_sample owner=root group=root
- name: Make sure vCPE service is running
service: name=vcpe-{{ s_tags[0] }}-{{ c_tags[0] }} state=started
diff --git a/xos/synchronizers/vcpe/steps/sync_vcpetenant_new.yaml b/xos/synchronizers/vcpe/steps/sync_vcpetenant_new.yaml
index 6c7166f..59047c1 100644
--- a/xos/synchronizers/vcpe/steps/sync_vcpetenant_new.yaml
+++ b/xos/synchronizers/vcpe/steps/sync_vcpetenant_new.yaml
@@ -69,7 +69,7 @@
when: cron_job_pids_count.stdout == "0"
- name: Copy cron job to destination
- copy: src=/opt/xos/observers/vcpe/vcpe_stats_notifier.py
+ copy: src=/opt/xos/synchronizers/vcpe/vcpe_stats_notifier.py
dest=~/bin/vcpe_stats_notifier.py
when: cron_job_pids_count.stdout == "0"
@@ -84,12 +84,12 @@
when: cron_job_pids_count.stdout == "0"
- name: vCPE basic dnsmasq config
- copy: src=/opt/xos/observers/vcpe/files/vcpe.dnsmasq dest=/var/container_volumes/{{ container_name }}/etc/dnsmasq.d/vcpe.conf owner=root group=root
+ copy: src=/opt/xos/synchronizers/vcpe/files/vcpe.dnsmasq dest=/var/container_volumes/{{ container_name }}/etc/dnsmasq.d/vcpe.conf owner=root group=root
notify:
- restart dnsmasq
- name: dnsmasq config
- template: src=/opt/xos/observers/vcpe/templates/dnsmasq_servers.j2 dest=/var/container_volumes/{{ container_name }}/etc/dnsmasq.d/servers.conf owner=root group=root
+ template: src=/opt/xos/synchronizers/vcpe/templates/dnsmasq_servers.j2 dest=/var/container_volumes/{{ container_name }}/etc/dnsmasq.d/servers.conf owner=root group=root
notify:
- restart dnsmasq
@@ -97,22 +97,22 @@
file: path=/var/container_volumes/{{ container_name }}/etc/dnsmasq.d/safe state=directory
- name: dnsmasq "safe" config
- template: src=/opt/xos/observers/vcpe/templates/dnsmasq_safe_servers.j2 dest=/var/container_volumes/{{ container_name }}/etc/dnsmasq.d/safe/servers.conf owner=root group=root
+ template: src=/opt/xos/synchronizers/vcpe/templates/dnsmasq_safe_servers.j2 dest=/var/container_volumes/{{ container_name }}/etc/dnsmasq.d/safe/servers.conf owner=root group=root
notify:
- restart dnsmasq
- name: copy base ufw files
- synchronize: src=/opt/xos/observers/vcpe/files/etc/ufw/ dest=/var/container_volumes/{{ container_name }}/etc/ufw/
+ synchronize: src=/opt/xos/synchronizers/vcpe/files/etc/ufw/ dest=/var/container_volumes/{{ container_name }}/etc/ufw/
notify:
- reload ufw
- name: redirection rules for safe DNS
- template: src=/opt/xos/observers/vcpe/templates/before.rules.j2 dest=/var/container_volumes/{{ container_name }}/etc/ufw/before.rules owner=root group=root
+ template: src=/opt/xos/synchronizers/vcpe/templates/before.rules.j2 dest=/var/container_volumes/{{ container_name }}/etc/ufw/before.rules owner=root group=root
notify:
- reload ufw
- name: base ufw setup uses /etc/rc.local
- copy: src=/opt/xos/observers/vcpe/files/etc/rc.local dest=/var/container_volumes/{{ container_name }}/etc/ owner=root group=root
+ copy: src=/opt/xos/synchronizers/vcpe/files/etc/rc.local dest=/var/container_volumes/{{ container_name }}/etc/ owner=root group=root
notify:
- copy in /etc/rc.local
diff --git a/xos/synchronizers/vcpe/supervisor/vcpe-observer.conf b/xos/synchronizers/vcpe/supervisor/vcpe-observer.conf
index 27d2796..13d797a 100644
--- a/xos/synchronizers/vcpe/supervisor/vcpe-observer.conf
+++ b/xos/synchronizers/vcpe/supervisor/vcpe-observer.conf
@@ -1,2 +1,2 @@
[program:vcpe-observer]
-command=python /opt/xos/observers/vcpe/vcpe-observer.py -C /opt/xos/observers/vcpe/vcpe_observer_config
+command=python /opt/xos/synchronizers/vcpe/vcpe-synchronizer.py -C /opt/xos/synchronizers/vcpe/vcpe_synchronizer_config
diff --git a/xos/tosca/custom_types/xos.m4 b/xos/tosca/custom_types/xos.m4
index 30798d5..39e4d99 100644
--- a/xos/tosca/custom_types/xos.m4
+++ b/xos/tosca/custom_types/xos.m4
@@ -140,6 +140,12 @@
dependencies:
type: string
required: false
+ install_dependencies:
+ type: string
+ required: false
+ component_config:
+ type: string
+ required: false
config_addresses.json:
type: string
required: false
@@ -159,6 +165,12 @@
dependencies:
type: string
required: false
+ install_dependencies:
+ type: string
+ required: false
+ component_config:
+ type: string
+ required: false
config_network-cfg.json:
type: string
required: false
diff --git a/xos/tosca/custom_types/xos.yaml b/xos/tosca/custom_types/xos.yaml
index 63d7395..613db70 100644
--- a/xos/tosca/custom_types/xos.yaml
+++ b/xos/tosca/custom_types/xos.yaml
@@ -145,6 +145,12 @@
dependencies:
type: string
required: false
+ install_dependencies:
+ type: string
+ required: false
+ component_config:
+ type: string
+ required: false
tosca.nodes.ONOSvBNGApp:
derived_from: tosca.nodes.Root
@@ -162,6 +168,12 @@
dependencies:
type: string
required: false
+ install_dependencies:
+ type: string
+ required: false
+ component_config:
+ type: string
+ required: false
config_addresses.json:
type: string
required: false
@@ -188,6 +200,12 @@
dependencies:
type: string
required: false
+ install_dependencies:
+ type: string
+ required: false
+ component_config:
+ type: string
+ required: false
config_network-cfg.json:
type: string
required: false
diff --git a/xos/tosca/resources/CORDSubscriber.py b/xos/tosca/resources/CORDSubscriber.py
index 4097ca9..f013032 100644
--- a/xos/tosca/resources/CORDSubscriber.py
+++ b/xos/tosca/resources/CORDSubscriber.py
@@ -6,7 +6,7 @@
from translator.toscalib.tosca_template import ToscaTemplate
import pdb
-from core.models import User
+from core.models import User, TenantRootPrivilege, TenantRootRole
from services.cord.models import CordSubscriberRoot
from xosresource import XOSResource
@@ -17,7 +17,8 @@
copyin_props = ["service_specific_id", "firewall_enable", "url_filter_enable", "cdn_enable", "url_filter_level"]
def postprocess(self, obj):
- pass
+ rolemap = ( ("tosca.relationships.AdminPrivilege", "admin"), ("tosca.relationships.AccessPrivilege", "access"), )
+ self.postprocess_privileges(TenantRootRole, TenantRootPrivilege, rolemap, obj, "tenant_root")
def can_delete(self, obj):
return super(XOSCORDSubscriber, self).can_delete(obj)
diff --git a/xos/tosca/resources/onosapp.py b/xos/tosca/resources/onosapp.py
index 42cb0bf..5947400 100644
--- a/xos/tosca/resources/onosapp.py
+++ b/xos/tosca/resources/onosapp.py
@@ -14,7 +14,7 @@
class XOSONOSApp(XOSResource):
provides = ["tosca.nodes.ONOSApp", "tosca.nodes.ONOSvBNGApp", "tosca.nodes.ONOSvOLTApp", "tosca.nodes.ONOSVTNApp"]
xos_model = ONOSApp
- copyin_props = ["service_specific_id", "dependencies"]
+ copyin_props = ["service_specific_id", "dependencies", "install_dependencies"]
def get_xos_args(self, throw_exception=True):
args = super(XOSONOSApp, self).get_xos_args()
@@ -59,6 +59,8 @@
self.set_tenant_attr(obj, k, v)
elif k.startswith("rest_"):
self.set_tenant_attr(obj, k, v)
+ elif k.startswith("component_config"):
+ self.set_tenant_attr(obj, k, v)
def can_delete(self, obj):
return super(XOSONOSApp, self).can_delete(obj)
diff --git a/xos/tosca/resources/user.py b/xos/tosca/resources/user.py
index 724bc3d..8587c89 100644
--- a/xos/tosca/resources/user.py
+++ b/xos/tosca/resources/user.py
@@ -76,6 +76,24 @@
self.info("Created User '%s'" % (str(user), ))
+ def update(self, obj):
+ xos_args = self.get_xos_args()
+
+ password = None
+ if "password" in xos_args:
+ # password needs to be set with set_password function
+ password = xos_args["password"]
+ del xos_args["password"]
+
+ for (k,v) in xos_args.items():
+ setattr(obj, k, v)
+
+ if password:
+ obj.set_password(password)
+
+ self.postprocess(obj)
+ obj.save()
+
def delete(self, obj):
if obj.slices.exists():
self.info("User %s has active slices; skipping delete" % obj.name)
diff --git a/xos/tosca/resources/xosresource.py b/xos/tosca/resources/xosresource.py
index fa14380..cc4672b 100644
--- a/xos/tosca/resources/xosresource.py
+++ b/xos/tosca/resources/xosresource.py
@@ -103,10 +103,16 @@
def postprocess_privileges(self, roleclass, privclass, rolemap, obj, toFieldName):
for (rel, role) in rolemap:
for email in self.get_requirements(rel):
- role = self.get_xos_object(roleclass, role=role)
+ role_obj = self.get_xos_object(roleclass, throw_exception=False, role=role)
+ if not role_obj:
+ # if the role doesn't exist, make it
+ self.info("Creating %s %s" % (roleclass.__name__, role))
+ role_obj = roleclass(role=role)
+ role_obj.save()
+
user = self.get_xos_object(User, email=email)
- if not privclass.objects.filter(user=user, role=role, **{toFieldName: obj}):
- sp = privclass(user=user, role=role, **{toFieldName: obj})
+ if not privclass.objects.filter(user=user, role=role_obj, **{toFieldName: obj}):
+ sp = privclass(user=user, role=role_obj, **{toFieldName: obj})
sp.save()
self.info("Added privilege on %s role %s for %s" % (str(obj), str(role), str(user)))
diff --git a/xos/tosca/samples/cord.yaml b/xos/tosca/samples/cord.yaml
index 567ced0..a9baf25 100644
--- a/xos/tosca/samples/cord.yaml
+++ b/xos/tosca/samples/cord.yaml
@@ -70,8 +70,19 @@
node: mysite
relationship: tosca.relationships.MemberOfSite
- # Now let's add a subscriber
+ # Let's add a user who can be administrator of the household
+ johndoe@myhouse.com:
+ type: tosca.nodes.User
+ properties:
+ password: letmein
+ firstname: john
+ lastname: doe
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ # Now let's add a subscriber
My House:
type: tosca.nodes.CORDSubscriber
properties:
@@ -80,6 +91,10 @@
cdn_enable: true
url_filter_enable: true
url_filter_level: R
+ requirements:
+ - house_admin:
+ node: johndoe@myhouse.com
+ relationship: tosca.relationships.AdminPrivilege
Mom's PC:
type: tosca.nodes.CORDUser
@@ -137,3 +152,5 @@
+
+