Search in sources :

Example 6 with DatabaseAccessException

use of com.axway.ats.log.autodb.exceptions.DatabaseAccessException 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;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) DbConnection(com.axway.ats.core.dbaccess.DbConnection) Checkpoint(com.axway.ats.log.autodb.entities.Checkpoint) SQLException(java.sql.SQLException) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException) Statistic(com.axway.ats.log.autodb.entities.Statistic) CallableStatement(java.sql.CallableStatement) ResultSet(java.sql.ResultSet) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException)

Example 7 with DatabaseAccessException

use of com.axway.ats.log.autodb.exceptions.DatabaseAccessException in project ats-framework by Axway.

the class DbReadAccess method getSuiteMessagesCount.

public int getSuiteMessagesCount(String whereClause) throws DatabaseAccessException {
    String sqlLog = new SqlRequestFormatter().add("where", whereClause).format();
    Connection connection = getConnection();
    CallableStatement callableStatement = null;
    ResultSet rs = null;
    try {
        callableStatement = connection.prepareCall("{ call sp_get_suite_messages_count(?) }");
        callableStatement.setString(1, whereClause);
        rs = callableStatement.executeQuery();
        int messagesCount = 0;
        if (rs.next()) {
            messagesCount = rs.getInt("messagesCount");
        }
        logQuerySuccess(sqlLog, "suite messages count", messagesCount);
        return messagesCount;
    } catch (Exception e) {
        throw new DatabaseAccessException("Error when " + sqlLog, e);
    } finally {
        DbUtils.closeResultSet(rs);
        DbUtils.close(connection, callableStatement);
    }
}
Also used : CallableStatement(java.sql.CallableStatement) Connection(java.sql.Connection) DbConnection(com.axway.ats.core.dbaccess.DbConnection) ResultSet(java.sql.ResultSet) Checkpoint(com.axway.ats.log.autodb.entities.Checkpoint) SQLException(java.sql.SQLException) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException)

Example 8 with DatabaseAccessException

use of com.axway.ats.log.autodb.exceptions.DatabaseAccessException in project ats-framework by Axway.

the class DbReadAccess method getLoadQueues.

public List<LoadQueue> getLoadQueues(String whereClause, String sortColumn, boolean ascending, boolean dateFormatNoYear) throws DatabaseAccessException {
    List<LoadQueue> loadQueues = new ArrayList<LoadQueue>();
    String sqlLog = new SqlRequestFormatter().add("where", whereClause).add("sort by", sortColumn).add("asc", ascending).format();
    Connection connection = getConnection();
    CallableStatement callableStatement = null;
    ResultSet rs = null;
    try {
        callableStatement = connection.prepareCall("{ call sp_get_loadqueues(?, ?, ?) }");
        callableStatement.setString(1, "where " + whereClause);
        callableStatement.setString(2, sortColumn);
        callableStatement.setString(3, (ascending ? "ASC" : "DESC"));
        rs = callableStatement.executeQuery();
        int numberRecords = 0;
        while (rs.next()) {
            LoadQueue loadQueue = new LoadQueue();
            loadQueue.loadQueueId = rs.getInt("loadQueueId");
            loadQueue.name = rs.getString("name");
            loadQueue.sequence = rs.getInt("sequence");
            loadQueue.hostsList = rs.getString("hostsList");
            loadQueue.threadingPattern = rs.getString("threadingPattern");
            loadQueue.numberThreads = rs.getInt("numberThreads");
            if (loadQueue.threadingPattern != null) {
                loadQueue.threadingPattern = loadQueue.threadingPattern.replace("<number_threads>", String.valueOf(loadQueue.numberThreads));
            }
            if (dateFormatNoYear) {
                loadQueue.dateStart = formatDateNoYear(rs.getTimestamp("dateStart"));
                loadQueue.dateEnd = formatDateNoYear(rs.getTimestamp("dateEnd"));
            } else {
                loadQueue.dateStart = formatDate(rs.getTimestamp("dateStart"));
                loadQueue.dateEnd = formatDate(rs.getTimestamp("dateEnd"));
            }
            int duration = rs.getInt("duration");
            if (duration < 0) {
                // this may happen when the load queue is not ended and the time of the log server
                // is behind with the time of the test executor host
                duration = 0;
            }
            loadQueue.duration = formatTimeDiffereceFromSecondsToString(duration);
            loadQueue.result = rs.getInt("result");
            /*
                 *   -- 0 FAILED
                 *   -- 1 PASSED
                 *   -- 2 SKIPPED
                 *   -- 4 RUNNING
                 */
            switch(loadQueue.result) {
                case 0:
                    loadQueue.state = "FAILED";
                    break;
                case 1:
                    loadQueue.state = "PASSED";
                    break;
                case 2:
                    loadQueue.state = "SKIPPED";
                    break;
                case 4:
                    loadQueue.state = "RUNNING";
                    break;
                default:
                    //TODO: add warning
                    loadQueue.state = "unknown";
            }
            loadQueues.add(loadQueue);
            numberRecords++;
        }
        logQuerySuccess(sqlLog, "loadqueues", numberRecords);
    } catch (Exception e) {
        throw new DatabaseAccessException("Error when " + sqlLog, e);
    } finally {
        DbUtils.closeResultSet(rs);
        DbUtils.close(connection, callableStatement);
    }
    return loadQueues;
}
Also used : CallableStatement(java.sql.CallableStatement) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) DbConnection(com.axway.ats.core.dbaccess.DbConnection) ResultSet(java.sql.ResultSet) LoadQueue(com.axway.ats.log.autodb.entities.LoadQueue) Checkpoint(com.axway.ats.log.autodb.entities.Checkpoint) SQLException(java.sql.SQLException) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException)

