Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/djproject/urls.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/djproject/urls.py	(revision 39304)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/djproject/urls.py	(working copy)
@@ -98,6 +98,7 @@
     url(r'^generate_real_service_items$', generateRealItems),
     url(r'^generate_virtual_host_items$', generateVhostItems),
     url(r'^generate_real_host_items$', generateRhostItems),
+    url(r'^generate_items_by_type$', generateItemsByType),
     url(r'^check_login_info$', check_login_info),
 )
 
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/monitor_log/ItemController.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/monitor_log/ItemController.py	(revision 39304)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/monitor_log/ItemController.py	(working copy)
@@ -6,6 +6,20 @@
 from django.utils.translation import ugettext_lazy as _
 from collections import OrderedDict
 
+class ItemType():
+    """
+    ItemType class to define item types
+    """
+    SYSTEM = 'system'
+    SLB = 'slb'
+    LLB = 'llb'
+    GSLB = 'gslb'
+    TCP = 'tcp'
+
+    @classmethod
+    def get_all_types(cls):
+        return [cls.SYSTEM, cls.SLB, cls.LLB, cls.GSLB, cls.TCP]
+
 class ItemController():
 
     C_TYPE_TOAL = 'total'
@@ -377,6 +391,8 @@
     def get_ssl_virtual_list(self):
         vh_list = []
         sess = get_current_session()
+        if not sess:
+            return vh_list
         sess.cli.set_enable()
         result = sess.cli.cmd('show ssl host',
                         EasyParser('ssl host virtual', ['?name', '?vs_name']))
@@ -402,6 +418,8 @@
     def get_ssl_real_list(self):
         rh_list = []
         sess = get_current_session()
+        if not sess:
+            return rh_list
         sess.cli.set_enable()
         result = sess.cli.cmd('show ssl host',
                         EasyParser('ssl host real', ['?name', '?vs_name']))
@@ -425,73 +443,100 @@
         return rh_list
 
     def getItems(self):
