Draw service graph
diff --git a/views/ngXosViews/diagnostic/src/js/rest_services.js b/views/ngXosViews/diagnostic/src/js/rest_services.js
index 396439c..6e3771a 100644
--- a/views/ngXosViews/diagnostic/src/js/rest_services.js
+++ b/views/ngXosViews/diagnostic/src/js/rest_services.js
@@ -187,7 +187,7 @@
       return tree;
     };
 
-    const buildServiceTree = (services, tenants, subscriber = {id: 1, name: 'fakeSubs'}) => {
+    const buildSubscriberServiceTree = (services, tenants, subscriber = {id: 1, name: 'fakeSubs'}) => {
 
       // find the root service
       // it is the one attached to subsriber_root
@@ -206,7 +206,43 @@
 
     };
 
-    const get = (subscriber) => {
+    // applying domain knowledge to build the global service tree
+    const buildServiceTree = (services, tenants) => {
+
+      // TODO refactor
+      const buildChild = (services, tenants, currentService) => {
+        let tenant = lodash.find(tenants, {subscriber_service: currentService.id});
+        if(tenant){
+          let next = lodash.find(services, {id: tenant.provider_service});
+          currentService.children = [buildChild(services, tenants, next)];
+        }
+        else {
+          currentService.children = [
+            {
+              name: 'Router',
+              type: 'router',
+              children: []
+            }
+          ]
+        }
+        currentService.type = 'service';
+        delete currentService.id; // conflict with d3
+        return currentService;
+      }
+      let baseService = lodash.find(services, {id: 3});
+
+      const baseData = {
+        name: 'Subscriber',
+        type: 'subscriber',
+        parent: null,
+        children: [buildChild(services, tenants, baseService)]
+      };
+
+      console.log(baseData);
+      return baseData;
+    };
+
+    const getBySubscriber = (subscriber) => {
       var deferred = $q.defer();
       var services, tenants;
       Services.query().$promise
@@ -216,7 +252,7 @@
       })
       .then((res) => {
         tenants = res;
-        deferred.resolve(buildServiceTree(services, tenants, subscriber));
+        deferred.resolve(buildSubscriberServiceTree(services, tenants, subscriber));
       })
       .catch((e) => {
         throw new Error(e);
@@ -225,11 +261,32 @@
       return deferred.promise;
     };
 
+    const get = () => {
+      var deferred = $q.defer();
+      var services, tenants;
+      Services.query().$promise
+      .then((res) => {
+        services = res;
+        return Tenant.query({kind: 'coarse'}).$promise;
+      })
+      .then((res) => {
+        tenants = res;
+        deferred.resolve(buildServiceTree(services, tenants));
+      })
+      .catch((e) => {
+        throw new Error(e);
+      });
+
+      return deferred.promise;
+    }
+
     // export APIs
     return {
       get: get,
-      buildLevel: buildLevel,
       buildServiceTree: buildServiceTree,
+      getBySubscriber: getBySubscriber,
+      buildLevel: buildLevel,
+      buildSubscriberServiceTree: buildSubscriberServiceTree,
       findLevelRelation: findLevelRelation,
       findLevelServices: findLevelServices,
       depthOf: depthOf,