Example 9 with DatabaseAccessException

use of com.axway.ats.log.autodb.exceptions.DatabaseAccessException 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;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) DbConnection(com.axway.ats.core.dbaccess.DbConnection) Checkpoint(com.axway.ats.log.autodb.entities.Checkpoint) SQLException(java.sql.SQLException) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException) Statistic(com.axway.ats.log.autodb.entities.Statistic) CallableStatement(java.sql.CallableStatement) ResultSet(java.sql.ResultSet) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException)

Example 10 with DatabaseAccessException

use of com.axway.ats.log.autodb.exceptions.DatabaseAccessException in project ats-framework by Axway.

the class DbReadAccess method getSuitesCount.

public int getSuitesCount(String whereClause) throws DatabaseAccessException {
    Connection connection = getConnection();
    String sqlLog = new SqlRequestFormatter().add("where", whereClause).format();
    CallableStatement callableStatement = null;
    ResultSet rs = null;
    try {
        callableStatement = connection.prepareCall("{ call sp_get_suites_count(?) }");
        callableStatement.setString(1, whereClause);
        rs = callableStatement.executeQuery();
        int suitesCount = 0;
        while (rs.next()) {
            suitesCount = rs.getInt("suitesCount");
            logQuerySuccess(sqlLog, "suites", suitesCount);
            break;
        }
        return suitesCount;
    } catch (Exception e) {
        throw new DatabaseAccessException("Error when " + sqlLog, e);
    } finally {
        DbUtils.closeResultSet(rs);
        DbUtils.close(connection, callableStatement);
    }
}
Also used : CallableStatement(java.sql.CallableStatement) Connection(java.sql.Connection) DbConnection(com.axway.ats.core.dbaccess.DbConnection) ResultSet(java.sql.ResultSet) Checkpoint(com.axway.ats.log.autodb.entities.Checkpoint) SQLException(java.sql.SQLException) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException) DatabaseAccessException(com.axway.ats.log.autodb.exceptions.DatabaseAccessException)

Aggregations

DatabaseAccessException (com.axway.ats.log.autodb.exceptions.DatabaseAccessException)57 SQLException (java.sql.SQLException)52 CallableStatement (java.sql.CallableStatement)45 DbConnection (com.axway.ats.core.dbaccess.DbConnection)35 Connection (java.sql.Connection)34 ResultSet (java.sql.ResultSet)28 Checkpoint (com.axway.ats.log.autodb.entities.Checkpoint)23 ArrayList (java.util.ArrayList)18 Timestamp (java.sql.Timestamp)14 PreparedStatement (java.sql.PreparedStatement)7 HashMap (java.util.HashMap)5 Statistic (com.axway.ats.log.autodb.entities.Statistic)4 Message (com.axway.ats.log.autodb.entities.Message)3 SimpleDateFormat (java.text.SimpleDateFormat)3 BackwardCompatibility (com.axway.ats.core.utils.BackwardCompatibility)2 Run (com.axway.ats.log.autodb.entities.Run)2 StatisticDescription (com.axway.ats.log.autodb.entities.StatisticDescription)2 Suite (com.axway.ats.log.autodb.entities.Suite)2 AgentException (com.axway.ats.agent.core.exceptions.AgentException)1 DbException (com.axway.ats.core.dbaccess.exceptions.DbException)1