use of com.axway.ats.log.autodb.entities.Statistic in project ats-framework by Axway.
the class DbReadAccess method getCheckpointStatistics.
public List<Statistic> getCheckpointStatistics(float timeOffset, String testcaseIds, String actionNames, Set<String> expectedSingleActionUIDs, Set<String> expectedCombinedActionUIDs) throws DatabaseAccessException {
List<Statistic> allStatistics = new ArrayList<Statistic>();
String sqlLog = new SqlRequestFormatter().add("fdate", formatDateFromEpoch(timeOffset)).add("testcase ids", testcaseIds).add("checkpoint names", actionNames).format();
Map<String, Integer> fakeStatisticIds = new HashMap<String, Integer>();
/*
* The DB does not contain combined statistics, so we must create them.
*
* All statistics with same name are combined in one statistic(no matter how many queues are).
* In cases when there are more than one hits at same timestamp, we do not sum the values, but we
* pass the same number of statistics for this timestamp - users see balloon marker on Test Explorer
*/
Map<String, Statistic> combinedStatistics = new HashMap<String, Statistic>();
Map<String, Integer> combinedStatisticHitsAtSameTimestamp = new HashMap<String, Integer>();
Connection connection = getConnection();
CallableStatement callableStatement = null;
ResultSet rs = null;
try {
callableStatement = connection.prepareCall("{ call sp_get_checkpoint_statistics(?, ?, ?) }");
callableStatement.setString(1, formatDateFromEpoch(timeOffset));
callableStatement.setString(2, testcaseIds);
callableStatement.setString(3, actionNames);
int numberRecords = 0;
rs = callableStatement.executeQuery();
while (rs.next()) {
// add new statistic
Statistic statistic = new Statistic();
statistic.name = rs.getString("statsName");
statistic.parentName = rs.getString("queueName");
statistic.unit = "ms";
statistic.value = rs.getFloat("value");
statistic.timestamp = rs.getLong("statsAxisTimestamp");
// Checkpoints will be collected and displayed for testcase
statistic.machineId = 0;
statistic.testcaseId = rs.getInt("testcaseId");
statistic.statisticTypeId = getStatisticFakeId(START_FAKE_ID_VALUE_FOR_CHECKPOINTS, fakeStatisticIds, statistic);
// add to single statistics
if (expectedSingleActionUIDs.contains(statistic.getUid())) {
allStatistics.add(statistic);
}
// add to combined statistics
if (expectedCombinedActionUIDs.contains(statistic.getCombinedStatisticUid())) {
String statisticKey = statistic.timestamp + "->" + statistic.name;
Integer timesHaveThisStatisticAtThisTimestamp = combinedStatisticHitsAtSameTimestamp.get(statisticKey);
Statistic combinedStatistic;
if (timesHaveThisStatisticAtThisTimestamp == null) {
// create a new combined statistic
combinedStatistic = new Statistic();
combinedStatistic.name = statistic.name;
combinedStatistic.parentName = Statistic.COMBINED_STATISTICS_CONTAINER;
combinedStatistic.unit = statistic.unit;
combinedStatistic.timestamp = statistic.timestamp;
combinedStatistic.machineId = statistic.machineId;
combinedStatistic.testcaseId = statistic.testcaseId;
// this is the first such statistic at this timestamp
timesHaveThisStatisticAtThisTimestamp = 1;
} else {
// create another copy of this statistic
combinedStatistic = combinedStatistics.get(statisticKey + "->" + timesHaveThisStatisticAtThisTimestamp).newInstance();
// we already had such statistic at this timestamp
timesHaveThisStatisticAtThisTimestamp++;
}
combinedStatistic.value = statistic.value;
combinedStatistic.statisticTypeId = getStatisticFakeId(START_FAKE_ID_VALUE_FOR_CHECKPOINTS, fakeStatisticIds, combinedStatistic);
// remember how many times we got same statistic at same timestamp
combinedStatisticHitsAtSameTimestamp.put(statisticKey, timesHaveThisStatisticAtThisTimestamp);
// Remember this statistic in the list
// The way we create the map key assures the proper time ordering
combinedStatistics.put(statisticKey + "->" + timesHaveThisStatisticAtThisTimestamp, combinedStatistic);
}
numberRecords++;
}
if (combinedStatistics.size() > 0) {
// sort the combined statistics by their timestamps
List<Statistic> sortedStatistics = new ArrayList<Statistic>(combinedStatistics.values());
Collections.sort(sortedStatistics, new Comparator<Statistic>() {
@Override
public int compare(Statistic stat1, Statistic stat2) {
return (int) (stat1.timestamp - stat2.timestamp);
}
});
// add the combined statistics to the others
allStatistics.addAll(sortedStatistics);
}
logQuerySuccess(sqlLog, "action response statistics", numberRecords);
} catch (Exception e) {
throw new DatabaseAccessException("Error when " + sqlLog, e);
} finally {
DbUtils.closeResultSet(rs);
DbUtils.close(connection, callableStatement);
}
return allStatistics;
}
use of com.axway.ats.log.autodb.entities.Statistic in project ats-framework by Axway.
the class DbReadAccess method getCheckpointAggregatedStatistics.
public List<Statistic> getCheckpointAggregatedStatistics(float timeOffset, String testcaseIds, String actionNames, Set<String> expectedSingleActionUIDs, Set<String> expectedCombinedActionUIDs, int interval, int mode) throws DatabaseAccessException {
List<Statistic> allStatistics = new ArrayList<Statistic>();
String sqlLog = new SqlRequestFormatter().add("testcase ids", testcaseIds).add("fdate", formatDateFromEpoch(timeOffset)).add("checkpoint names", actionNames).add("inverval (seconds)", interval).add("mode (AVG-0001,SUM-0010,TOTALS-0100,COUNT-1000)", mode).format();
Map<String, Integer> fakeStatisticIds = new HashMap<String, Integer>();
/*
* The DB does not contain combined statistics, so we must create them.
* All values of statistic with same name and timestamp are summed into 1 statistic
*/
Map<String, Statistic> combinedStatistics = new HashMap<String, Statistic>();
Connection connection = getConnection();
CallableStatement callableStatement = null;
ResultSet rs = null;
try {
callableStatement = connection.prepareCall("{ call sp_get_checkpoint_aggregated_statistics(?, ?, ?, ?, ?) }");
callableStatement.setString(1, formatDateFromEpoch(timeOffset));
callableStatement.setString(2, testcaseIds);
callableStatement.setString(3, actionNames);
callableStatement.setInt(4, interval);
callableStatement.setInt(5, mode);
int numberRecords = 0;
Map<String, Float> totalSumValues = new HashMap<String, Float>();
rs = callableStatement.executeQuery();
while (rs.next()) {
Statistic statistic = new Statistic();
statistic.name = rs.getString("statsName");
statistic.parentName = rs.getString("queueName");
// "statsUnit" field is null for checkpoint statistics, because the action response times are always measured in "ms"
statistic.unit = "ms";
statistic.avgValue = rs.getFloat("avgValue");
statistic.sumValue = rs.getFloat("sumValue");
statistic.countValue = rs.getFloat("countValue");
if (StatisticAggregatedType.isTotals(mode)) {
// total sum value
float totalSumValue = statistic.sumValue;
if (totalSumValues.containsKey(statistic.name)) {
totalSumValue += totalSumValues.get(statistic.name);
}
totalSumValues.put(statistic.name, totalSumValue);
statistic.totalValue = totalSumValue;
}
statistic.timestamp = rs.getLong("timestamp");
// Checkpoints will be collected and displayed for testcase
statistic.machineId = 0;
statistic.testcaseId = rs.getInt("testcaseId");
statistic.statisticTypeId = getStatisticFakeId(START_FAKE_ID_VALUE_FOR_AGGREGATED_CHECKPOINTS, fakeStatisticIds, statistic);
// add to single statistics
if (expectedSingleActionUIDs.contains(statistic.getUid())) {
allStatistics.add(statistic);
}
// add to combined statistics
if (expectedCombinedActionUIDs.contains(statistic.getCombinedStatisticUid())) {
String statisticTempKey = statistic.timestamp + "->" + statistic.name;
Statistic combinedStatistic = combinedStatistics.get(statisticTempKey);
if (combinedStatistic == null) {
// create a new combined statistic
combinedStatistic = new Statistic();
combinedStatistic.name = statistic.name;
combinedStatistic.parentName = Statistic.COMBINED_STATISTICS_CONTAINER;
combinedStatistic.unit = statistic.unit;
combinedStatistic.timestamp = statistic.timestamp;
combinedStatistic.machineId = statistic.machineId;
combinedStatistic.testcaseId = statistic.testcaseId;
combinedStatistic.statisticTypeId = getStatisticFakeId(START_FAKE_ID_VALUE_FOR_AGGREGATED_CHECKPOINTS, fakeStatisticIds, combinedStatistic);
combinedStatistics.put(statisticTempKey, combinedStatistic);
}
// calculate the combined value
combinedStatistic.avgValue = combinedStatistic.avgValue + statistic.avgValue;
combinedStatistic.sumValue = combinedStatistic.sumValue + statistic.sumValue;
combinedStatistic.countValue = combinedStatistic.countValue + statistic.countValue;
combinedStatistic.totalValue = combinedStatistic.totalValue + statistic.totalValue;
}
numberRecords++;
}
if (combinedStatistics.size() > 0) {
// sort the combined statistics by their timestamps
List<Statistic> sortedStatistics = new ArrayList<Statistic>(combinedStatistics.values());
Collections.sort(sortedStatistics, new Comparator<Statistic>() {
@Override
public int compare(Statistic stat1, Statistic stat2) {
return (int) (stat1.timestamp - stat2.timestamp);
}
});
// add the combined statistics to the others
allStatistics.addAll(sortedStatistics);
}
logQuerySuccess(sqlLog, "checkpoint aggregated statistics", numberRecords);
} catch (Exception e) {
throw new DatabaseAccessException("Error when " + sqlLog, e);
} finally {
DbUtils.closeResultSet(rs);
DbUtils.close(connection, callableStatement);
}
return allStatistics;
}
use of com.axway.ats.log.autodb.entities.Statistic in project ats-framework by Axway.
the class DbReadAccess method getSystemStatistics.
public List<Statistic> getSystemStatistics(float timeOffset, String testcaseIds, String machineIds, String statsTypeIds, Set<String> expectedStatisticUIDs, Set<Integer> expectedSingleStatisticIDs, Set<Integer> expectedCombinedStatisticIDs) throws DatabaseAccessException {
List<Statistic> allStatistics = new ArrayList<Statistic>();
String sqlLog = new SqlRequestFormatter().add("fdate", formatDateFromEpoch(timeOffset)).add("testcase ids", testcaseIds).add("machine ids", machineIds).add("stats type ids", statsTypeIds).format();
/*
* Combined statistics do not have real statistic IDs, but Test Explorer needs some.
* We must provide unique IDs
*/
Map<String, Integer> statisticFakeIds = new HashMap<String, Integer>();
/*
* The DB does not contain combined statistics, so we must create them.
* All values of statistic with same statistic ID and timestamp are summed into 1 statistic
*/
Map<String, Statistic> combinedStatistics = new HashMap<String, Statistic>();
Connection connection = getConnection();
CallableStatement callableStatement = null;
ResultSet rs = null;
try {
callableStatement = connection.prepareCall("{ call sp_get_system_statistics(?, ?, ?, ?) }");
callableStatement.setString(1, formatDateFromEpoch(timeOffset));
callableStatement.setString(2, testcaseIds);
callableStatement.setString(3, machineIds);
callableStatement.setString(4, statsTypeIds);
rs = callableStatement.executeQuery();
int numberRecords = 0;
while (rs.next()) {
Statistic statistic = new Statistic();
statistic.statisticTypeId = rs.getInt("statsTypeId");
statistic.name = rs.getString("statsName");
statistic.parentName = rs.getString("statsParent");
statistic.unit = rs.getString("statsUnit");
statistic.value = rs.getFloat("value");
statistic.date = rs.getString("statsAxis");
statistic.timestamp = rs.getInt("statsAxisTimestamp");
statistic.machineId = rs.getInt("machineId");
statistic.testcaseId = rs.getInt("testcaseId");
boolean theUidIsExpected = false;
if (expectedStatisticUIDs == null) {
// used when copying a testcase
theUidIsExpected = true;
} else {
String statisticUidToMatch = statistic.getUid().replace("[", "").replace("]", "");
for (String expectedStatisticUID : expectedStatisticUIDs) {
// we use matchers for combining statistics into virtual containers
if (statisticUidToMatch.matches(expectedStatisticUID.replace("[", "").replace("]", ""))) {
theUidIsExpected = true;
break;
}
}
}
if (theUidIsExpected) {
// add to single statistics
if (expectedSingleStatisticIDs == null) {
// used when copying a testcase
allStatistics.add(statistic);
} else if (expectedSingleStatisticIDs.contains(statistic.statisticTypeId)) {
allStatistics.add(statistic);
}
// add to combined statistics
if (expectedCombinedStatisticIDs != null && expectedCombinedStatisticIDs.contains(statistic.statisticTypeId)) {
String statisticTempKey = statistic.statisticTypeId + "->" + statistic.timestamp;
Statistic combinedStatistic = combinedStatistics.get(statisticTempKey);
if (combinedStatistic == null) {
// create a new combined statistic
combinedStatistic = new Statistic();
combinedStatistic.name = statistic.name;
combinedStatistic.parentName = Statistic.COMBINED_STATISTICS_CONTAINER;
combinedStatistic.unit = statistic.unit;
combinedStatistic.timestamp = statistic.timestamp;
combinedStatistic.machineId = statistic.machineId;
combinedStatistic.testcaseId = statistic.testcaseId;
combinedStatistic.statisticTypeId = getStatisticFakeId(DbReadAccess.START_FAKE_ID_VALUE_FOR_AGGREGATED_SYSTEM_STATISTICS, statisticFakeIds, combinedStatistic);
combinedStatistics.put(statisticTempKey, combinedStatistic);
}
// calculate the combined value
combinedStatistic.value = combinedStatistic.value + statistic.value;
}
numberRecords++;
}
}
if (combinedStatistics.size() > 0) {
// sort the combined statistics by their timestamps
List<Statistic> sortedStatistics = new ArrayList<Statistic>(combinedStatistics.values());
Collections.sort(sortedStatistics, new Comparator<Statistic>() {
@Override
public int compare(Statistic stat1, Statistic stat2) {
return (int) (stat1.timestamp - stat2.timestamp);
}
});
// add the combined statistics to the others
allStatistics.addAll(sortedStatistics);
}
logQuerySuccess(sqlLog, "system statistics", numberRecords);
} catch (Exception e) {
throw new DatabaseAccessException("Error when " + sqlLog, e);
} finally {
DbUtils.closeResultSet(rs);
DbUtils.close(connection, callableStatement);
}
return allStatistics;
}
use of com.axway.ats.log.autodb.entities.Statistic in project ats-framework by Axway.
the class DbReadAccess method getSystemAggregatedStatistics.
public List<Statistic> getSystemAggregatedStatistics(float timeOffset, String testcaseIds, String machineIds, String statsTypeIds, int interval, int mode) throws DatabaseAccessException {
List<Statistic> statistics = new ArrayList<Statistic>();
String sqlLog = new SqlRequestFormatter().add("testcase ids", testcaseIds).add("fdate", formatDateFromEpoch(timeOffset)).add("machine ids", machineIds).add("stats type ids", statsTypeIds).add("inverval (seconds)", interval).add("mode (AVG-0001,SUM-0010,TOTALS-0100,COUNT-1000)", mode).format();
Connection connection = getConnection();
CallableStatement callableStatement = null;
ResultSet rs = null;
try {
callableStatement = connection.prepareCall("{ call sp_get_system_aggregated_statistics(?, ?, ?, ?, ?, ?) }");
callableStatement.setString(1, formatDateFromEpoch(timeOffset));
callableStatement.setString(2, testcaseIds);
callableStatement.setString(3, machineIds);
callableStatement.setString(4, statsTypeIds);
callableStatement.setInt(5, interval);
callableStatement.setInt(6, mode);
rs = callableStatement.executeQuery();
Map<Integer, Float> totalSumValues = new HashMap<Integer, Float>();
int numberRecords = 0;
while (rs.next()) {
Statistic statistic = new Statistic();
statistic.statisticTypeId = rs.getInt("statsTypeId");
statistic.name = rs.getString("statsName");
statistic.unit = rs.getString("statsUnit");
statistic.avgValue = rs.getFloat("avgValue");
statistic.sumValue = rs.getFloat("sumValue");
statistic.countValue = rs.getFloat("countValue");
if (StatisticAggregatedType.isTotals(mode)) {
// total sum value
float totalSumValue = statistic.sumValue;
if (totalSumValues.containsKey(statistic.statisticTypeId)) {
totalSumValue += totalSumValues.get(statistic.statisticTypeId);
}
totalSumValues.put(statistic.statisticTypeId, totalSumValue);
statistic.totalValue = totalSumValue;
}
statistic.timestamp = rs.getInt("timestamp");
statistic.machineId = rs.getInt("machineId");
statistic.testcaseId = rs.getInt("testcaseId");
statistics.add(statistic);
numberRecords++;
}
logQuerySuccess(sqlLog, "system aggregated statistics", numberRecords);
} catch (Exception e) {
throw new DatabaseAccessException("Error when " + sqlLog, e);
} finally {
DbUtils.closeResultSet(rs);
DbUtils.close(connection, callableStatement);
}
return statistics;
}
Aggregations