
com.centurylink.mdw.dataaccess.reports.ActivityAggregation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mdw-common Show documentation
Show all versions of mdw-common Show documentation
MDW is a microservices based workflow framework
package com.centurylink.mdw.dataaccess.reports;
import com.centurylink.mdw.common.service.Query;
import com.centurylink.mdw.common.service.ServiceException;
import com.centurylink.mdw.dataaccess.DataAccessException;
import com.centurylink.mdw.dataaccess.PreparedSelect;
import com.centurylink.mdw.dataaccess.PreparedWhere;
import com.centurylink.mdw.model.workflow.ActivityAggregate;
import com.centurylink.mdw.model.workflow.WorkStatus;
import com.centurylink.mdw.model.workflow.WorkStatuses;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.*;
public class ActivityAggregation extends AggregateDataAccess {
public List getTops(Query query) throws DataAccessException, ServiceException {
String by = query.getFilter("by");
if (by == null)
throw new ServiceException(ServiceException.BAD_REQUEST, "Missing required filter: 'by'");
try {
db.openConnection();
if (by.equals("throughput"))
return getTopsByStuck(query);
else if (by.equals("status"))
return getTopsByStatus(query);
else
throw new ServiceException(ServiceException.BAD_REQUEST, "Unsupported filter: by=" + by);
}
catch (SQLException | ParseException ex) {
throw new DataAccessException(ex.getMessage(), ex);
}
finally {
db.closeConnection();
}
}
private List getTopsByStuck(Query query)
throws ParseException, DataAccessException, SQLException, ServiceException {
PreparedWhere preparedWhere = getActivityWhere(query);
String sql = "select count(act_unique_id) as ct, act_unique_id\n" +
getUniqueIdFrom() +
preparedWhere.getWhere() +
") a1\n" +
"group by act_unique_id\n" +
"order by ct desc\n";
PreparedSelect preparedSelect = new PreparedSelect(sql, preparedWhere.getParams(),"ActivityAggregation.getTopsByStuck()");
return getTopAggregates(query, preparedSelect, resultSet -> {
ActivityAggregate activityAggregate = new ActivityAggregate(resultSet.getLong("ct"));
String actId = resultSet.getString("act_unique_id");
activityAggregate.setActivityId(actId);
int colon = actId.lastIndexOf(":");
activityAggregate.setProcessId(new Long(actId.substring(0, colon)));
activityAggregate.setDefinitionId(actId.substring(colon + 1));
return activityAggregate;
});
}
private String getUniqueIdFrom() {
if (db.isMySQL())
return "from (select CONCAT(pi.PROCESS_ID, ':A', ai.ACTIVITY_ID) as ACT_UNIQUE_ID from ACTIVITY_INSTANCE ai, PROCESS_INSTANCE pi ";
else
return "from (select pi.PROCESS_ID || ':A' || ai.ACTIVITY_ID as ACT_UNIQUE_ID from ACTIVITY_INSTANCE ai, PROCESS_INSTANCE pi ";
}
private List getTopsByStatus(Query query)
throws ParseException, DataAccessException, SQLException, ServiceException {
PreparedWhere preparedWhere = getActivityWhere(query);
String sql = "select status_cd, count(status_cd) as ct " +
"from ACTIVITY_INSTANCE ai\n" +
preparedWhere.getWhere() +
"group by status_cd\n" +
"order by ct desc\n";
PreparedSelect preparedSelect = new PreparedSelect(sql, preparedWhere.getParams(),"ActivityAggregation.getTopsByStatus()");
return getTopAggregates(query, preparedSelect, resultSet -> {
long ct = Math.round(resultSet.getDouble("ct"));
ActivityAggregate activityAggregate = new ActivityAggregate(ct);
activityAggregate.setCount(ct);
activityAggregate.setId(resultSet.getInt("status_cd"));
return activityAggregate;
});
}
public TreeMap> getBreakdown(Query query) throws DataAccessException, ServiceException {
String by = query.getFilter("by");
if (by == null)
throw new ServiceException(ServiceException.BAD_REQUEST, "Missing required filter: 'by'");
try {
PreparedWhere preparedWhere = getActivityWhere(query);
StringBuilder sql = new StringBuilder();
if (by.equals("status"))
sql.append("select count(a.status_cd) as ct, a.st, a.status_cd\n");
else if (by.equals("throughput"))
sql.append("select count(a.act_unique_id) as ct, a.st, a.act_unique_id\n");
else if (by.equals("total"))
sql.append("select count(a.st) as ct, a.st\n");
if (db.isMySQL())
sql.append("from (select date(ai.start_dt) as st");
else
sql.append("from (select to_char(ai.start_dt,'DD-Mon-yyyy') as st");
if (by.equals("status"))
sql.append(", ai.status_cd ");
else if (by.equals("throughput")) {
if (db.isMySQL())
sql.append(", CONCAT(pi.PROCESS_ID, ':A', ai.ACTIVITY_ID) as act_unique_id");
else
sql.append(", pi.PROCESS_ID || ':A' || ai.ACTIVITY_ID as act_unique_id");
}
sql.append(" from ACTIVITY_INSTANCE ai ");
if (by.equals("throughput"))
sql.append(", PROCESS_INSTANCE pi");
sql.append("\n");
sql.append(preparedWhere.getWhere());
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy