diff --git a/views/ngXosLib/xosHelpers/src/xosHelpers.module.js b/views/ngXosLib/xosHelpers/src/xosHelpers.module.js
index 25600aa..d5b53da 100644
--- a/views/ngXosLib/xosHelpers/src/xosHelpers.module.js
+++ b/views/ngXosLib/xosHelpers/src/xosHelpers.module.js
@@ -3,7 +3,12 @@
 
     angular.module('bugSnag', []).factory('$exceptionHandler', function () {
       return function (exception, cause) {
-        Bugsnag.notifyException(exception, {diagnostics:{cause: cause}});
+        if( window.Bugsnag ){
+          Bugsnag.notifyException(exception, {diagnostics:{cause: cause}});
+        }
+        else{
+          console.error(exception, cause, exception.stack);
+        }
       };
     });
 
diff --git a/views/ngXosViews/diagnostic/package.json b/views/ngXosViews/diagnostic/package.json
index 5859db7..91845da 100644
--- a/views/ngXosViews/diagnostic/package.json
+++ b/views/ngXosViews/diagnostic/package.json
@@ -5,7 +5,7 @@
   "scripts": {
     "prestart": "npm install && bower install",
     "start": "gulp serve",
-    "dev": "NODE_ENV=local gulp serve",
+    "dev": "NODE_ENV=mock gulp serve",
     "prebuild": "npm install && bower install",
     "server": "easy-mocker -c ./mocks/diagnostic.conf.json -d ./mocks/data",
     "build": "gulp",
diff --git a/views/ngXosViews/mcordTopology/.bowerrc b/views/ngXosViews/mcordTopology/.bowerrc
deleted file mode 100644
index e491038..0000000
--- a/views/ngXosViews/mcordTopology/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "src/vendor/"
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/.eslintrc b/views/ngXosViews/mcordTopology/.eslintrc
deleted file mode 100644
index c852748..0000000
--- a/views/ngXosViews/mcordTopology/.eslintrc
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-    "ecmaFeatures": {
-        "blockBindings": true,
-        "forOf": true,
-        "destructuring": true,
-        "arrowFunctions": true,
-        "templateStrings": true
-    },
-    "env": { 
-        "browser": true,
-        "node": true,
-        "es6": true
-    },
-    "plugins": [
-        //"angular"
-    ],
-    "rules": {
-        "quotes": [2, "single"],
-        "camelcase": [1, {"properties": "always"}],
-        "no-underscore-dangle": 1,
-        "eqeqeq": [2, "smart"],
-        "no-alert": 1,
-        "key-spacing": [1, { "beforeColon": false, "afterColon": true }],
-        "indent": [2, 2],
-        "no-irregular-whitespace": 1,
-        "eol-last": 0,
-        "max-nested-callbacks": [2, 4],
-        "comma-spacing": [1, {"before": false, "after": true}],
-        "no-trailing-spaces": [1, { skipBlankLines: true }],
-        "no-unused-vars": [1, {"vars": "all", "args": "after-used"}],
-        "new-cap": 0,
-
-        //"angular/ng_module_name": [2, '/^xos\.*[a-z]*$/'],
-        //"angular/ng_controller_name": [2, '/^[a-z].*Ctrl$/'],
-        //"angular/ng_service_name": [2, '/^[A-Z].*Service$/'],
-        //"angular/ng_directive_name": [2, '/^[a-z]+[[A-Z].*]*$/'],
-        //"angular/ng_di": [0, "function or array"]
-    },
-    "globals" :{
-        "angular": true
-    } 
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/.gitignore b/views/ngXosViews/mcordTopology/.gitignore
deleted file mode 100644
index 567aee4..0000000
--- a/views/ngXosViews/mcordTopology/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-dist/
-src/vendor
-.tmp
-node_modules
-npm-debug.log
-dist/
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/bower.json b/views/ngXosViews/mcordTopology/bower.json
deleted file mode 100644
index cb9b543..0000000
--- a/views/ngXosViews/mcordTopology/bower.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "name": "xos-mcordTopology",
-  "version": "0.0.0",
-  "authors": [
-    "Matteo Scandolo <teo@onlab.us>"
-  ],
-  "description": "The mcordTopology view",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "static/js/vendor/",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "d3": "~3.5.16"
-  },
-  "devDependencies": {
-    "jquery": "2.1.4",
-    "angular-mocks": "1.4.7",
-    "angular": "1.4.7",
-    "angular-ui-router": "0.2.15",
-    "angular-cookies": "1.4.7",
-    "angular-resource": "1.4.7",
-    "ng-lodash": "0.3.0",
-    "bootstrap-css": "2.3.2"
-  }
-}
diff --git a/views/ngXosViews/mcordTopology/env/default.js b/views/ngXosViews/mcordTopology/env/default.js
deleted file mode 100644
index df86216..0000000
--- a/views/ngXosViews/mcordTopology/env/default.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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://clnode067.clemson.cloudlab.us:9999/',
-  xoscsrftoken: 'Pkq9PqoAsaMvrEiFAgxfw47IxTOtd0Y5',
-  xossessionid: 'qa1t49qeecdehofjkndqvxik71iwzfvf'
-};
diff --git a/views/ngXosViews/mcordTopology/env/mock.js b/views/ngXosViews/mcordTopology/env/mock.js
deleted file mode 100644
index 610ad78..0000000
--- a/views/ngXosViews/mcordTopology/env/mock.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  host: 'http://localhost:4000',
-  xoscsrftoken: 'Pkq9PqoAsaMvrEiFAgxfw47IxTOtd0Y5',
-  xossessionid: 'qa1t49qeecdehofjkndqvxik71iwzfvf'
-};
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/gulp/build.js b/views/ngXosViews/mcordTopology/gulp/build.js
deleted file mode 100644
index fb2cccb..0000000
--- a/views/ngXosViews/mcordTopology/gulp/build.js
+++ /dev/null
@@ -1,119 +0,0 @@
-'use strict';
-
-// BUILD
-//
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-//
-// The template are parsed and added to js with angular $templateCache
-
-var gulp = require('gulp');
-var ngAnnotate = require('gulp-ng-annotate');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var concat = require('gulp-concat');
-var del = require('del');
-var wiredep = require('wiredep');
-var angularFilesort = require('gulp-angular-filesort');
-var _ = require('lodash');
-var eslint = require('gulp-eslint');
-var inject = require('gulp-inject');
-var rename = require('gulp-rename');
-var replace = require('gulp-replace');
-
-var TEMPLATE_FOOTER = `}]);
-angular.module('xos.mcordTopology').run(function($location){$location.path('/')});
-angular.bootstrap(angular.element('#xosMcordTopology'), ['xos.mcordTopology']);`;
-
-module.exports = function(options){
-  
-  // delete previous builded file
-  gulp.task('clean', function(){
-    return del(
-      [options.dashboards + 'xosMcordTopology.html'],
-      {force: true}
-    );
-  });
-
-  // compile and minify scripts
-  gulp.task('scripts', function() {
-    return gulp.src([
-      options.tmp + '**/*.js'
-    ])
-    .pipe(ngAnnotate())
-    .pipe(angularFilesort())
-    .pipe(concat('xosMcordTopology.js'))
-    .pipe(uglify())
-    .pipe(gulp.dest(options.static + 'js/'));
-  });
-
-  // set templates in cache
-  gulp.task('templates', function(){
-    return gulp.src('./src/templates/*.html')
-      .pipe(templateCache({
-        module: 'xos.mcordTopology',
-        root: 'templates/',
-        templateFooter: TEMPLATE_FOOTER
-      }))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // copy html index to Django Folder
-  gulp.task('copyHtml', ['clean'], function(){
-    return gulp.src(options.src + 'index.html')
-      // remove dev dependencies from html
-      .pipe(replace(/<!-- bower:css -->(\n.*)*\n<!-- endbower --><!-- endcss -->/, ''))
-      .pipe(replace(/<!-- bower:js -->(\n.*)*\n<!-- endbower --><!-- endjs -->/, ''))
-      .pipe(replace(/ng-app=".*"\s/, ''))
-      // injecting minified files
-      .pipe(
-        inject(
-          gulp.src([
-            options.static + 'js/vendor/xosMcordTopologyVendor.js',
-            options.static + 'js/xosMcordTopology.js'
-          ]),
-          {ignorePath: '/../../../xos/core/xoslib'}
-        )
-      )
-      .pipe(rename('xosMcordTopology.html'))
-      .pipe(gulp.dest(options.dashboards));
-  });
-
-  // minify vendor js files
-  gulp.task('wiredep', function(){
-    var bowerDeps = wiredep().js;
-    if(!bowerDeps){
-      return;
-    }
-
-    // remove angular (it's already loaded)
-    _.remove(bowerDeps, function(dep){
-      return dep.indexOf('angular/angular.js') !== -1;
-    });
-
-    return gulp.src(bowerDeps)
-      .pipe(concat('xosMcordTopologyVendor.js'))
-      .pipe(uglify())
-      .pipe(gulp.dest(options.static + 'js/vendor/'));
-  });
-
-  gulp.task('lint', function () {
-    return gulp.src(['src/js/**/*.js'])
-      .pipe(eslint())
-      .pipe(eslint.format())
-      .pipe(eslint.failAfterError());
-  });
-
-  gulp.task('build', function() {
-    runSequence(
-      'templates',
-      'babel',
-      'scripts',
-      'wiredep',
-      'copyHtml',
-      'cleanTmp'
-    );
-  });
-};
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/gulp/server.js b/views/ngXosViews/mcordTopology/gulp/server.js
deleted file mode 100644
index 7605294..0000000
--- a/views/ngXosViews/mcordTopology/gulp/server.js
+++ /dev/null
@@ -1,146 +0,0 @@
-'use strict';
-
-var gulp = require('gulp');
-var browserSync = require('browser-sync').create();
-var inject = require('gulp-inject');
-var runSequence = require('run-sequence');
-var angularFilesort = require('gulp-angular-filesort');
-var babel = require('gulp-babel');
-var wiredep = require('wiredep').stream;
-var httpProxy = require('http-proxy');
-var del = require('del');
-
-const 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 = function(options){
-
-  // open in browser with sync and proxy to 0.0.0.0
-  gulp.task('browser', function() {
-    browserSync.init({
-      // reloadDelay: 500,
-      // logLevel: 'debug',
-      // logConnections: true,
-      startPath: '#/',
-      snippetOptions: {
-        rule: {
-          match: /<!-- browserSync -->/i
-        }
-      },
-      server: {
-        baseDir: options.src,
-        routes: {
-          '/api': options.api,
-          '/xosHelpers/src': options.helpers
-        },
-        middleware: function(req, res, next){
-          if(
-            req.url.indexOf('/xos/') !== -1 ||
-            req.url.indexOf('/xoslib/') !== -1 ||
-            req.url.indexOf('/hpcapi/') !== -1
-          ){
-            if(conf.xoscsrftoken && conf.xossessionid){
-              req.headers.cookie = `xoscsrftoken=${conf.xoscsrftoken}; xossessionid=${conf.xossessionid}`;
-              req.headers['x-csrftoken'] = conf.xoscsrftoken;
-            }
-            proxy.web(req, res);
-          }
-          else{
-            next();
-          }
-        }
-      }
-    });
-
-    gulp.watch(options.src + 'js/**/*.js', ['js-watch']);
-    gulp.watch(options.src + 'vendor/**/*.js', ['bower'], function(){
-      browserSync.reload();
-    });
-    gulp.watch(options.src + '**/*.html', function(){
-      browserSync.reload();
-    });
-  });
-
-  // transpile js with sourceMaps
-  gulp.task('babel', function(){
-    return gulp.src(options.scripts + '**/*.js')
-      .pipe(babel({sourceMaps: true}))
-      .pipe(gulp.dest(options.tmp));
-  });
-
-  // inject scripts
-  gulp.task('injectScript', ['cleanTmp', 'babel'], function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src([
-            options.tmp + '**/*.js',
-            options.api + '*.js',
-            options.helpers + '**/*.js'
-          ])
-          .pipe(angularFilesort()),
-          {
-            ignorePath: [options.src, '/../../ngXosLib']
-          }
-        )
-      )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject CSS
-  gulp.task('injectCss', function(){
-    return gulp.src(options.src + 'index.html')
-      .pipe(
-        inject(
-          gulp.src(options.src + 'css/*.css'),
-          {
-            ignorePath: [options.src]
-          }
-          )
-        )
-      .pipe(gulp.dest(options.src));
-  });
-
-  // inject bower dependencies with wiredep
-  gulp.task('bower', function () {
-    return gulp.src(options.src + 'index.html')
-    .pipe(wiredep({devDependencies: true}))
-    .pipe(gulp.dest(options.src));
-  });
-
-  gulp.task('js-watch', ['injectScript'], function(){
-    browserSync.reload();
-  });
-
-  gulp.task('cleanTmp', function(){
-    return del([options.tmp + '**/*']);
-  });
-
-  gulp.task('serve', function() {
-    runSequence(
-      'bower',
-      'injectScript',
-      'injectCss',
-      ['browser']
-    );
-  });
-};
diff --git a/views/ngXosViews/mcordTopology/gulpfile.js b/views/ngXosViews/mcordTopology/gulpfile.js
deleted file mode 100644
index b2cdab8..0000000
--- a/views/ngXosViews/mcordTopology/gulpfile.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-
-var gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
-  src: 'src/',
-  scripts: 'src/js/',
-  tmp: 'src/.tmp',
-  dist: 'dist/',
-  api: '../../ngXosLib/api/',
-  helpers: '../../ngXosLib/xosHelpers/src/',
-  static: '../../../xos/core/xoslib/static/', // this is the django static folder
-  dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
-  require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
-  gulp.start('build');
-});
diff --git a/views/ngXosViews/mcordTopology/karma.conf.js b/views/ngXosViews/mcordTopology/karma.conf.js
deleted file mode 100644
index 83d3f63..0000000
--- a/views/ngXosViews/mcordTopology/karma.conf.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// Karma configuration
-// Generated on Tue Oct 06 2015 09:27:10 GMT+0000 (UTC)
-
-/* eslint indent: [2,2], quotes: [2, "single"]*/
-
-/*eslint-disable*/
-var wiredep = require('wiredep');
-var path = require('path');
-
-var bowerComponents = wiredep( {devDependencies: true} )[ 'js' ].map(function( file ){
-  return path.relative(process.cwd(), file);
-});
-
-module.exports = function(config) {
-/*eslint-enable*/
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: '',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: bowerComponents.concat([
-      '../../static/js/xosApi.js',
-      '../../static/js/vendor/ngXosHelpers.js',
-      'src/js/**/*.js',
-      'spec/**/*.mock.js',
-      'spec/**/*.test.js',
-      'src/**/*.html'
-    ]),
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-      'src/js/**/*.js': ['babel'],
-      'spec/**/*.test.js': ['babel'],
-      'src/**/*.html': ['ng-html2js']
-    },
-
-    ngHtml2JsPreprocessor: {
-      stripPrefix: 'src/', //strip the src path from template url (http://stackoverflow.com/questions/22869668/karma-unexpected-request-when-testing-angular-directive-even-with-ng-html2js)
-      moduleName: 'templates' // define the template module name
-    },
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['mocha'],
-
-
-    // web server port
-    port: 9876,
-
-
-    // enable / disable colors in the output (reporters and logs)
-    colors: true,
-
-
-    // level of logging
-    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
-    logLevel: config.LOG_INFO,
-
-
-    // enable / disable watching file and executing tests whenever any file changes
-    autoWatch: true,
-
-
-    // start these browsers
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['PhantomJS'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/views/ngXosViews/mcordTopology/mocks/data/instances.json b/views/ngXosViews/mcordTopology/mocks/data/instances.json
deleted file mode 100644
index 572c775..0000000
--- a/views/ngXosViews/mcordTopology/mocks/data/instances.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
-  {
-    "id": 1,
-    "humanReadableName": "BBU_service_instance-1",
-    "instance_id": "instance-00000001", 
-    "instance_uuid": "42b75cb7-7205-4a68-9100-b2c1e3ea69b5", 
-    "name": "BBU_service_instance-1", 
-    "instance_name": "mysite_BBU-1", 
-    "ip": "130.127.133.91"
-  },
-  {
-    "id": 2,
-    "humanReadableName": "BBU_service_instance-2",
-    "instance_id": "instance-00000002", 
-    "instance_uuid": "42b75cb7-7205-4a68-9200-b2c2e3ea69b5", 
-    "name": "BBU_service_instance-2", 
-    "instance_name": "mysite_BBU-2", 
-    "ip": "130.127.133.92"
-  },
-  {
-    "id": 5,
-    "humanReadableName": "vsg_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "vsg_service_instance-4", 
-    "instance_name": "mysite_vsg-4", 
-    "ip": "130.127.133.94"
-  },
-  {
-    "id": 6,
-    "humanReadableName": "MME_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "MME_service_instance-4", 
-    "instance_name": "mysite_MME-4", 
-    "ip": "130.127.133.94"
-  },
-  {
-    "id": 7,
-    "humanReadableName": "SGW_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "SGW_service_instance-4", 
-    "instance_name": "mysite_SGW-4", 
-    "ip": "130.127.133.94"
-  },
-  {
-    "id": 8,
-    "humanReadableName": "PGW_service_instance-4",
-    "instance_id": "instance-00000004", 
-    "instance_uuid": "44b75cb7-7405-4a68-9400-b4c4e3ea69b5", 
-    "name": "PGW_service_instance-4", 
-    "instance_name": "mysite_PGW-4", 
-    "ip": "130.127.133.94"
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/mocks/mcord.conf.json b/views/ngXosViews/mcordTopology/mocks/mcord.conf.json
deleted file mode 100644
index 7246775..0000000
--- a/views/ngXosViews/mcordTopology/mocks/mcord.conf.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
-  {
-    "url": "instances",
-    "base": "xos/",
-    "methods": ["GET", "POST"],
-    "param": "id"
-  }
-]
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/package.json b/views/ngXosViews/mcordTopology/package.json
deleted file mode 100644
index b2606c2..0000000
--- a/views/ngXosViews/mcordTopology/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "name": "xos-mcordTopology",
-  "version": "1.0.0",
-  "description": "Angular Application for XOS, created with generator-xos",
-  "scripts": {
-    "prestart": "npm install && bower install",
-    "start": "gulp serve",
-    "prebuild": "npm install && bower install",
-    "build": "gulp",
-    "test": "karma start",
-    "lint": "eslint src/js/",
-    "mocks": "easy-mocker -c ./mocks/mcord.conf.json -d ./mocks/data",
-    "dev": "NODE_ENV=mock gulp serve"
-  },
-  "keywords": [
-    "XOS",
-    "Angular",
-    "XOSlib"
-  ],
-  "author": "Matteo Scandolo",
-  "license": "MIT",
-  "dependencies": {},
-  "devDependencies": {
-    "browser-sync": "^2.9.11",
-    "del": "^2.0.2",
-    "easy-mocker": "^1.2.0",
-    "eslint": "^1.8.0",
-    "eslint-plugin-angular": "linkmesrl/eslint-plugin-angular",
-    "gulp": "^3.9.0",
-    "gulp-angular-filesort": "^1.1.1",
-    "gulp-angular-templatecache": "^1.8.0",
-    "gulp-babel": "^5.3.0",
-    "gulp-concat": "^2.6.0",
-    "gulp-eslint": "^1.0.0",
-    "gulp-inject": "^3.0.0",
-    "gulp-minify-html": "^1.0.4",
-    "gulp-ng-annotate": "^1.1.0",
-    "gulp-rename": "^1.2.2",
-    "gulp-replace": "^0.5.4",
-    "gulp-uglify": "^1.4.2",
-    "http-proxy": "^1.12.0",
-    "lodash": "^3.10.1",
-    "proxy-middleware": "^0.15.0",
-    "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta",
-    "wrench": "^1.5.8"
-  }
-}
diff --git a/views/ngXosViews/mcordTopology/spec/sample.test.js b/views/ngXosViews/mcordTopology/spec/sample.test.js
deleted file mode 100644
index ecc17a0..0000000
--- a/views/ngXosViews/mcordTopology/spec/sample.test.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.mcordTopology'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/xos/users/?no_hyperlinks=1').respond([
-      {
-        email: 'teo@onlab.us',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  it('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('teo@onlab.us');
-    expect(isolatedScope.users[0].firstname).toEqual('Matteo');
-    expect(isolatedScope.users[0].lastname).toEqual('Scandolo');
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/css/dev.css b/views/ngXosViews/mcordTopology/src/css/dev.css
deleted file mode 100644
index 32d915d..0000000
--- a/views/ngXosViews/mcordTopology/src/css/dev.css
+++ /dev/null
@@ -1,7 +0,0 @@
-#xosMcordTopology{
-  position: absolute;
-  /*top: 100px;
-  left: 200px;*/
-  width: 100%;
-  height: 100%;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/css/mcord.css b/views/ngXosViews/mcordTopology/src/css/mcord.css
deleted file mode 100644
index 68cca28..0000000
--- a/views/ngXosViews/mcordTopology/src/css/mcord.css
+++ /dev/null
@@ -1,62 +0,0 @@
-[ui-view],
-m-cord-topology{
-  width: 100%;
-  height: 100%;
-  display: block;
-}
-
-line {
-  stroke: blue;
-  stroke-width: 1;
-}
-
-line.big{
-  stroke-width: 2;
-}
-
-circle,
-rect {
-  fill: #fff;
-  stroke-width: 1; 
-}
-
-.fabric {
-  stroke: none;
-  fill: #123456;
-  fill-rule: evenodd;
-}
-
-.fabric-container {
-  fill: transparent;
-  stroke: #000;
-  stroke-width: 1;
-}
-
-.bbu {
-  stroke: black;
-  fill: #FF7F0E;
-}
-
-.rru {
-  stroke: #000;
-  fill: #FFBB78;
-}
-
-.rru-shadow {
-  fill: #FFBB78;
-  opacity: .4
-}
-
-.MME, .SGW, .PGW {
-  fill: purple;
-  stroke: #000;
-}
-
-.bbu text, 
-.MME text,
-.SGW text,
-.PGW text {
-  font-size: 10px;
-  stroke-width: 0;
-  fill: #000;
-}
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/index.html b/views/ngXosViews/mcordTopology/src/index.html
deleted file mode 100644
index 691a869..0000000
--- a/views/ngXosViews/mcordTopology/src/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.css" />
-<!-- endbower --><!-- endcss -->
-<!-- inject:css -->
-<link rel="stylesheet" href="/css/dev.css">
-<link rel="stylesheet" href="/css/mcord.css">
-<!-- endinject -->
-
-<div ng-app="xos.mcordTopology" id="xosMcordTopology">
-    <div ui-view></div>
-</div>
-
-<!-- bower:js -->
-<script src="vendor/d3/d3.js"></script>
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/ng-lodash/build/ng-lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.js"></script>
-<!-- endbower --><!-- endjs -->
-<!-- inject:js -->
-<script src="/xosHelpers/src/xosHelpers.module.js"></script>
-<script src="/xosHelpers/src/services/noHyperlinks.interceptor.js"></script>
-<script src="/xosHelpers/src/services/csrfToken.interceptor.js"></script>
-<script src="/xosHelpers/src/services/api.services.js"></script>
-<script src="/api/ng-xoslib.js"></script>
-<script src="/api/ng-xos.js"></script>
-<script src="/api/ng-hpcapi.js"></script>
-<script src="/.tmp/main.js"></script>
-<script src="/.tmp/static.data.js"></script>
-<script src="/.tmp/node_drawer.js"></script>
-<!-- endinject -->
diff --git a/views/ngXosViews/mcordTopology/src/js/main.js b/views/ngXosViews/mcordTopology/src/js/main.js
deleted file mode 100644
index bf57f1d..0000000
--- a/views/ngXosViews/mcordTopology/src/js/main.js
+++ /dev/null
@@ -1,296 +0,0 @@
-'use strict';
-
-angular.module('xos.mcordTopology', [
-  'ngResource',
-  'ngCookies',
-  'ngLodash',
-  'ui.router',
-  'xos.helpers'
-])
-.config(($stateProvider) => {
-  $stateProvider
-  .state('topology', {
-    url: '/',
-    template: '<m-cord-topology></m-cord-topology>'
-  });
-})
-.config(function($httpProvider){
-  $httpProvider.interceptors.push('NoHyperlinks');
-})
-.directive('mCordTopology', function(){
-  return {
-    restrict: 'E',
-    scope: {},
-    bindToController: true,
-    controllerAs: 'vm',
-    template: '',
-    controller: function($element, $interval, XosApi, lodash, TopologyElements, NodeDrawer){
-
-      const el = $element[0];
-
-      let nodes = [];
-      let links = [];
-
-      const filterBBU = (instances) => {
-        return lodash.filter(instances, i => i.name.indexOf('BBU') >= 0);
-      };
-
-      const filterOthers = (instances) => {
-        return lodash.filter(instances, i => {
-          return (i.name.indexOf('MME') >= 0)
-          || (i.name.indexOf('SGW') >= 0)
-          || (i.name.indexOf('PGW') >= 0)
-        });
-      };
-
-      // retrieving instances list
-      const getData = () => {
-
-        nodes = TopologyElements.nodes;
-        links = TopologyElements.links;
-
-        XosApi.Instance_List_GET()
-        .then((instances) => {
-          addBbuNodes(filterBBU(instances));
-          addOtherNodes(filterOthers(instances));
-
-          draw(svg, nodes, links);
-        })
-        .catch((e) => {
-          throw new Error(e);
-        });
-      };
-
-      const force = d3.layout.force();
-
-      // create svg elements
-      const svg = d3.select(el)
-        .append('svg')
-        .style('width', `${el.clientWidth}px`)
-        .style('height', `${el.clientHeight}px`);
-
-      const linkContainer = svg.append('g')
-        .attr({
-          class: 'link-container'
-        });
-
-      const nodeContainer = svg.append('g')
-        .attr({
-          class: 'node-container'
-        });
-
-      // replace human readable ids with d3 ids
-      // NOTE now ids are not manatined on update...
-      const buildLinks = (links, nodes) => {
-        return links.map((l) => {
-
-
-          let source = lodash.findIndex(nodes, {id: l.source});
-          let target = lodash.findIndex(nodes, {id: l.target});
-          // console.log(`link-${source}-${target}`, source, target);
-          return {
-            source: source,
-            target: target,
-            value: 1,
-            id: `link-${source}-${target}`,
-            type: l.source.indexOf('fabric') >= 0 ? 'big':'small'
-          };
-
-        });
-      };
-
-      // find fabric nodes and center horizontally
-      const positionFabricNodes = (nodes) => {
-        return lodash.map(nodes, n => {
-          if(n.type !== 'fabric'){
-            return n;
-          }
-
-          n.x = n.x * hStep;
-          n.y = n.y * vStep;
-
-          return n;
-        });
-      };
-
-      const addBbuNodes = (instances) => {
-
-        // calculate bbu hStep
-        let bbuHStep = ((el.clientWidth / 2) / (instances.length + 1));
-
-        // create nodes
-        let bbuNodes = instances.map((n, i) => {
-          return {
-            type: 'bbu',
-            name: n.name,
-            id: `bbu-${n.id}`,
-            fixed: true,
-            y: vStep * 3,
-            x: bbuHStep * (i + 1)
-          };
-        });
-
-        // create links
-        let bbuLinks = bbuNodes.map(n => {
-          return {
-            source: n.id,
-            target: 'fabric2'
-          };
-        });
-
-        // fake RRU nodes and links
-        instances.forEach((n, i) => {
-          bbuNodes.push({
-            type: 'rru',
-            name: 'rru',
-            id: `rru-${n.id}`,
-            fixed: true,
-            y: vStep * 4,
-            x: bbuHStep * (i + 1)
-          });
-
-          bbuLinks.push({
-            source: `rru-${n.id}`,
-            target: `bbu-${n.id}`
-          });
-        })
-
-        nodes = nodes.concat(bbuNodes);
-
-
-        links = links.concat(bbuLinks);
-      };
-
-      // add MME, PGW, SGW nodes
-      const addOtherNodes = (instances) => {
-        let hStep = ((el.clientWidth / 2) / (instances.length + 1));
-
-        // create nodes
-        let otherNodes = instances.map((n, i) => {
-          return {
-            type: n.name.substring(0, 3),
-            name: n.name,
-            id: `${n.name.substring(0, 3)}-${n.id}`,
-            fixed: true,
-            y: vStep * 3,
-            x: (el.clientWidth / 2) + (hStep * (i + 1))
-          };
-        });
-
-        // create links
-        let otherLinks = otherNodes.map(n => {
-          return {
-            source: n.id,
-            target: 'fabric4'
-          };
-        });
-
-
-        nodes = nodes.concat(otherNodes);
-        links = links.concat(otherLinks);
-      }
-
-      let hStep, vStep;
-
-      hStep = el.clientWidth / 3;
-      vStep = el.clientHeight / 5;
-
-      const draw = (svg, nodes, links) => {
-
-        hStep = el.clientWidth / 3;
-        vStep = el.clientHeight / 5;
-
-        links = buildLinks(links, nodes);
-
-        nodes = positionFabricNodes(nodes);
-
-
-        // start force layout
-        force
-          .nodes(nodes)
-          .links(links)
-          .size([el.clientWidth, el.clientHeight])
-          .charge(-20)
-          .chargeDistance(200)
-          .linkDistance(80)
-          .linkStrength(0.1)
-          .start();
-
-
-        const linkContainer = d3.select('.link-container');
-        const nodeContainer = d3.select('.node-container');
-
-        NodeDrawer.drawFabricBox(nodeContainer, hStep, vStep);
-
-        // draw links
-        var link = linkContainer.selectAll('.link')
-          .data(links, d => d.id);
-        
-        link.enter().append('line')
-          .attr({
-            // class: 'link',
-            id: d => d.id,
-            opacity: 0,
-            class: d => `link ${d.type}`
-          })
-          .transition()
-          .duration(1000)
-          // .delay((d, i) => 50 * i)
-          .attr({
-            opacity: 1
-          });
-
-        link.exit()
-        .remove();
-
-        //draw nodes
-        var node = nodeContainer.selectAll('.node')
-          .data(nodes, d => {
-            return d.id
-          });
-        
-        // append a group for any new node
-        var enter = node.enter()
-          .append('g', d => d.interfaceCfgIdentifier)
-          .attr({
-            class: d => `${d.type} node`,
-            transform: d => `translate(${d.x}, ${d.y})`
-          });
-
-        // draw nodes
-        NodeDrawer.drawBbus(enter.filter('.bbu'))
-        NodeDrawer.drawRrus(enter.filter('.rru'))
-        NodeDrawer.drawFabric(enter.filter('.fabric'))
-        NodeDrawer.drawOthers(enter.filter(d => {
-          return (
-            d.type  === 'MME' ||
-            d.type === 'SGW' ||
-            d.type === 'PGW'
-          )
-        }));
-
-        // remove nodes
-        var exit = node.exit();
-
-        NodeDrawer.removeElements(exit);
-
-        force.on('tick', function() {
-          link
-            .attr('x1', d => d.source.x )
-            .attr('y1', d => d.source.y )
-            .attr('x2', d => d.target.x )
-            .attr('y2', d => d.target.y );
-
-          node.attr('transform', (d) => `translate(${d.x},${d.y})`);
-        });
-      };
-      
-      $interval(() => {
-        getData();
-      }, 5000);
-      getData();
-
-      
-    }
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/js/node_drawer.js b/views/ngXosViews/mcordTopology/src/js/node_drawer.js
deleted file mode 100644
index 14bdf99..0000000
--- a/views/ngXosViews/mcordTopology/src/js/node_drawer.js
+++ /dev/null
@@ -1,167 +0,0 @@
-'use strict';
-
-angular.module('xos.mcordTopology')
-.service('NodeDrawer', function(TopologyElements){
-
-  const duration = 500;
-
-  let isFabricDrawed = false;
-
-  this.drawFabricBox = (svg, hStep, vStep) => {
-
-    if(isFabricDrawed){
-      return;
-    }
-
-    let fabric = svg.append('g')
-    .attr({
-      transform: `translate(${hStep - 25}, ${vStep - 25})`
-    });
-
-    fabric.append('rect')
-      .attr({
-        width: hStep + 50,
-        height: vStep + 50,
-        class: 'fabric-container'
-      });
-
-    fabric.append('text')
-    .text('Fabric')
-    .attr({
-      'text-anchor': 'middle',
-      x: ((hStep + 50) / 2),
-      y: -10
-    });
-
-    isFabricDrawed = true;
-  };
-
-  this.drawBbus = (nodes) => {
-
-    nodes.append('circle')
-      .attr({
-        class: d => d.type,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 15,
-        opacity: 1
-      });
-
-    nodes.append('text')
-    .attr({
-      'text-anchor': 'start',
-      y: 17,
-      x: 17,
-      opacity: 0
-    })
-    .text(d => `BBU ${d.name.substr(d.name.length - 1, 1)}`)
-    .transition()
-    .duration(duration * 2)
-    .attr({
-      opacity: 1
-    });
-  };
-
-  this.drawRrus = (nodes) => {
-
-    nodes.append('circle')
-      .attr({
-        class: d => `${d.type}-shadow`,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration * 2)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 30,
-        opacity: 1
-      });
-  
-    nodes.append('circle')
-      .attr({
-        class: d => d.type,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 10,
-        opacity: 1
-      });
-  };
-
-  this.drawFabric = (nodes) => {
-    nodes
-      .append('rect')
-      .attr({
-        width: 30,
-        height: 30,
-        x: -15,
-        y: -15
-      });
-
-    nodes
-      .append('path')
-      .attr({
-        class: d => d.type,
-        opacity: 0,
-        d: () => TopologyElements.icons.switch,
-        transform: `translate(-22, -22), scale(0.4)`
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        opacity: 1
-      });
-  };
-
-  this.drawOthers = (nodes) => {
-    nodes.append('circle')
-      .attr({
-        class: d => d.type,
-        r: 0,
-        opacity: 0
-      })
-      .transition()
-      .duration(duration)
-      // .delay((d, i) => i * (duration / 2))
-      .attr({
-        r: 15,
-        opacity: 1
-      });
-
-    nodes.append('text')
-    .attr({
-      'text-anchor': 'start',
-      y: 17,
-      x: 17,
-      opacity: 0
-    })
-    .text(d => d.type)
-    .transition()
-    .duration(duration * 2)
-    .attr({
-      opacity: 1
-    });
-
-  };
-
-  this.removeElements = (nodes) => {
-    nodes
-    .transition()
-    .duration(duration)
-    .attr({
-      opacity: 0
-    })
-    .remove();
-  };
-});
\ No newline at end of file
diff --git a/views/ngXosViews/mcordTopology/src/js/static.data.js b/views/ngXosViews/mcordTopology/src/js/static.data.js
deleted file mode 100644
index c38239d..0000000
--- a/views/ngXosViews/mcordTopology/src/js/static.data.js
+++ /dev/null
@@ -1,63 +0,0 @@
-'use strict';
-
-angular.module('xos.mcordTopology')
-.constant('TopologyElements', {
-  nodes: [
-    {
-      id: 'fabric1',
-      type: 'fabric',
-      name: 'fabric1',
-      fixed: true,
-      x: 1,
-      y: 1
-    },
-    {
-      id: 'fabric2',
-      type: 'fabric',
-      name: 'fabric2',
-      fixed: true,
-      x: 1,
-      y: 2
-    },
-    {
-      id: 'fabric3',
-      type: 'fabric',
-      name: 'fabric3',
-      fixed: true,
-      x: 2,
-      y: 1
-    },
-    {
-      id: 'fabric4',
-      type: 'fabric',
-      name: 'fabric4',
-      fixed: true,
-      x: 2,
-      y: 2
-    }
-  ],
-  links: [
-    {
-      source: 'fabric1',
-      target: 'fabric2'
-    },
-    {
-      source: 'fabric1',
-      target: 'fabric4'
-    },
-    {
-      source: 'fabric3',
-      target: 'fabric4'
-    },
-    {
-      source: 'fabric3',
-      target: 'fabric2'
-    }
-  ],
-  icons: {
-    switch: `M10,20a10,10,0,0,1,10-10h70a10,10,0,0,1,10,10v70a10,10,
-            0,0,1-10,10h-70a10,10,0,0,1-10-10zM60,26l12,0,0-8,18,13-18,13,0
-            -8-12,0zM60,60l12,0,0-8,18,13-18,13,0-8-12,0zM50,40l-12,0,0-8
-            -18,13,18,13,0-8,12,0zM50,74l-12,0,0-8-18,13,18,13,0-8,12,0z`,
-  }
-})
\ No newline at end of file
