@Override
  public String execute() throws Exception {
    Connection conn = null;
    List<Slice> slices = new LinkedList<Slice>();
    try {
      conn = Constants.DATASOURCE.getConnection();
      PreparedStatement stmt =
          conn.prepareStatement(SqlQuery.SERVICES_ON_HOSTS_BY_PROJECT.getSql());
      stmt.setInt(1, idProject);

      ResultSet rs = stmt.executeQuery();

      while (rs.next()) {
        String name = rs.getString("name") == null ? rs.getString("ip") : rs.getString("name");
        int count = rs.getInt("conteggio");
        Slice slice = new Slice();
        slice.setLabel(name + "[" + count + "]");
        slice.setTooltip(name + "\n" + count + " running services");
        slice.setValue(count);
        slices.add(slice);
      }
      rs.close();
      stmt.close();
    } catch (SQLException e) {
      return ERROR;
    } finally {
      if (conn != null) conn.close();
    }
    String[] colors = {
      "000000", "0000ff", "00ffff", "00ff00", "ffff00", "ff0000", "ff00ff", "ffffff"
    };
    if (slices.size() != 0) {
      int increment = 0;
      for (Slice slice : slices) {
        slice.setColour("#" + colors[increment]);
        increment = (increment + 1) % colors.length;
      }
      if (slices.size() % colors.length == 1) slices.get(slices.size() - 1).setColour(colors[1]);
    }
    pieChart = new PieChart();
    List<ElementPie> elements = new LinkedList<ElementPie>();
    ElementPie element = new ElementPie();
    element.setAlpha(0.9f);
    pieChart.setTitle(
        new Title(
            "Services Distribution",
            "{" + getText("avgProjectActivityPieChart.title.style") + "}"));
    element.setValues(slices);
    element.setGradientFill(true);
    element.setRadius(50);
    element.setStartAngle(0);
    elements.add(element);
    pieChart.setBg_colour(getText("chart.defaultBgColor"));
    pieChart.setBorder(1);
    pieChart.setAnimate(true);
    pieChart.setElements(elements);

    return SUCCESS;
  }
  @Override
  public String execute() throws Exception {
    Connection conn = null;
    PreparedStatement cStmt = null;
    String query;
    try {
      conn = Constants.DATASOURCE.getConnection();
      Long step = (super.cF.getTimeInMillis() - super.cI.getTimeInMillis()) / 1000;
      step = step / super.spansNumber + (step % super.spansNumber == 0L ? 0 : 1); // round up

      cI.add(Calendar.SECOND, (int) (start * step));
      Calendar c = null;
      if (limit != null && limit <= super.spansNumber)
        (c = (Calendar) cI.clone()).add(Calendar.SECOND, (int) (limit * step));
      else c = (Calendar) cF.clone();
      if (c.before(cF)) cF = c;

      // CallableStatement cStmt = conn.prepareCall(SqlQuery.SP_RTT_CHART.getSql());
      // cStmt.setInt(1, super.idServiceInstance);
      // cStmt.setTimestamp(2, new Timestamp(super.cI.getTimeInMillis()));
      // cStmt.setTimestamp(3, new Timestamp(super.cF.getTimeInMillis()));
      // cStmt.setLong(4, step);

      table = new ActivityTable();
      List<ActivityRecord> records = new LinkedList<ActivityRecord>();
      DateFormat formatter = new DateFormat(getLocale().getLanguage());
      c = (Calendar) cI.clone();
      // boolean hadResults = cStmt.execute();
      boolean fullTime = step < 60;

      if (step > 0) {
        while (c.getTimeInMillis() < cF.getTimeInMillis()) {

          query =
              "SELECT AVG(elapsedTime) as avgRtt FROM  esgf_dashboard.service_status WHERE idServiceInstance=";
          query = query + super.idServiceInstance;
          query = query + " AND timestamp between '";
          query = query + new Timestamp(c.getTimeInMillis()) + "' AND '";

          // while(hadResults) {
          // ResultSet rs = cStmt.getResultSet();
          ActivityRecord record = new ActivityRecord();
          record.setStartDate(formatter.formatDate(c));
          record.setStartTime(formatter.formatTime(c, fullTime));
          c.add(Calendar.SECOND, step.intValue());

          query = query + new Timestamp(c.getTimeInMillis()) + "'";
          // System.out.println("|||->>> RTTTableAction Query = "+query);

          cStmt = conn.prepareStatement(query);
          ResultSet rs = cStmt.executeQuery();

          record.setEndDate(formatter.formatDate(c));
          record.setEndTime(formatter.formatTime(c, fullTime));
          record.setValues(new LinkedList<Number>());
          if (rs.next() && rs.getBigDecimal("avgRtt") != null)
            record
                .getValues()
                .add(Math.round(rs.getBigDecimal("avgRtt").doubleValue() / 10.) / 100.);
          else record.getValues().add(null);
          records.add(record);
          // hadResults = cStmt.getMoreResults();
        } // endwhile
      } // endif
      cStmt.close();
      table.setActivityRecords(records);
      table.setTotalCount(super.spansNumber);
    } catch (SQLException e) {
      return ERROR;
    } finally {
      if (conn != null) conn.close();
    }
    return SUCCESS;
  }