@Override
 public void run() {
   long before = System.currentTimeMillis();
   try {
     List<ListMetricQueueItem> dataBatch = Lists.newArrayList();
     dataQueue.drainTo(dataBatch);
     ThruputMetrics.addDataPoint(MonitoredAction.LIST_METRIC_SIZE, dataBatch.size());
     long t2 = System.currentTimeMillis();
     dataBatch = prune(dataBatch);
     long t3 = System.currentTimeMillis();
     ThruputMetrics.addDataPoint(MonitoredAction.LIST_METRIC_PRUNE, t3 - t2);
     List<ListMetric> listMetrics = convertToListMetrics(dataBatch);
     long t4 = System.currentTimeMillis();
     ThruputMetrics.addDataPoint(MonitoredAction.LIST_METRIC_CONVERT, t4 - t3);
     ListMetricManager.addMetricBatch(listMetrics);
     long t5 = System.currentTimeMillis();
     ThruputMetrics.addDataPoint(MonitoredAction.LIST_METRIC_MERTIC_ADD_BATCH, t5 - t4);
   } catch (Throwable ex) {
     LOG.debug("ListMetricQueue:error");
     ex.printStackTrace();
     LOG.error(ex, ex);
   } finally {
     ThruputMetrics.addDataPoint(
         MonitoredAction.LIST_METRIC_TIMING, System.currentTimeMillis() - before);
   }
 }
 private static List<ListMetric> convertToListMetrics(List<ListMetricQueueItem> dataBatch) {
   if (dataBatch == null) return null;
   List<ListMetric> listMetrics = Lists.newArrayList();
   for (ListMetricQueueItem item : dataBatch) {
     listMetrics.add(
         ListMetricManager.createListMetric(
             item.getAccountId(),
             item.getMetricName(),
             item.getMetricType(),
             item.getNamespace(),
             item.getDimensionMap()));
   }
   return listMetrics;
 }