You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@chukwa.apache.org by ey...@apache.org on 2016/04/25 02:02:31 UTC

chukwa git commit: CHUKWA-805. Added examples to HICC rest api. (Eric Yang)

Repository: chukwa
Updated Branches:
  refs/heads/master 84ade8281 -> e0bf3c0ef


CHUKWA-805. Added examples to HICC rest api.  (Eric Yang)


Project: http://git-wip-us.apache.org/repos/asf/chukwa/repo
Commit: http://git-wip-us.apache.org/repos/asf/chukwa/commit/e0bf3c0e
Tree: http://git-wip-us.apache.org/repos/asf/chukwa/tree/e0bf3c0e
Diff: http://git-wip-us.apache.org/repos/asf/chukwa/diff/e0bf3c0e

Branch: refs/heads/master
Commit: e0bf3c0efd5a60aef21d86578fa74f961045c505
Parents: 84ade82
Author: Eric Yang <ey...@apache.org>
Authored: Sun Apr 24 17:02:22 2016 -0700
Committer: Eric Yang <ey...@apache.org>
Committed: Sun Apr 24 17:02:22 2016 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |   4 +-
 pom.xml                                         |  15 +
 .../chukwa/datastore/ChukwaHBaseStore.java      | 509 ++---------------
 .../apache/hadoop/chukwa/hicc/bean/Chart.java   |  99 ++++
 .../hadoop/chukwa/hicc/bean/Dashboard.java      |   7 +-
 .../chukwa/hicc/rest/ChartController.java       |  34 +-
 .../chukwa/hicc/rest/CirclesController.java     |  29 +-
 .../chukwa/hicc/rest/DashboardController.java   |  45 +-
 .../hadoop/chukwa/hicc/rest/Examples.java       | 540 +++++++++++++++++++
 .../chukwa/hicc/rest/HeatmapController.java     |  29 +
 .../chukwa/hicc/rest/LoginController.java       |  23 +
 .../chukwa/hicc/rest/MetricsController.java     |  32 ++
 .../chukwa/hicc/rest/PieChartController.java    |  25 +
 .../chukwa/hicc/rest/SessionController.java     |  10 +
 .../hadoop/chukwa/hicc/rest/TileController.java |  27 +-
 .../chukwa/hicc/rest/WidgetController.java      |  70 +++
 src/main/webapps/wadl.xsl                       |  58 +-
 17 files changed, 1097 insertions(+), 459 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index dbb8d0e..ec869f8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -6,6 +6,8 @@ Trunk (unreleased changes)
 
   IMPROVEMENTS
 
+    CHUKWA-805. Added examples to HICC rest api.  (Eric Yang)
+
     CHUKWA-804.  Update user documents to match current code base. (Eric Yang)
 
     CHUKWA-802. Updated Javadoc for Java 8 support.  (Eric Yang)
@@ -26,7 +28,7 @@ Trunk (unreleased changes)
 
     CHUKWA-796. Remove collector from shell script.  (Eric Yang)
 
-Release 0.6 - 09/28/2014
+Release 0.7 - 12/21/2015
 
   NEW FEATURES
 

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c00fe32..fedb59a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1639,6 +1639,21 @@
                     <head>response.representation.400.example</head>
                   </tag>
                   <tag>
+                    <name>response.representation.403.doc</name>
+                    <placement>a</placement>
+                    <head>response.representation.403.doc</head>
+                  </tag>
+                  <tag>
+                    <name>response.representation.403.mediaType</name>
+                    <placement>a</placement>
+                    <head>response.representation.403.mediaType</head>
+                  </tag>
+                  <tag>
+                    <name>response.representation.403.example</name>
+                    <placement>a</placement>
+                    <head>response.representation.403.example</head>
+                  </tag>
+                  <tag>
                     <name>request.representation.example</name>
                     <placement>a</placement>
                     <head>request.representation.example</head>

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/datastore/ChukwaHBaseStore.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/datastore/ChukwaHBaseStore.java b/src/main/java/org/apache/hadoop/chukwa/datastore/ChukwaHBaseStore.java
index 889e980..a3dc189 100644
--- a/src/main/java/org/apache/hadoop/chukwa/datastore/ChukwaHBaseStore.java
+++ b/src/main/java/org/apache/hadoop/chukwa/datastore/ChukwaHBaseStore.java
@@ -18,7 +18,6 @@
 package org.apache.hadoop.chukwa.datastore;
 
 import java.io.IOException;
-import java.net.InetAddress;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.ByteBuffer;
@@ -43,6 +42,7 @@ import org.apache.hadoop.chukwa.hicc.bean.LineOptions;
 import org.apache.hadoop.chukwa.hicc.bean.Series;
 import org.apache.hadoop.chukwa.hicc.bean.SeriesMetaData;
 import org.apache.hadoop.chukwa.hicc.bean.Widget;
+import org.apache.hadoop.chukwa.hicc.rest.Examples;
 import org.apache.hadoop.chukwa.util.ExceptionUtil;
 import org.apache.hadoop.chukwa.util.HBaseUtil;
 import org.apache.hadoop.hbase.Cell;
