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 39446)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/report.py	(working copy)
@@ -77,15 +77,24 @@
     d = Draw_a_Line()
     story.append(d)
 
+    chart_item_aligned = _filter_and_align_chart_items(time_list, chart_item)
+    if not time_list or not chart_item_aligned:
+        story.append(Paragraph('<font size="10">%s</font>' % unicode(_("No data for the selected period.")), styles[current_font]))
+        story.append(Spacer(1, 12))
+        return story
+
     chartController = ChartController()
-    d = chartController.generate_line_plot(chart_item, time_list, yaxis_name)
-    im = Image(d, 7*inch, 3*inch)
-    story.append(im)
+    try:
+        d = chartController.generate_line_plot(chart_item_aligned, time_list, yaxis_name)
+        im = Image(d, 7*inch, 3*inch)
+        story.append(im)
+    except Exception as e:
+        story.append(Paragraph('<font size="10">%s: %s</font>' % (unicode(_("Failed to render chart")), unicode(e)), styles[current_font]))
 
     table_header = [unicode(_('Time'))]
-    for each in chart_item:
-        table_header.append(each['table_item_name']) if "table_item_name" in each else table_header.append(each['item_name'])
-    data = [tuple(table_header)] + table_data
+    for each in chart_item_aligned:
+        table_header.append(each.get('table_item_name') or each.get('item_name'))
+    data = [tuple(table_header)] + list(table_data or [])
     t = generate_report_table(data, len(table_header))
     story.append(t)
     story.append(Spacer(1, 12))
@@ -98,13 +107,22 @@
     d = Draw_a_Line()
     story.append(d)
 
+    yvals = (chart_item or {}).get('item_value') or []
+    if not xaxis_list or not yvals or len(xaxis_list) != len(yvals):
+        story.append(Paragraph('<font size="10">%s</font>' % unicode(_("No data for the selected period.")), styles[current_font]))
+        story.append(Spacer(1, 12))
+        return story
+
     chartController = ChartController()
-    d = chartController.generate_vertical_bar(chart_item['xaxis_name'], xaxis_list, chart_item['item_value'])
-    im = Image(d, 7*inch, 3*inch)
-    story.append(im)
+    try:
+        d = chartController.generate_vertical_bar(chart_item['xaxis_name'], xaxis_list, yvals)
+        im = Image(d, 7*inch, 3*inch)
+        story.append(im)
+    except Exception as e:
+        story.append(Paragraph('<font size="10">%s: %s</font>' % (unicode(_("Failed to render chart")), unicode(e)), styles[current_font]))
 
     table_header = [chart_item['xaxis_name'], chart_item['yaxis_name']]
-    data = [tuple(table_header)] + table_data
+    data = [tuple(table_header)] + list(table_data or [])
     t = generate_report_table(data, len(table_header))
     story.append(t)
     story.append(Spacer(1, 12))
@@ -123,6 +141,27 @@
     if max_value > 1024*1024*1024*1024:
         return "T"
 
+def _align_series_to_time(time_list, values):
+    values = values or []
+    n = len(time_list or [])
+    if n == 0:
+        return []
+    if len(values) >= n:
+        return values[:n]
+    return values + [None] * (n - len(values))
+
+def _filter_and_align_chart_items(time_list, chart_item):
+    if not time_list:
+        return []
+    aligned = []
+    for s in chart_item or []:
+        vals = _align_series_to_time(time_list, s.get('item_value'))
+        if any(v is not None for v in vals):
+            s2 = s.copy()
+            s2['item_value'] = vals
+            aligned.append(s2)
+    return aligned
+
 def value_format_1024(list, yaxis_name):
     new_list = []
     for each in list:
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/en/LC_MESSAGES/django.po
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/en/LC_MESSAGES/django.po	(revision 39446)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/en/LC_MESSAGES/django.po	(working copy)
@@ -5690,6 +5690,12 @@
 msgid "Off"
 msgstr ""
 
+msgid "No data for the selected period."
+msgstr ""
+
+msgid "Failed to render chart"
+msgstr ""
+
 #~ msgid "Graphs"
 #~ msgstr ""
 
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/ja/LC_MESSAGES/django.po
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/ja/LC_MESSAGES/django.po	(revision 39446)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/ja/LC_MESSAGES/django.po	(working copy)
@@ -5739,6 +5739,12 @@
 msgid "Off"
 msgstr "閉じる"
 
+msgid "No data for the selected period."
+msgstr "選択した期間のデータはありません。"
+
+msgid "Failed to render chart"
+msgstr "チャートの描画に失敗しました"
+
 #~ msgid "L2 Bridge"
 #~ msgstr "L2ブリッジ"
 
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/zh_CN/LC_MESSAGES/django.po
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/zh_CN/LC_MESSAGES/django.po	(revision 39446)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/zh_CN/LC_MESSAGES/django.po	(working copy)
@@ -5721,6 +5721,12 @@
 msgid "Off"
 msgstr "关闭"
 
+msgid "No data for the selected period."
+msgstr "所选期间内没有数据。"
+
+msgid "Failed to render chart"
+msgstr "图表渲染失败"
+
 #~ msgid "Graphs"
 #~ msgstr "图表"
 
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/zh_TW/LC_MESSAGES/django.po
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/zh_TW/LC_MESSAGES/django.po	(revision 39446)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/locale/zh_TW/LC_MESSAGES/django.po	(working copy)
@@ -5729,6 +5729,12 @@
 msgid "Off"
 msgstr "關閉"
 
+msgid "No data for the selected period."
+msgstr "所選期間內沒有資料。"
+
+msgid "Failed to render chart"
+msgstr "圖表渲染失敗"
+
 #~ msgid "Graphs"
 #~ msgstr "圖表"
 