-        item_list = [{
-        "value": 'system',
-        "label": unicode(_('System')),
-        "children": [{
-            "value": 'cpu_usage',
-            "label": unicode(_('CPU Usage')),
-            }, {
-            "value": 'mem_usage',
-            "label": unicode(_('Memory Usage')),
-            }, {
-            "value": 'net_load',
-            "label": unicode(_('Network Load')),
-            }, {
-            "value": 'conn_status',
-            "label": unicode(_('Connection Status')),
-            }]
-        }, {
-            "value": 'slb',
-            "label": unicode(_('SLB')),
-            "children": [{
-            "value": 'slb_total',
-            "label": unicode(_('Global')),
-            "children": []
-            }, {
-            "value": 'vs_report',
-            "label": unicode(_('Virtual Service')),
-            "children": []
-            }, {
-            "value": 'rs_report',
-            "label": unicode(_('Real Service')),
-            "children": []
-            }, {
-            "value": 'vh_report',
-            "label": unicode(_('SSL Virtual Host')),
-            "children": []
-            }, {
-            "value": 'rh_report',
-            "label": unicode(_('SSL Real Host')),
-            "children": []
-            }, {
-            "value": 'ssl_total_report',
-            "label": unicode(_('SSL Total')),
-            "children": self.get_statistics_ssl_list(is_vh=False)
-            }]
-        }, {
-            "value": 'llb',
-            "label": unicode(_('LLB')),
-            "children": [{
-                "value": "llb_link",
-                "label": unicode(_("LLB Link")),
-                "children": self.get_llb_link_route_list("")
-            }]
-        }, {
-        "value": 'gslb',
-        "label": unicode(_('GSLB')),
-        "children": [{
-            "value": 'total_hits',
-            "label": unicode(_('Total Host Hits')),
-            }]
-        }, {
-        "value": 'tcp',
-        "label": unicode(_('TCP')),
-        "children": self.get_statistics_tcp_list(is_vs=False) +
-                    self.get_tcp_syn_drop_list(is_vs=False) +
-                    self.get_tcp_reset_count_list()
-        }]
-        return item_list
+        return [
+            self.getItemsByType('system'),
+            self.getItemsByType('slb'),
+            self.getItemsByType('llb'),
+            self.getItemsByType('gslb'),
+            self.getItemsByType('tcp'),
+        ]
+
+    def getItemsByType(self, itemType, checkSLBDelay=True):
+        """
+        Get items by type
+        @param string itemType: Type of item, such as 'system', 'slb', 'llb', 'gslb', 'tcp'
+        @param bool checkSLBDelay: Check if SLB is delay to be loaded(empty) or not
+        @return dict
+            dictionary of items for the specified type
+        """
+        if itemType not in ItemType.get_all_types():
+            return {}
+        if itemType == ItemType.SYSTEM:
+            return {
+                "value": ItemType.SYSTEM,
+                "label": unicode(_('System')),
+                "children": [{
+                    "value": 'cpu_usage',
+                    "label": unicode(_('CPU Usage')),
+                    }, {
+                    "value": 'mem_usage',
+                    "label": unicode(_('Memory Usage')),
+                    }, {
+                    "value": 'net_load',
+                    "label": unicode(_('Network Load')),
+                    }, {
+                    "value": 'conn_status',
+                    "label": unicode(_('Connection Status')),
+                    }]
+                }
+        elif itemType == ItemType.SLB:
+            return {
+                "value": ItemType.SLB,
+                "label": unicode(_('SLB')),
+                "children": [{
+                    "value": 'slb_total',
+                    "label": unicode(_('Global')),
+                    "children": [] if checkSLBDelay else self.get_slb_total_list()
+                }, {
+                    "value": 'vs_report',
+                    "label": unicode(_('Virtual Service')),
+                    "children": [] if checkSLBDelay else self.get_slb_virtual_list()
+                }, {
+                    "value": 'rs_report',
+                    "label": unicode(_('Real Service')),
+                    "children": [] if checkSLBDelay else self.get_slb_real_list()
+                }, {
+                    "value": 'vh_report',
+                    "label": unicode(_('SSL Virtual Host')),
+                    "children": [] if checkSLBDelay else self.get_ssl_virtual_list()
+                }, {
+                    "value": 'rh_report',
+                    "label": unicode(_('SSL Real Host')),
+                    "children": [] if checkSLBDelay else self.get_ssl_real_list()
+                }, {
+                    "value": 'ssl_total_report',
+                    "label": unicode(_('SSL Total')),
+                    "children": self.get_statistics_ssl_list(is_vh=False)
+                }]
+            }
+        elif itemType == ItemType.LLB:
+            return {
+                "value": ItemType.LLB,
+                "label": unicode(_('LLB')),
+                "children": [{
+                    "value": "llb_link",
+                    "label": unicode(_("LLB Link")),
+                    "children": self.get_llb_link_route_list("")
+                }]
+            }
+        elif itemType == ItemType.GSLB:
+            return {
+                "value": ItemType.GSLB,
+                "label": unicode(_('GSLB')),
+                "children": [{
+                    "value": 'total_hits',
+                    "label": unicode(_('Total Host Hits')),
+                    }]
+                }
+        elif itemType == ItemType.TCP:
+            return {
+                "value": ItemType.TCP,
+                "label": unicode(_('TCP')),
+                "children": self.get_statistics_tcp_list(is_vs=False) +
+                            self.get_tcp_syn_drop_list(is_vs=False) +
+                            self.get_tcp_reset_count_list()
+            }
+        return {}
 
     def handleSystem(self):
         """
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/report.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/report.py	(revision 39304)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/report.py	(working copy)
@@ -1992,3 +1992,12 @@
 def generateRhostItems(request):
     return HttpResponse(json.dumps(itemController.get_ssl_real_list()))
 
+def generateItemsByType(request):
+    if "type" not in request.GET:
+        return HttpResponse(json.dumps({"result": False, "message": "Parameter type is required"}))
+    itemType = request.GET['type']
+    if itemType == "slb":
+        checkSLBDelay = False
+    else:
+        checkSLBDelay = True
+    return HttpResponse(json.dumps(itemController.getItemsByType(itemType, checkSLBDelay)))