@@ -917,480 +917,85 @@ public class ChukwaHBaseStore {
       if(defaultExists) {
         return;
       }
-      String hostname = InetAddress.getLocalHost().getHostName().toLowerCase();
       // Populate example chart widgets
-      String[] metrics = { "SystemMetrics.LoadAverage.1" };
-      createChart("1", "System Load Average", metrics, hostname, "");
-      String[] cpuMetrics = { "SystemMetrics.cpu.combined", "SystemMetrics.cpu.sys", "SystemMetrics.cpu.user" };
-      createChart("2", "CPU Utilization", cpuMetrics, hostname, "percent");
-      String[] memMetrics = { "SystemMetrics.memory.FreePercent", "SystemMetrics.memory.UsedPercent"};
-      createChart("3", "Memory Utilization", memMetrics, hostname, "percent");
-      String[] diskMetrics = { "SystemMetrics.disk.ReadBytes", "SystemMetrics.disk.WriteBytes" };
-      createChart("4", "Disk Utilization", diskMetrics, hostname, "bytes-decimal");
-      String[] netMetrics = { "SystemMetrics.network.TxBytes", "SystemMetrics.network.RxBytes" };
-      createChart("5", "Network Utilization", netMetrics, hostname, "bytes");
-      String[] swapMetrics = { "SystemMetrics.swap.Total", "SystemMetrics.swap.Used", "SystemMetrics.swap.Free" };
-      createChart("6", "Swap Utilization", swapMetrics, hostname, "bytes-decimal");
+      createChart(Examples.SYSTEM_LOAD_AVERAGE);
+      createChart(Examples.CPU_UTILIZATION);
+      createChart(Examples.MEMORY_UTILIZATION);
+      createChart(Examples.DISK_UTILIZATION);
+      createChart(Examples.NETWORK_UTILIZATION);
+      createChart(Examples.SWAP_UTILIZATION);
       
       // Namenode heap usage
-      StringBuilder namenode = new StringBuilder();
-      namenode.append(hostname);
-      namenode.append(":NameNode");
-      String[] namenodeHeap = { "HadoopMetrics.jvm.JvmMetrics.MemHeapUsedM", "HadoopMetrics.jvm.JvmMetrics.MemHeapMaxM" };
-      createCircle("7", "Namenode Memory", namenodeHeap, namenode.toString(), "%", "up");
+      createChart(Examples.NAMENODE_MEMORY);
       
       // HDFS Usage
-      String[] hdfsUsage = { "HadoopMetrics.dfs.FSNamesystem.CapacityRemainingGB", "HadoopMetrics.dfs.FSNamesystem.CapacityTotalGB" };
-      createCircle("8", "HDFS Remaining", hdfsUsage, hostname, "%", "down");
+      createChart(Examples.HDFS_USAGE);
 
       // Resource Manager Memory
-      StringBuilder rmnode = new StringBuilder();
-      rmnode.append(hostname);
-      rmnode.append(":ResourceManager");
-      String[] rmHeap = { "HadoopMetrics.jvm.JvmMetrics.MemHeapUsedM", "HadoopMetrics.jvm.JvmMetrics.MemHeapMaxM" };
-      createCircle("9", "Resource Manager Memory", rmHeap, rmnode.toString(), "%", "up");
+      createChart(Examples.RESOURCE_MANAGER_MEMORY);
 
       // Node Managers Health
-      String[] nmh = { "HadoopMetrics.yarn.ClusterMetrics.NumActiveNMs", "HadoopMetrics.yarn.ClusterMetrics.NumLostNMs" };
-      createTile("10", "Node Managers Health", "Node Managers", "Active/Lost", nmh, hostname, "glyphicon-th");
+      createChart(Examples.NODE_MANAGER_HEALTH);
 
       // High Availability State
-      String[] ha = { "HadoopMetrics.dfs.FSNamesystem.HAState" };
-      createTile("11", "HDFS High Availability State", "HDFS High Availability", "", ha, hostname, "glyphicon-random");
+      createChart(Examples.HDFS_HA);
 
       // HDFS Load
-      String[] hdfsLoad = { "HadoopMetrics.dfs.FSNamesystem.TotalLoad" };
-      createTile("12", "HDFS Load Average", "HDFS Load", "", hdfsLoad, hostname, "glyphicon-signal");
+      createChart(Examples.HDFS_LOAD);
 
       // Namenode RPC Latency
-      String[] nnLatency = { "HadoopMetrics.rpc.rpc.RpcProcessingTimeAvgTime" };
-      createTile("13", "NameNode Latency", "NameNode RPC Latency", "Milliseconds", nnLatency, hostname, "glyphicon-tasks");
+      createChart(Examples.NAMENODE_RPC_LATENCY);
 
       // Datanode Health
-      String[] dnHealth = { "HadoopMetrics.dfs.FSNamesystem.StaleDataNodes" };
-      createTile("14", "Datanodes Health", "Datanodes", "Dead", dnHealth, hostname, "glyphicon-hdd");
+      createChart(Examples.DATANODES);
 
       // HBase Master Memory
-      StringBuilder hbaseMaster = new StringBuilder();
-      hbaseMaster.append(hostname);
-      hbaseMaster.append(":Master");
-      String[] hbm = { "HBaseMetrics.jvm.JvmMetrics.MemHeapUsedM", "HBaseMetrics.jvm.JvmMetrics.MemHeapMaxM" };
-      createCircle("15", "HBase Master Memory", hbm, hbaseMaster.toString(), "%", "up");
+      createChart(Examples.HBASE_MASTER_MEMORY);
 
-      // Demo metrics
-//      String[] trialAbandonRate = { "HadoopMetrics.jvm.JvmMetrics.MemHeapUsedM", "HadoopMetrics.jvm.JvmMetrics.MemHeapMaxM" };
-//      createChart("T1", "Trial Abandon Rate", trialAbandonRate, namenode.toString(), "percent");
-//      createChart("T2", "Unhealthy Clusters", hdfsUsage, hostname, "percent");
-      
       // Populate default widgets
-      Widget widget = new Widget();
-      widget.setTitle("System Load Average");
-      widget.setSrc(new URI("/hicc/v1/chart/draw/1"));
-      widget.setCol(1);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-
-      // Populate default dashboard
-      Dashboard dashboard = new Dashboard();
-
-      widget = new Widget();
-      widget.setTitle("Welcome Page");
-      widget.setSrc(new URI("/hicc/welcome.html"));
-      widget.setCol(1);
-      widget.setRow(1);
-      widget.setSize_x(10);
-      widget.setSize_y(5);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("Trial Downloading");
-      widget.setSrc(new URI("/hicc/home/downloads.html"));
-      widget.setCol(1);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Cluster Running");
-      widget.setSrc(new URI("/hicc/home/clusters.html"));
-      widget.setCol(3);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Users Working");
-      widget.setSrc(new URI("/hicc/home/users.html"));
-      widget.setCol(5);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Applications Running");
-      widget.setSrc(new URI("/hicc/home/apps.html"));
-      widget.setCol(7);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Trial Abandon Rate");
-      widget.setSrc(new URI("/hicc/v1/circles/draw/11"));
-      widget.setCol(1);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Clusters Health");
-      widget.setSrc(new URI("/hicc/v1/circles/draw/12"));
-      widget.setCol(3);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Top Active Clusters");
-      widget.setSrc(new URI("/hicc/clusters/"));
-      widget.setCol(5);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Top Applications");
-      widget.setSrc(new URI("/hicc/apps/"));
-      widget.setCol(7);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Applications Usage");
-      widget.setSrc(new URI("/hicc/apps/apps-usage.html"));
-      widget.setCol(7);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-
-      updateDashboard("default", "", dashboard);
-
-      // Populate user dashboards
-      dashboard = new Dashboard();
-
-      widget = new Widget();
-      widget.setTitle("Quick Links");
-      widget.setSrc(new URI("/hicc/v1/dashboard/quicklinks"));
-      widget.setCol(1);
-      widget.setRow(1);
-      widget.setSize_x(10);
-      widget.setSize_y(5);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      // Log Search widget
-      widget = new Widget();
-      widget.setTitle("Log Search");
-      widget.setSrc(new URI("/hicc/ajax-solr/chukwa"));
-      widget.setCol(1);
-      widget.setRow(1);
-      widget.setSize_x(6);
-      widget.setSize_y(6);
-      createWidget(widget);
-
-      // Applications
-      widget = new Widget();
-      widget.setTitle("YARN Applications");
-      widget.setSrc(new URI("http://localhost:8088/"));
-      widget.setCol(1);
-      widget.setRow(7);
-      widget.setSize_x(6);
-      widget.setSize_y(6);
-      createWidget(widget);
-
-      // Hadoop Distributed File System
-      widget = new Widget();
-      widget.setTitle("HDFS");
-      widget.setSrc(new URI("http://localhost:50070/explorer.html#/"));
-      widget.setCol(1);
-      widget.setRow(7);
-      widget.setSize_x(6);
-      widget.setSize_y(6);
-      createWidget(widget);
-
-      // HBase Tables
-      widget = new Widget();
-      widget.setTitle("HBase Tables");
-      widget.setSrc(new URI("http://localhost:50654/tablesDetailed.jsp"));
-      widget.setCol(1);
-      widget.setRow(14);
-      widget.setSize_x(6);
-      widget.setSize_y(6);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Top Applications");
-      widget.setSrc(new URI("/hicc/apps/"));
-      widget.setCol(1);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-
-      widget = new Widget();
-      widget.setTitle("Top Users");
-      widget.setSrc(new URI("/hicc/users/"));
-      widget.setCol(1);
-      widget.setRow(3);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-      updateDashboard("user", "", dashboard);
-
-      // Populate system dashboards
-      dashboard = new Dashboard();
-      widget = new Widget();
-      widget.setTitle("HDFS High Availability State");
-      widget.setSrc(new URI("/hicc/v1/tile/draw/11"));
-      widget.setCol(1);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("HDFS Load");
-      widget.setSrc(new URI("/hicc/v1/tile/draw/12"));
-      widget.setCol(3);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("HDFS Namenode Latency");
-      widget.setSrc(new URI("/hicc/v1/tile/draw/13"));
-      widget.setCol(5);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("Datanodes Health");
-      widget.setSrc(new URI("/hicc/v1/tile/draw/14"));
-      widget.setCol(7);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
+      createWidget(Examples.SYSTEM_LOAD_AVERAGE_WIDGET);
+      createWidget(Examples.WELCOME_PAGE_WIDGET);
+      createWidget(Examples.TRIAL_DOWNLOAD_WIDGET);
+      createWidget(Examples.CLUSTER_RUNNING_WIDGET);
+      createWidget(Examples.USER_WORKING_WIDGET);
+      createWidget(Examples.APP_RUNNING_WIDGET);
+      createWidget(Examples.TRIAL_ABANDON_RATE_WIDGET);
+      createWidget(Examples.CLUSTERS_HEALTH_WIDGET);
+      createWidget(Examples.TOP_ACTIVE_CLUSTERS_WIDGET);
+      createWidget(Examples.TOP_APP_WIDGET);
       
-      widget = new Widget();
-      widget.setTitle("Node Managers Health");
-      widget.setSrc(new URI("/hicc/v1/tile/draw/10"));
-      widget.setCol(9);
-      widget.setRow(1);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("HDFS Remaining");
-      widget.setSrc(new URI("/hicc/v1/circles/draw/8"));
-      widget.setCol(1);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("Namenode Memory");
-      widget.setSrc(new URI("/hicc/v1/circles/draw/7"));
-      widget.setCol(3);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("Resource Manager Memory");
-      widget.setSrc(new URI("/hicc/v1/circles/draw/9"));
-      widget.setCol(5);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("HBase Master Memory");
-      widget.setSrc(new URI("/hicc/v1/circles/draw/15"));
-      widget.setCol(7);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(2);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("System Load Average");
-      widget.setSrc(new URI("/hicc/v1/chart/draw/1"));
-      widget.setCol(9);
-      widget.setRow(2);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("CPU Utilization");
-      widget.setSrc(new URI("/hicc/v1/chart/draw/2"));
-      widget.setCol(9);
-      widget.setRow(3);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("Memory Utilization");
-      widget.setSrc(new URI("/hicc/v1/chart/draw/3"));
-      widget.setCol(9);
-      widget.setRow(4);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("Swap Utilization");
-      widget.setSrc(new URI("/hicc/v1/chart/draw/6"));
-      widget.setCol(9);
-      widget.setRow(5);
-      widget.setSize_x(2);
-      widget.setSize_y(1);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("Disk Utilization");
-      widget.setSrc(new URI("/hicc/v1/chart/draw/4"));
-      widget.setCol(1);
-      widget.setRow(4);
-      widget.setSize_x(4);
-      widget.setSize_y(2);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      widget = new Widget();
-      widget.setTitle("Network Utilization");
-      widget.setSrc(new URI("/hicc/v1/chart/draw/5"));
-      widget.setCol(5);
-      widget.setRow(4);
-      widget.setSize_x(4);
-      widget.setSize_y(2);
-      createWidget(widget);
-      dashboard.add(widget);
-
-      // CPU heatmap
-      widget = new Widget();
-      widget.setTitle("CPU Heatmap");
-      widget.setSrc(new URI("/hicc/v1/heatmap/render/SystemMetrics/cpu.combined."));
-      widget.setCol(1);
-      widget.setRow(5);
-      widget.setSize_x(6);
-      widget.setSize_y(5);
-      createWidget(widget);
-
-      // HDFS Namenode
-      widget = new Widget();
-      widget.setTitle("HDFS UI");
-      widget.setSrc(new URI("http://localhost:50070/"));
-      widget.setCol(1);
-      widget.setRow(11);
-      widget.setSize_x(6);
-      widget.setSize_y(6);
-      createWidget(widget);
-
-      // HBase Master
-      widget = new Widget();
-      widget.setTitle("HBase Master UI");
-      widget.setSrc(new URI("http://localhost:16010/"));
-      widget.setCol(1);
-      widget.setRow(18);
-      widget.setSize_x(6);
-      widget.setSize_y(6);
-      createWidget(widget);
-
-//    widget = new Widget();
-//    widget.setTitle("Services Running");
-//    widget.setSrc(new URI("/hicc/services/services.html"));
-//    widget.setCol(1);
-//    widget.setRow(1);
-//    widget.setSize_x(2);
-//    widget.setSize_y(1);
-//    createWidget(widget);
-//    dashboard.add(widget);
-//    
-//    widget = new Widget();
-//    widget.setTitle("Applications Running");
-//    widget.setSrc(new URI("/hicc/home/apps.html"));
-//    widget.setCol(3);
-//    widget.setRow(1);
-//    widget.setSize_x(2);
-//    widget.setSize_y(1);
-//    dashboard.add(widget);
-
-//    widget = new Widget();
-//    widget.setTitle("Timeline");
-//    widget.setSrc(new URI("/hicc/timeline/"));
-//    widget.setCol(7);
-//    widget.setRow(2);
-//    widget.setSize_x(4);
-//    widget.setSize_y(6);
-//    createWidget(widget);
-//    dashboard.add(widget);
-
-//      widget = new Widget();
-//      widget.setTitle("Alerts");
-//      widget.setSrc(new URI("/hicc/alerts/"));
-//      widget.setCol(1);
-//      widget.setRow(5);
-//      widget.setSize_x(6);
-//      widget.setSize_y(5);
-//      createWidget(widget);
-//
-//      widget = new Widget();
-//      widget.setTitle("Log Errors");
-//      widget.setSrc(new URI("/hicc/logs/"));
-//      widget.setCol(1);
-//      widget.setRow(5);
-//      widget.setSize_x(6);
-//      widget.setSize_y(5);
-//      createWidget(widget);
-
-      updateDashboard("system", "", dashboard);
+      // User widgets
+      createWidget(Examples.APP_USAGE_WIDGET);
+      createWidget(Examples.QUICK_LINKS_WIDGET);
+      createWidget(Examples.LOG_SEARCH_WIDGET);
+      createWidget(Examples.YARN_APP_WIDGET);
+      createWidget(Examples.HDFS_WIDGET);
+      createWidget(Examples.HBASE_TABLE_WIDGET);
+      createWidget(Examples.TOP_USER_WIDGET);
+
+      // System widgets
+      createWidget(Examples.HDFS_HA_STATE_WIDGET);
+      createWidget(Examples.HDFS_LOAD_WIDGET);
+      createWidget(Examples.HDFS_NAMENODE_LATENCY_WIDGET);
+      createWidget(Examples.DATANODES_HEALTH_WIDGET);
+      createWidget(Examples.NODE_MANAGERS_HEALTH_WIDGET);
+      createWidget(Examples.HDFS_REMAINING_WIDGET);
+      createWidget(Examples.NAMENODE_MEMORY_WIDGET);
+      createWidget(Examples.RESOURCE_MANAGER_MEMORY_WIDGET);
+      createWidget(Examples.HBASE_MASTER_MOMORY_WIDGET);
+      createWidget(Examples.CPU_UTILIZATION_WIDGET);
+      createWidget(Examples.MEMORY_UTILIZATION_WIDGET);
+      createWidget(Examples.SWAP_UTILIZATION_WIDGET);
+      createWidget(Examples.DISK_UTILIZATION_WIDGET);
+      createWidget(Examples.NETWORK_UTILIZATION_WIDGET);
+      createWidget(Examples.CPU_HEAPMAP_WIDGET);
+      createWidget(Examples.HDFS_UI_WIDGET);
+      createWidget(Examples.HBASE_MASTER_UI_WIDGET);
       
+      // Populate default dashboard
+      updateDashboard("default", "", Examples.DEFAULT_DASHBOARD);
+      updateDashboard("user", "", Examples.USER_DASHBOARD);
+      updateDashboard("system", "", Examples.SYSTEM_DASHBOARD);
     } catch (Throwable ex) {
       LOG.error(ExceptionUtil.getStackTrace(ex));
     }

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Chart.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Chart.java b/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Chart.java
index a944373..522adf4 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Chart.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Chart.java
@@ -19,9 +19,18 @@
 package org.apache.hadoop.chukwa.hicc.bean;
 
 
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
 public class Chart {
   private String id;
   private ChartType type;
@@ -242,4 +251,94 @@ public class Chart {
   public String getThreshold() {
     return this.threshold;
   }
+
+  /**
+   * Create a chart object.
+   * @param id is unique chart identifier
+   * @param title is searchable name of the chart
+   * @param metrics is list of metric names to render chart
+   * @param source is data source name
+   * @param yunitType is y axis unit type
+   * @return Chart object
+   * @throws URISyntaxException if metrics name can not compose valid URL syntax
+   */
+  public static synchronized Chart createChart(String id,
+      String title, String[] metrics, String source, String yunitType) throws URISyntaxException {
+    Chart chart = new Chart(id);
+    chart.setYUnitType(yunitType);
+    chart.setTitle(title);
+    ArrayList<SeriesMetaData> series = new ArrayList<SeriesMetaData>();
+    for(String metric : metrics) {
+      SeriesMetaData s = new SeriesMetaData();
+      s.setLabel(metric + "/" + source);
+      s.setUrl(new URI("/hicc/v1/metrics/series/" + metric + "/"
+        + source));
+      LineOptions l = new LineOptions();
+      s.setLineOptions(l);
+      series.add(s);
+    }
+    chart.setSeries(series);
+    return chart;
+    
+  }
+  
+  /**
+   * Create a chart in HBase by specifying parameters.
+   * @param id is unique chart identifier
+   * @param title is searchable name of the chart
+   * @param metrics is list of metric names to render ring chart
+   * @param source is data source name
+   * @param suffixLabel is text label to append to metric values
+   * @param direction sets the threshold to have either upper limit or lower limit
+   * @return Chart object
+   * @throws URISyntaxException if metrics name can not compose valid URL syntax
+   */
+  public static synchronized Chart createCircle(String id,
+      String title, String[] metrics, String source, String suffixLabel, String direction) throws URISyntaxException {
+    Chart chart = new Chart(id);
+    chart.setSuffixText(suffixLabel);
+    chart.setTitle(title);
+    chart.setThreshold(direction);
+    ArrayList<SeriesMetaData> series = new ArrayList<SeriesMetaData>();
+    for(String metric : metrics) {
+      SeriesMetaData s = new SeriesMetaData();
+      s.setLabel(metric + "/" + source);
+      s.setUrl(new URI("/hicc/v1/metrics/series/" + metric + "/"
+        + source));
+      series.add(s);
+    }
+    chart.setSeries(series);
+    return chart;
+    
+  }
+  
+  /**
+   * Create a tile in HBase by specifying parameters.
+   * @param id is unique tile identifier
+   * @param title is searchable name of the tile widget
+   * @param bannerText is description of the tile widget
+   * @param suffixLabel is text label to append to metric values
+   * @param metrics is list of metric names to render tile widget
+   * @param source is data source name
+   * @param icon is emoji symbol to render beside tile widget
+   * @return Chart object
+   * @throws URISyntaxException if metrics name can not compose valid URL syntax
+   */
+  public static synchronized Chart createTile(String id, String title, 
+      String bannerText, String suffixLabel, String[] metrics, String source, 
+      String icon) throws URISyntaxException {
+    Chart chart = new Chart(id);
+    chart.setTitle(title);
+    chart.setBannerText(bannerText);
+    chart.setSuffixText(suffixLabel);
+    chart.setIcon(icon);
+    List<SeriesMetaData> smd = new ArrayList<SeriesMetaData>();
+    for (String metric : metrics) {
+      SeriesMetaData series = new SeriesMetaData();
+      series.setUrl(new URI("/hicc/v1/metrics/series/" + metric + "/" + source));
+      smd.add(series);
+    }
+    chart.setSeries(smd);
+    return chart;
+  }
 }

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Dashboard.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Dashboard.java b/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Dashboard.java
index eb12674..be57816 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Dashboard.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/bean/Dashboard.java
@@ -18,9 +18,14 @@
 package org.apache.hadoop.chukwa.hicc.bean;
 
 import java.util.ArrayList;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
 
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
 public class Dashboard {
-  ArrayList<Widget> grid = null;
+  public ArrayList<Widget> grid = null;
 
   public void add(Widget widget) {
     if(grid==null) {

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/ChartController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/ChartController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/ChartController.java
index 614a161..bfebd26 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/ChartController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/ChartController.java
@@ -61,6 +61,7 @@ public class ChartController {
    * 
    * @param id Reference ID of Chart stored in HBase chukwa_meta table.
    * @return chart widget
+   * 
    */
   @GET
   @Path("draw/{id}")
@@ -88,8 +89,14 @@ public class ChartController {
 
   /**
    * Describe chart meta data
+   * 
    * @param id Chart ID
    * @return chart meta data
+   * 
+   * @response.representation.200.doc Display chart configuration options
+   * @response.representation.200.mediaType application/json
+   * @response.representation.200.example {@link Examples#CPU_UTILIZATION}
+   * 
    */
   @GET
   @Path("describe/{id}")
@@ -106,6 +113,9 @@ public class ChartController {
    * 
    * @param buffer holds incoming JSON of Chart object
    * @return Web response code
+   * 
+   * @request.representation.example {@link Examples#MEMORY_UTILIZATION}
+   * 
    */
   @POST
   @Path("save")
@@ -126,6 +136,9 @@ public class ChartController {
    * @param id is unique identifier of Chart object
    * @param buffer holds incoming JSON of Chart object
    * @return Web response code
+   * 
+   * @request.representation.example {@link Examples#DISK_UTILIZATION}
+   * 
    */
   @PUT
   @Path("save/{id}")
@@ -139,12 +152,18 @@ public class ChartController {
   }
 
   /**
-   * Preview a chart
+   * Display a chart base on chart configuration from REST API input
+   * 
    * @param buffer holds incoming JSON of Chart object
    * @return segment of chart HTML output
+   * 
+   * @request.representation.example {@link Examples#NETWORK_UTILIZATION}
+   *
    */
   @PUT
   @Path("preview")
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Produces(MediaType.TEXT_HTML)
   public String preview(String buffer) {
     VelocityContext context = new VelocityContext();
     StringWriter sw = null;
@@ -166,8 +185,21 @@ public class ChartController {
     return sw.toString();
   }
 
+  /**
+   * Display metrics series in JSON
+   * 
+   * @param request HTTP request object
+   * @param buffer list of SeriesMetaData
+   * @return metrics JSON
+   * 
+   * @request.representation.example {@link Examples#CPU_SERIES_METADATA}
+   * @response.representation.200.doc Display series data in JSON
+   * @response.representation.200.mediaType application/json
+   * 
+   */
   @PUT
   @Path("preview/series")
+  @Consumes(MediaType.APPLICATION_JSON)
   @Produces("application/json")
   public String previewSeries(@Context HttpServletRequest request, String buffer) {
     Type listType = new TypeToken<ArrayList<SeriesMetaData>>() {

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/CirclesController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/CirclesController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/CirclesController.java
index e7dd2a4..1088fdd 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/CirclesController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/CirclesController.java
@@ -22,9 +22,9 @@ import java.lang.reflect.Type;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.TimeUnit;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
 import javax.ws.rs.PUT;
@@ -62,6 +62,10 @@ public class CirclesController {
    * @param id Title of the tile.
    * @param invert Toggle to display warning, error color by upper bound or lower bound.
    * @return html circle widget.
+   * 
+   * @response.representation.200.doc Render circleful chart
+   * @response.representation.200.mediaType text/html
+   * @response.representation.200.example Example is availabe on HICC UI
    */
   @GET
   @Path("draw/{id}")
@@ -87,7 +91,17 @@ public class CirclesController {
     return sw.toString();
   }
 
+  /**
+   * Preview circle graph with a set of chart configuration
+   * 
+   * @param buffer is chart object
+   * @return html text of circle graph
+   * 
+   * @request.representation.example {@link Examples#NAMENODE_MEMORY}
+   */
   @PUT
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Produces(MediaType.TEXT_HTML)
   @Path("preview")
   public String preview(String buffer) {
     VelocityContext context = new VelocityContext();
@@ -109,7 +123,20 @@ public class CirclesController {
     return sw.toString();
   }
   
+  /**
+   * Circle graph data can be calculated based on either a ratio of two metrics or
+   * the selected metric is a percentage metric for rendering circle graph.
+   * 
+   * @param request is HTTP request object
+   * @param buffer is list of SeriesMetaData for fetching series data
+   * @return JSON output series data
+   * 
+   * @request.representation.example {@link Examples#HDFS_USAGE_SERIES_METADATA}
+   * @response.representation.200.doc Display series data in JSON
+   * @response.representation.200.mediaType application/json
+   */
   @PUT
+  @Consumes(MediaType.APPLICATION_JSON)
   @Path("preview/series")
   @Produces("application/json")
   public String previewSeries(@Context HttpServletRequest request, String buffer) {

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/DashboardController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/DashboardController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/DashboardController.java
index 2721694..9c40380 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/DashboardController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/DashboardController.java
@@ -57,8 +57,19 @@ public class DashboardController {
   @Context
   VelocityEngine velocity;
 
-  
+  /**
+   * Load a dashboard view
+   * 
+   * @param request HTTP request object
+   * @param id is dashboard unique identifier
+   * @return Dashboard view in JSON structure
+   * 
+   * @response.representation.200.doc Display dashboard JSON structure
+   * @response.representation.200.mediaType application/json
+   * @response.representation.200.example {@link Examples#SYSTEM_DASHBOARD}
+   */
   @GET
+  @Produces(MediaType.APPLICATION_JSON)
   @Path("load/{id}")
   public String load(@Context HttpServletRequest request, @PathParam("id") String id) {
     Gson gson = new Gson();
@@ -67,6 +78,18 @@ public class DashboardController {
     return json;
   }
   
+  /**
+   * Save a dashboard view
+   * 
+   * @param request HTTP request object
+   * @param id is dashboard unique identifier
+   * @param buffer is JSON structure of dashboard view
+   * @return Status of the dashboard save
+   * 
+   * @request.representation.example {@link Examples#USER_DASHBOARD}
+   * @response.representation.200.doc Display save status code
+   * @response.representation.200.mediaType text/plain
+   */
   @PUT
   @Path("save/{id}")
   @Consumes(MediaType.APPLICATION_JSON)
@@ -80,12 +103,32 @@ public class DashboardController {
     return Response.ok().build();
   }
   
+  /**
+   * Return HTTP request connection user name
+   * 
+   * @param request HTTP request object
+   * @return username
+   * 
+   * @response.representation.200.doc Username
+   * @response.representation.200.mediaType text/plain
+   * @response.representation.200.example admin
+   */
   @GET
   @Path("whoami")
+  @Produces(MediaType.TEXT_PLAIN)
   public String whoami(@Context HttpServletRequest request) {
     return request.getRemoteUser();
   }
   
+  /**
+   * Render Quick links to various services web portals
+   * 
+   * @return HTML page of quick links
+   * 
+   * @response.representation.200.doc Display quick link widget
+   * @response.representation.200.mediaType text/html
+   * @response.representation.200.example Example is availabe on HICC UI
+   */
   @GET
   @Path("quicklinks")
   @Produces(MediaType.TEXT_HTML)

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/Examples.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/Examples.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/Examples.java
new file mode 100644
index 0000000..4c2de0a
--- /dev/null
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/Examples.java
@@ -0,0 +1,540 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.hadoop.chukwa.hicc.rest;
+
+import java.net.InetAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.hadoop.chukwa.hicc.bean.Chart;
+import org.apache.hadoop.chukwa.hicc.bean.Dashboard;
+import org.apache.hadoop.chukwa.hicc.bean.Series;
+import org.apache.hadoop.chukwa.hicc.bean.SeriesMetaData;
+import org.apache.hadoop.chukwa.hicc.bean.Widget;
+
+@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="MS_SHOULD_BE_FINAL")
+public class Examples {
+  // Chart examples
+  public static Chart SYSTEM_LOAD_AVERAGE;
+  public static Chart CPU_UTILIZATION;
+  public static Chart MEMORY_UTILIZATION;
+  public static Chart DISK_UTILIZATION;
+  public static Chart NETWORK_UTILIZATION;
+  public static Chart SWAP_UTILIZATION;
+  public static Chart NAMENODE_MEMORY;
+  public static Chart HDFS_USAGE;
+  public static Chart RESOURCE_MANAGER_MEMORY;
+  public static Chart NODE_MANAGER_HEALTH;
+  public static Chart HDFS_HA;
+  public static Chart HDFS_LOAD;
+  public static Chart NAMENODE_RPC_LATENCY;
+  public static Chart DATANODES;
+  public static Chart HBASE_MASTER_MEMORY;
+
+  // Widget examples
+  public static Widget SYSTEM_LOAD_AVERAGE_WIDGET;
+  public static Widget WELCOME_PAGE_WIDGET;
+  public static Widget TRIAL_DOWNLOAD_WIDGET;
+  public static Widget CLUSTER_RUNNING_WIDGET;
+  public static Widget USER_WORKING_WIDGET;
+  public static Widget APP_RUNNING_WIDGET;
+  public static Widget TRIAL_ABANDON_RATE_WIDGET;
+  public static Widget CLUSTERS_HEALTH_WIDGET;
+  public static Widget TOP_ACTIVE_CLUSTERS_WIDGET;
+  public static Widget TOP_APP_WIDGET;
+  public static Widget APP_USAGE_WIDGET;
+  public static Widget QUICK_LINKS_WIDGET;
+  public static Widget LOG_SEARCH_WIDGET;
+  public static Widget YARN_APP_WIDGET;
+  public static Widget HDFS_WIDGET;
+  public static Widget HBASE_TABLE_WIDGET;
+  public static Widget TOP_USER_WIDGET;
+  public static Widget HDFS_HA_STATE_WIDGET;
+  public static Widget HDFS_LOAD_WIDGET;
+  public static Widget HDFS_NAMENODE_LATENCY_WIDGET;
+  public static Widget DATANODES_HEALTH_WIDGET;
+  public static Widget NODE_MANAGERS_HEALTH_WIDGET;
+  public static Widget HDFS_REMAINING_WIDGET;
+  public static Widget NAMENODE_MEMORY_WIDGET;
+  public static Widget RESOURCE_MANAGER_MEMORY_WIDGET;
+  public static Widget HBASE_MASTER_MOMORY_WIDGET;
+  public static Widget CPU_UTILIZATION_WIDGET;
+  public static Widget MEMORY_UTILIZATION_WIDGET;
+  public static Widget SWAP_UTILIZATION_WIDGET;
+  public static Widget DISK_UTILIZATION_WIDGET;
+  public static Widget NETWORK_UTILIZATION_WIDGET;
+  public static Widget CPU_HEAPMAP_WIDGET;
+  public static Widget HDFS_UI_WIDGET;
+  public static Widget HBASE_MASTER_UI_WIDGET;
+  public static List<Widget> WIDGET_LIST;
+  
+  public static Dashboard DEFAULT_DASHBOARD;
+  public static Dashboard USER_DASHBOARD;
+  public static Dashboard SYSTEM_DASHBOARD;
+  
+
+  // series examples
+  public static Series CPU_METRICS;
+  
+  // SeriesMetaData examples
+  public static List<SeriesMetaData> CPU_SERIES_METADATA;
+  public static List<SeriesMetaData> HDFS_USAGE_SERIES_METADATA;
+
+  static {
+    try {
+      final String hostname = InetAddress.getLocalHost().getHostName().toLowerCase();
+      final String[] metrics = { "SystemMetrics.LoadAverage.1" };
+      SYSTEM_LOAD_AVERAGE = Chart.createChart("1", "System Load Average", metrics, hostname, "");
+      final String[] cpuMetrics = { "SystemMetrics.cpu.combined", "SystemMetrics.cpu.sys", "SystemMetrics.cpu.user" };
+      CPU_UTILIZATION = Chart.createChart("2", "CPU Utilization", cpuMetrics, hostname, "percent");
+      final String[] memMetrics = { "SystemMetrics.memory.FreePercent", "SystemMetrics.memory.UsedPercent"};
+      MEMORY_UTILIZATION = Chart.createChart("3", "Memory Utilization", memMetrics, hostname, "percent");
+      final String[] diskMetrics = { "SystemMetrics.disk.ReadBytes", "SystemMetrics.disk.WriteBytes" };
+      DISK_UTILIZATION = Chart.createChart("4", "Disk Utilization", diskMetrics, hostname, "bytes-decimal");
+      final String[] netMetrics = { "SystemMetrics.network.TxBytes", "SystemMetrics.network.RxBytes" };
+      NETWORK_UTILIZATION = Chart.createChart("5", "Network Utilization", netMetrics, hostname, "bytes");
+      final String[] swapMetrics = { "SystemMetrics.swap.Total", "SystemMetrics.swap.Used", "SystemMetrics.swap.Free" };
+      SWAP_UTILIZATION = Chart.createChart("6", "Swap Utilization", swapMetrics, hostname, "bytes-decimal");
+
+      // Namenode heap usage
+      StringBuilder namenode = new StringBuilder();
+      namenode.append(hostname);
+      namenode.append(":NameNode");
+      final String[] namenodeHeap = { "HadoopMetrics.jvm.JvmMetrics.MemHeapUsedM", "HadoopMetrics.jvm.JvmMetrics.MemHeapMaxM" };
+      NAMENODE_MEMORY = Chart.createCircle("7", "Namenode Memory", namenodeHeap, namenode.toString(), "%", "up");
+      
+      // HDFS Usage
+      final String[] hdfsUsage = { "HadoopMetrics.dfs.FSNamesystem.CapacityRemainingGB", "HadoopMetrics.dfs.FSNamesystem.CapacityTotalGB" };
+      HDFS_USAGE = Chart.createCircle("8", "HDFS Remaining", hdfsUsage, hostname, "%", "down");
+
+      // Resource Manager Memory
+      StringBuilder rmnode = new StringBuilder();
+      rmnode.append(hostname);
+      rmnode.append(":ResourceManager");
+      final String[] rmHeap = { "HadoopMetrics.jvm.JvmMetrics.MemHeapUsedM", "HadoopMetrics.jvm.JvmMetrics.MemHeapMaxM" };
+      RESOURCE_MANAGER_MEMORY = Chart.createCircle("9", "Resource Manager Memory", rmHeap, rmnode.toString(), "%", "up");
+
+      // Node Managers Health
+      final String[] nmh = { "HadoopMetrics.yarn.ClusterMetrics.NumActiveNMs", "HadoopMetrics.yarn.ClusterMetrics.NumLostNMs" };
+      NODE_MANAGER_HEALTH = Chart.createTile("10", "Node Managers Health", "Node Managers", "Active/Lost", nmh, hostname, "glyphicon-th");
+
+      // High Availability State
+      final String[] ha = { "HadoopMetrics.dfs.FSNamesystem.HAState" };
+      HDFS_HA = Chart.createTile("11", "HDFS High Availability State", "HDFS High Availability", "", ha, hostname, "glyphicon-random");
+
+      // HDFS Load
+      final String[] hdfsLoad = { "HadoopMetrics.dfs.FSNamesystem.TotalLoad" };
+      HDFS_LOAD = Chart.createTile("12", "HDFS Load Average", "HDFS Load", "", hdfsLoad, hostname, "glyphicon-signal");
+
+      // Namenode RPC Latency
+      final String[] nnLatency = { "HadoopMetrics.rpc.rpc.RpcProcessingTimeAvgTime" };
+      NAMENODE_RPC_LATENCY = Chart.createTile("13", "NameNode Latency", "NameNode RPC Latency", "Milliseconds", nnLatency, hostname, "glyphicon-tasks");
+
+      // Datanode Health
+      final String[] dnHealth = { "HadoopMetrics.dfs.FSNamesystem.StaleDataNodes" };
+      DATANODES = Chart.createTile("14", "Datanodes Health", "Datanodes", "Dead", dnHealth, hostname, "glyphicon-hdd");
+
+      // HBase Master Memory
+      StringBuilder hbaseMaster = new StringBuilder();
+      hbaseMaster.append(hostname);
+      hbaseMaster.append(":Master");
+      final String[] hbm = { "HBaseMetrics.jvm.JvmMetrics.MemHeapUsedM", "HBaseMetrics.jvm.JvmMetrics.MemHeapMaxM" };
+      HBASE_MASTER_MEMORY = Chart.createCircle("15", "HBase Master Memory", hbm, hbaseMaster.toString(), "%", "up");
+
+      CPU_SERIES_METADATA = CPU_UTILIZATION.getSeries();
+      HDFS_USAGE_SERIES_METADATA = HDFS_USAGE.getSeries();
+      
+//      CPU_METRICS = new Series("SystemMetrics.LoadAverage.1");
+//      CPU_METRICS.add(1234567890L, 0.0d);
+//      CPU_METRICS.add(1234567891L, 1.0d);
+//      CPU_METRICS.add(1234567892L, 2.0d);
+//      CPU_METRICS.add(1234567893L, 3.0d);
+
+      // Populate default widgets
+      Widget widget = new Widget();
+      widget.setTitle("System Load Average");
+      widget.setSrc(new URI("/hicc/v1/chart/draw/1"));
+      widget.setCol(1);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      SYSTEM_LOAD_AVERAGE_WIDGET = widget;
+
+      // Populate default dashboard
+      Dashboard dashboard = new Dashboard();
+
+      widget = new Widget();
+      widget.setTitle("Welcome Page");
+      widget.setSrc(new URI("/hicc/welcome.html"));
+      widget.setCol(1);
+      widget.setRow(1);
+      widget.setSize_x(10);
+      widget.setSize_y(5);
+      WELCOME_PAGE_WIDGET = widget;
+      dashboard.add(WELCOME_PAGE_WIDGET);
+      DEFAULT_DASHBOARD = dashboard;
+
+      widget = new Widget();
+      widget.setTitle("Trial Downloading");
+      widget.setSrc(new URI("/hicc/home/downloads.html"));
+      widget.setCol(1);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      TRIAL_DOWNLOAD_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Cluster Running");
+      widget.setSrc(new URI("/hicc/home/clusters.html"));
+      widget.setCol(3);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      CLUSTER_RUNNING_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Users Working");
+      widget.setSrc(new URI("/hicc/home/users.html"));
+      widget.setCol(5);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      USER_WORKING_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Applications Running");
+      widget.setSrc(new URI("/hicc/home/apps.html"));
+      widget.setCol(7);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      APP_RUNNING_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Trial Abandon Rate");
+      widget.setSrc(new URI("/hicc/v1/circles/draw/11"));
+      widget.setCol(1);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      TRIAL_ABANDON_RATE_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Clusters Health");
+      widget.setSrc(new URI("/hicc/v1/circles/draw/12"));
+      widget.setCol(3);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      CLUSTERS_HEALTH_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Top Active Clusters");
+      widget.setSrc(new URI("/hicc/clusters/"));
+      widget.setCol(5);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      TOP_ACTIVE_CLUSTERS_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Top Applications");
+      widget.setSrc(new URI("/hicc/apps/"));
+      widget.setCol(7);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      TOP_APP_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Applications Usage");
+      widget.setSrc(new URI("/hicc/apps/apps-usage.html"));
+      widget.setCol(7);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      APP_USAGE_WIDGET = widget;
+
+      // Populate user dashboards
+      dashboard = new Dashboard();
+
+      widget = new Widget();
+      widget.setTitle("Quick Links");
+      widget.setSrc(new URI("/hicc/v1/dashboard/quicklinks"));
+      widget.setCol(1);
+      widget.setRow(1);
+      widget.setSize_x(10);
+      widget.setSize_y(5);
+      QUICK_LINKS_WIDGET = widget;
+      dashboard.add(QUICK_LINKS_WIDGET);
+
+      // Log Search widget
+      widget = new Widget();
+      widget.setTitle("Log Search");
+      widget.setSrc(new URI("/hicc/ajax-solr/chukwa"));
+      widget.setCol(1);
+      widget.setRow(1);
+      widget.setSize_x(6);
+      widget.setSize_y(6);
+      LOG_SEARCH_WIDGET = widget;
+
+      // Applications
+      widget = new Widget();
+      widget.setTitle("YARN Applications");
+      widget.setSrc(new URI("http://localhost:8088/"));
+      widget.setCol(1);
+      widget.setRow(7);
+      widget.setSize_x(6);
+      widget.setSize_y(6);
+      YARN_APP_WIDGET = widget;
+
+      // Hadoop Distributed File System
+      widget = new Widget();
+      widget.setTitle("HDFS");
+      widget.setSrc(new URI("http://localhost:50070/explorer.html#/"));
+      widget.setCol(1);
+      widget.setRow(7);
+      widget.setSize_x(6);
+      widget.setSize_y(6);
+      HDFS_WIDGET = widget;
+
+      // HBase Tables
+      widget = new Widget();
+      widget.setTitle("HBase Tables");
+      widget.setSrc(new URI("http://localhost:50654/tablesDetailed.jsp"));
+      widget.setCol(1);
+      widget.setRow(14);
+      widget.setSize_x(6);
+      widget.setSize_y(6);
+      HBASE_TABLE_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Top Applications");
+      widget.setSrc(new URI("/hicc/apps/"));
+      widget.setCol(1);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      TOP_APP_WIDGET = widget;
+
+      widget = new Widget();
+      widget.setTitle("Top Users");
+      widget.setSrc(new URI("/hicc/users/"));
+      widget.setCol(1);
+      widget.setRow(3);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      TOP_USER_WIDGET = widget;
+      USER_DASHBOARD = dashboard;
+
+      // Populate system dashboards
+      dashboard = new Dashboard();
+      widget = new Widget();
+      widget.setTitle("HDFS High Availability State");
+      widget.setSrc(new URI("/hicc/v1/tile/draw/11"));
+      widget.setCol(1);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      HDFS_HA_STATE_WIDGET = widget;
+      dashboard.add(HDFS_HA_STATE_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("HDFS Load");
+      widget.setSrc(new URI("/hicc/v1/tile/draw/12"));
+      widget.setCol(3);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      HDFS_LOAD_WIDGET = widget;
+      dashboard.add(HDFS_LOAD_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("HDFS Namenode Latency");
+      widget.setSrc(new URI("/hicc/v1/tile/draw/13"));
+      widget.setCol(5);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      HDFS_NAMENODE_LATENCY_WIDGET = widget;
+      dashboard.add(HDFS_NAMENODE_LATENCY_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("Datanodes Health");
+      widget.setSrc(new URI("/hicc/v1/tile/draw/14"));
+      widget.setCol(7);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      DATANODES_HEALTH_WIDGET = widget;
+      dashboard.add(DATANODES_HEALTH_WIDGET);
+      
+      widget = new Widget();
+      widget.setTitle("Node Managers Health");
+      widget.setSrc(new URI("/hicc/v1/tile/draw/10"));
+      widget.setCol(9);
+      widget.setRow(1);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      NODE_MANAGERS_HEALTH_WIDGET = widget;
+      dashboard.add(NODE_MANAGERS_HEALTH_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("HDFS Remaining");
+      widget.setSrc(new URI("/hicc/v1/circles/draw/8"));
+      widget.setCol(1);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      HDFS_REMAINING_WIDGET = widget;
+      dashboard.add(HDFS_REMAINING_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("Namenode Memory");
+      widget.setSrc(new URI("/hicc/v1/circles/draw/7"));
+      widget.setCol(3);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      NAMENODE_MEMORY_WIDGET = widget;
+      dashboard.add(NAMENODE_MEMORY_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("Resource Manager Memory");
+      widget.setSrc(new URI("/hicc/v1/circles/draw/9"));
+      widget.setCol(5);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      RESOURCE_MANAGER_MEMORY_WIDGET = widget;
+      dashboard.add(RESOURCE_MANAGER_MEMORY_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("HBase Master Memory");
+      widget.setSrc(new URI("/hicc/v1/circles/draw/15"));
+      widget.setCol(7);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(2);
+      HBASE_MASTER_MOMORY_WIDGET = widget;
+      dashboard.add(HBASE_MASTER_MOMORY_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("System Load Average");
+      widget.setSrc(new URI("/hicc/v1/chart/draw/1"));
+      widget.setCol(9);
+      widget.setRow(2);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      SYSTEM_LOAD_AVERAGE_WIDGET = widget;
+      dashboard.add(SYSTEM_LOAD_AVERAGE_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("CPU Utilization");
+      widget.setSrc(new URI("/hicc/v1/chart/draw/2"));
+      widget.setCol(9);
+      widget.setRow(3);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      CPU_UTILIZATION_WIDGET = widget;
+      dashboard.add(CPU_UTILIZATION_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("Memory Utilization");
+      widget.setSrc(new URI("/hicc/v1/chart/draw/3"));
+      widget.setCol(9);
+      widget.setRow(4);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      MEMORY_UTILIZATION_WIDGET = widget;
+      dashboard.add(MEMORY_UTILIZATION_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("Swap Utilization");
+      widget.setSrc(new URI("/hicc/v1/chart/draw/6"));
+      widget.setCol(9);
+      widget.setRow(5);
+      widget.setSize_x(2);
+      widget.setSize_y(1);
+      SWAP_UTILIZATION_WIDGET = widget;
+      dashboard.add(SWAP_UTILIZATION_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("Disk Utilization");
+      widget.setSrc(new URI("/hicc/v1/chart/draw/4"));
+      widget.setCol(1);
+      widget.setRow(4);
+      widget.setSize_x(4);
+      widget.setSize_y(2);
+      DISK_UTILIZATION_WIDGET = widget;
+      dashboard.add(DISK_UTILIZATION_WIDGET);
+
+      widget = new Widget();
+      widget.setTitle("Network Utilization");
+      widget.setSrc(new URI("/hicc/v1/chart/draw/5"));
+      widget.setCol(5);
+      widget.setRow(4);
+      widget.setSize_x(4);
+      widget.setSize_y(2);
+      NETWORK_UTILIZATION_WIDGET = widget;
+      dashboard.add(NETWORK_UTILIZATION_WIDGET);
+      SYSTEM_DASHBOARD = dashboard;
+
+      // CPU heatmap
+      widget = new Widget();
+      widget.setTitle("CPU Heatmap");
+      widget.setSrc(new URI("/hicc/v1/heatmap/render/SystemMetrics/cpu.combined."));
+      widget.setCol(1);
+      widget.setRow(5);
+      widget.setSize_x(6);
+      widget.setSize_y(5);
+      CPU_HEAPMAP_WIDGET = widget;
+
+      // HDFS Namenode
+      widget = new Widget();
+      widget.setTitle("HDFS UI");
+      widget.setSrc(new URI("http://localhost:50070/"));
+      widget.setCol(1);
+      widget.setRow(11);
+      widget.setSize_x(6);
+      widget.setSize_y(6);
+      HDFS_UI_WIDGET = widget;
+
+      // HBase Master
+      widget = new Widget();
+      widget.setTitle("HBase Master UI");
+      widget.setSrc(new URI("http://localhost:16010/"));
+      widget.setCol(1);
+      widget.setRow(18);
+      widget.setSize_x(6);
+      widget.setSize_y(6);
+      HBASE_MASTER_UI_WIDGET = widget;
+
+      WIDGET_LIST = new ArrayList<Widget>();
+      WIDGET_LIST.add(HDFS_HA_STATE_WIDGET);
+      WIDGET_LIST.add(HDFS_UI_WIDGET);
+      WIDGET_LIST.add(HDFS_LOAD_WIDGET);
+    } catch (URISyntaxException e) {
+    } catch (UnknownHostException e) {
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/HeatmapController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/HeatmapController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/HeatmapController.java
index 80f7457..f81db6b 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/HeatmapController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/HeatmapController.java
@@ -46,6 +46,24 @@ public class HeatmapController {
   @Context
   VelocityEngine velocity;
 
+  /**
+   * Render a heatmap
+   * @param request is HTTP request object
+   * @param metricGroup is metric group name
+   * @param metric is metric name
+   * @param start is start time in yyyyMMddHHmmss format
+   * @param end is end time in yyyyMMddHHmmss format
+   * @param max is maximum possible value of the heatmap
+   * @param scale is the range of possible values
+   * @param width is width of the image
+   * @param height is height of the image
+   * @return html page of login screen
+   * 
+   * @response.representation.200.doc Login screen
+   * @response.representation.200.mediaType text/html
+   * @response.representation.200.example Example available in HICC UI
+   */
+
   @GET
   @Path("{metricGroup}/{metric}")
   @Produces(MediaType.APPLICATION_JSON)
@@ -81,6 +99,17 @@ public class HeatmapController {
     return heatmap;
   }
   
+  /**
+   * Render a heatmap from HBase series
+   * 
+   * @param metricGroup is metric group name
+   * @param metric is metric name
+   * @param width is width of the image
+   * @param height is height of the image
+   * @param title is title of the heatmap
+   * @param yLabel is y axis label for the heatmap
+   * @return heatmap chart in html
+   */
   @GET
   @Path("render/{metricGroup}/{metric}")
   @Produces(MediaType.TEXT_HTML)

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/LoginController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/LoginController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/LoginController.java
index d3413a4..4ae3fca 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/LoginController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/LoginController.java
@@ -44,6 +44,16 @@ public class LoginController {
     ChukwaHBaseStore.populateDefaults();
   }
 
+  /**
+   * Password verification login screen
+   * 
+   * @param buffer holds any user input
+   * @return html page of login screen
+   * 
+   * @response.representation.200.doc Login screen
+   * @response.representation.200.mediaType text/html
+   * @response.representation.200.example Example available in HICC UI
+   */
   @GET
   @Path("check")
   public String login(String buffer) {
@@ -60,6 +70,19 @@ public class LoginController {
     return sw.toString();
   }
 
+  /**
+   * Password verification REST API
+   * 
+   * @param request is HTTP request object
+   * @return login status code
+   * 
+   * @response.representation.200.doc User login successful
+   * @response.representation.200.mediaType text/plain
+   * @response.representation.200.example 200 OK
+   * @response.representation.403.doc Login denied
+   * @response.representation.403.mediaType text/plain
+   * @response.representation.403.example 403 FORBIDDEN
+   */
   @POST
   @Path("check")
   public Response check(@Context HttpServletRequest request) {

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/MetricsController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/MetricsController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/MetricsController.java
index c3f3746..a88ac1d 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/MetricsController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/MetricsController.java
@@ -87,6 +87,18 @@ public class MetricsController {
     return buffer;
   }
 
+  /**
+   * Query metric series by session key, this is useful to query same metric from
+   * multiple data sources, such as multiple hosts
+   * 
+   * @param request is HTTP request object
+   * @param metricGroup is metric group name
+   * @param metric is metric name
+   * @param skey is session key which maps to multiple data sources
+   * @param start is start time
+   * @param end is end time
+   * @return List of metric series
+   */
   @GET
   @Path("series/{metricGroup}/{metric}/session/{sessionKey}")
   @Produces("application/json")
@@ -131,6 +143,11 @@ public class MetricsController {
     return buffer;
   }
 
+  /**
+   * Query all metric group names in HBase
+   * 
+   * @return a list of metric groups
+   */
   @GET
   @Path("schema")
   @Produces("application/json")
@@ -141,6 +158,13 @@ public class MetricsController {
     return groups;
   }
   
+  /**
+   * Query metric names by metric group
+   * 
+   * @param metricGroup is name of metric group
+   * @return a list of metric names
+   * 
+   */
   @GET
   @Path("schema/{metricGroup}")
   @Produces("application/json")
@@ -151,6 +175,14 @@ public class MetricsController {
     return metrics;
   }
 
+  /**
+   * Query metrics source names by metric group
+   * 
+   * @param request HTTP Request object
+   * @param metricGroup is name of metric group
+   * @return a list of metric source names
+   * 
+   */
   @GET
   @Path("source/{metricGroup}")
   @Produces("application/json")

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/PieChartController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/PieChartController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/PieChartController.java
index 8f33af8..7baec8a 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/PieChartController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/PieChartController.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
@@ -58,6 +59,10 @@ public class PieChartController extends ChartController{
    * 
    * @param id Reference ID of Chart stored in HBase chukwa_meta table.
    * @return html chart widget
+   * 
+   * @response.representation.200.doc Preview a pie chart
+   * @response.representation.200.mediaType text/html
+   * @response.representation.200.example Example available in HICC UI
    */
   @GET
   @Path("draw/{id}")
@@ -86,9 +91,17 @@ public class PieChartController extends ChartController{
 
   /**
    * Preview a pie chart
+   * 
+   * @param buffer is pie chart object
+   * 
+   * @response.representation.200.doc Preview a pie chart
+   * @response.representation.200.mediaType text/html
+   * @response.representation.200.example Example available in HICC UI
    */
   @PUT
   @Path("preview")
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Produces(MediaType.TEXT_HTML)
   public String preview(String buffer) {
     VelocityContext context = new VelocityContext();
     StringWriter sw = null;
@@ -111,8 +124,20 @@ public class PieChartController extends ChartController{
     return sw.toString();
   }
 
+  /**
+   * Preview a series JSON for pie chart
+   * 
+   * @param request HTTP request object
+   * @param buffer is pie chart configuration
+   * 
+   * @request.representation.example {@link Examples#CPU_SERIES_METADATA}
+   * @response.representation.200.doc Preview a pie chart series
+   * @response.representation.200.mediaType application/json
+   * @response.representation.200.example Example available in REST API
+   */
   @PUT
   @Path("preview/series")
+  @Consumes(MediaType.APPLICATION_JSON)
   @Produces("application/json")
   public String previewSeries(@Context HttpServletRequest request, String buffer) {
     Type listType = new TypeToken<ArrayList<SeriesMetaData>>() {

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/SessionController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/SessionController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/SessionController.java
index be4afb5..f1c670c 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/SessionController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/SessionController.java
@@ -24,6 +24,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
@@ -44,6 +45,7 @@ public class SessionController {
 
   /**
    * Utility to get session attributes
+   * 
    * @param request is HTTP request object
    * @param id is session key
    * @return session attribute
@@ -60,7 +62,15 @@ public class SessionController {
     return json;
   }
 
+  /**
+   * Store session attributes
+   * 
+   * @param request is HTTP request object
+   * @param buffer is session key value pairs in JSON
+   * @return session update status code
+   */
   @PUT
+  @Consumes(MediaType.APPLICATION_JSON)
   @Path("save")
   public Response save(@Context HttpServletRequest request, String buffer) {
     Gson gson = new Gson();

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/TileController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/TileController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/TileController.java
index 8e259a9..1bd7c79 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/TileController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/TileController.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
@@ -57,6 +58,10 @@ public class TileController extends ChartController{
    * 
    * @param id Reference ID of Chart stored in HBase chukwa_meta table.
    * @return html chart widget
+   * 
+   * @response.representation.200.doc Render a banner base on chart id
+   * @response.representation.200.mediaType text/html
+   * @response.representation.200.example Example available in HICC UI
    */
   @GET
   @Path("draw/{id}")
@@ -84,9 +89,18 @@ public class TileController extends ChartController{
 
   /**
    * Preview a banner tile
+   * 
+   * @param buffer is tile object in JSON
+   * @return html for rendering a banner tile
+   * 
+   * @response.representation.200.doc Preview a banner
+   * @response.representation.200.mediaType text/html
+   * @response.representation.200.example Example available in HICC UI
    */
   @PUT
   @Path("preview")
+  @Consumes(MediaType.APPLICATION_JSON)
+  @Produces(MediaType.TEXT_HTML)
   public String preview(String buffer) {
     VelocityContext context = new VelocityContext();
     StringWriter sw = null;
@@ -108,9 +122,20 @@ public class TileController extends ChartController{
     return sw.toString();
   }
 
+  /**
+   * Preview a series JSON for banner tile
+   * 
+   * @param request HTTP request object
+   * @param buffer is banner tile configuration
+   * 
+   * @request.representation.example {@link Examples#CPU_SERIES_METADATA}
+   * @response.representation.200.doc Preview a banner series
+   * @response.representation.200.mediaType application/json
+   * @response.representation.200.example Example available in REST API
+   */
   @PUT
   @Path("preview/series")
-  @Produces("application/json")
+  @Produces(MediaType.APPLICATION_JSON)
   public String previewSeries(@Context HttpServletRequest request, String buffer) {
     Type listType = new TypeToken<ArrayList<SeriesMetaData>>() {
     }.getType();

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/java/org/apache/hadoop/chukwa/hicc/rest/WidgetController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/WidgetController.java b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/WidgetController.java
index 5ea2dd0..a093893 100644
--- a/src/main/java/org/apache/hadoop/chukwa/hicc/rest/WidgetController.java
+++ b/src/main/java/org/apache/hadoop/chukwa/hicc/rest/WidgetController.java
@@ -30,6 +30,7 @@ import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
@@ -55,8 +56,20 @@ public class WidgetController {
   public void init() {
   }
 
+  /**
+   * List widgets
+   * 
+   * @param limit is number of widgets to return
+   * @param offset is position in the widget list
+   * @return list of widgets in HBase database
+   * 
+   * @response.representation.200.doc Display list of HICC supported widgets
+   * @response.representation.200.mediaType application/json
+   * @response.representation.200.example {@link Examples#WIDGET_LIST}
+   */
   @GET
   @Path("list")
+  @Produces(MediaType.APPLICATION_JSON)
   public String listWidget(@DefaultValue("1000") @QueryParam("limit") int limit, 
       @DefaultValue("0") @QueryParam("offset") int offset) {
     List<Widget> widgets = ChukwaHBaseStore.listWidget(limit, offset);
@@ -65,6 +78,15 @@ public class WidgetController {
     return json;
   }
 
+  /**
+   * Search for widget base on widget title
+   * @param query is search critieria
+   * @return list of widgets matched search critieria
+   * 
+   * @response.representation.200.doc Display list of HICC widget that matches query
+   * @response.representation.200.mediaType application/json
+   * @response.representation.200.example {@link Examples#WIDGET_LIST}
+   */
   @GET
   @Path("search/{query}")
   public String searchWidget(@PathParam("query") String query) {
@@ -74,6 +96,15 @@ public class WidgetController {
     return json;
   }
 
+  /**
+   * View widget details
+   * @param title is title of the widget
+   * @return widget configuration
+   * 
+   * @response.representation.200.doc View widget details
+   * @response.representation.200.mediaType application/json
+   * @response.representation.200.example {@link Examples#SYSTEM_LOAD_AVERAGE_WIDGET}
+   */
   @GET
   @Path("view/{title}")
   public String viewWidget(@PathParam("title") String title) {
@@ -83,6 +114,19 @@ public class WidgetController {
     return json;
   }
 
+  /**
+   * Create a widget
+   * @param buffer is widget configuration
+   * @return Creation status code
+   * 
+   * @request.representation.example {@link Examples#WELCOME_PAGE_WIDGET}
+   * @response.representation.200.doc Widget creation successful
+   * @response.representation.200.mediaType text/plain
+   * @response.representation.200.example 200 OK
+   * @response.representation.400.doc Widget creation unsuccessful
+   * @response.representation.400.mediaType text/plain
+   * @response.representation.400.example 400 Bad Request
+   */
   @POST
   @Path("create")
   @Consumes(MediaType.APPLICATION_JSON)
@@ -96,6 +140,20 @@ public class WidgetController {
     return Response.ok().build();
   }
 
+  /**
+   * Update a widget
+   * @param title is widget title
+   * @param buffer is widget object in JSON
+   * @return Update status code
+   * 
+   * @request.representation.example {@link Examples#WELCOME_PAGE_WIDGET}
+   * @response.representation.200.doc Widget update is successful
+   * @response.representation.200.mediaType text/plain
+   * @response.representation.200.example 200 OK
+   * @response.representation.400.doc Widget update unsuccessful
+   * @response.representation.400.mediaType text/plain
+   * @response.representation.400.example 400 Bad Request
+   */
   @PUT
   @Path("update/{title}")
   @Consumes(MediaType.APPLICATION_JSON)
@@ -109,6 +167,18 @@ public class WidgetController {
     return Response.ok().build();
   }
 
+  /**
+   * Delete a widget
+   * @param title is widget title
+   * @return Widget delete status code
+   * 
+   * @response.representation.200.doc Widget deletion successful
+   * @response.representation.200.mediaType text/plain
+   * @response.representation.200.example 200 OK
+   * @response.representation.400.doc Widget deletion unsuccessful
+   * @response.representation.400.mediaType text/plain
+   * @response.representation.400.example 400 Bad Request
+   */
   @DELETE
   @Path("delete/{title}")
   public Response deleteWidget(@PathParam("title") String title) {

http://git-wip-us.apache.org/repos/asf/chukwa/blob/e0bf3c0e/src/main/webapps/wadl.xsl
----------------------------------------------------------------------
diff --git a/src/main/webapps/wadl.xsl b/src/main/webapps/wadl.xsl
index eca8de7..7af2ff4 100644
--- a/src/main/webapps/wadl.xsl
+++ b/src/main/webapps/wadl.xsl
@@ -379,8 +379,64 @@
           </xsl:choose>
       </xsl:for-each>
     </xsl:when>
+    <xsl:when test="@mediaType = 'text/html'">
+      <xsl:for-each select="wadl:doc">
+        <xsl:sort select="position()" data-type="number" order="descending"/>
+          <xsl:if test="position() > 1"><br/></xsl:if>
+          <xsl:if test="@title and local-name(..) != 'application'">
+              <xsl:value-of select="@title"/>:
+          </xsl:if>
+          <xsl:choose>
+            <xsl:when test="@title = 'Example'">
+              <xsl:variable name="url">
+                <xsl:choose>
+                  <xsl:when test="string-length($base) > 0">
+                    <xsl:call-template name="getFullResourcePath">
+                      <xsl:with-param name="base" select="$base"/>                
+                      <xsl:with-param name="path" select="text()"/>
+                    </xsl:call-template>
+                  </xsl:when>
+                  <xsl:otherwise><xsl:value-of select="text()"/></xsl:otherwise>
+                </xsl:choose>
+              </xsl:variable>
+              <a href="{$url}"><xsl:value-of select="$url"/></a>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:apply-templates select="node()" mode="copy"/>
+            </xsl:otherwise>
+          </xsl:choose>
+      </xsl:for-each>
+    </xsl:when>
+    <xsl:when test="@mediaType = 'text/plain'">
+      <xsl:for-each select="wadl:doc">
+        <xsl:sort select="position()" data-type="number" order="descending"/>
+          <xsl:if test="position() > 1"><br/></xsl:if>
+          <xsl:if test="@title and local-name(..) != 'application'">
+              <xsl:value-of select="@title"/>:
+          </xsl:if>
+          <xsl:choose>
+            <xsl:when test="@title = 'Example'">
+              <xsl:variable name="url">
+                <xsl:choose>
+                  <xsl:when test="string-length($base) > 0">
+                    <xsl:call-template name="getFullResourcePath">
+                      <xsl:with-param name="base" select="$base"/>                
+                      <xsl:with-param name="path" select="text()"/>
+                    </xsl:call-template>
+                  </xsl:when>
+                  <xsl:otherwise><xsl:value-of select="text()"/></xsl:otherwise>
+                </xsl:choose>
+              </xsl:variable>
+              <a href="{$url}"><xsl:value-of select="$url"/></a>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:apply-templates select="node()" mode="copy"/>
+            </xsl:otherwise>
+          </xsl:choose>
+      </xsl:for-each>
+    </xsl:when>
     <xsl:otherwise>
-      Example for <xsl:value-of select="@mediaType"/> is available in /rest/v2/application.wadl
+      Example for <xsl:value-of select="@mediaType"/> is available in REST API.
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template>