public void updateStatistics()

in modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java [39:143]


    public void updateStatistics(String id,
                                 ComponentType componentType,
                                 InOutStatisticsView statisticsView) {

        StatisticsLog startLog = null;
        StatisticsLog endLog = null;
        final List<StatisticsLog> statisticsLogs = statisticsRecord.getAllStatisticsLogs();
        for (StatisticsLog log : statisticsLogs) {

            if (log == null) {
                continue;
            }

            switch (componentType) {
                case SEQUENCE: {

                    if (startLog != null) {
                        if (log.isEndAnyLog() ||
                                log.getComponentType() == ComponentType.ANY) {
                            endLog = log;
                        }
                    }
                    if (componentType == log.getComponentType()) {
                        if (!id.equals(log.getId())) {
                            continue;
                        }
                        if (startLog == null) {
                            startLog = log;
                        } else {
                            endLog = log;
                        }
                    }
                    break;
                }
                default: {
                    if (componentType == log.getComponentType()) {
                        if (!id.equals(log.getId())) {
                            continue;
                        }
                        startLog = log;
                    } else if (log.getComponentType() == ComponentType.ANY) {
                        if (startLog != null) {
                            endLog = log;
                        }
                        break;
                    }
                }
            }

            if (endLog != null && startLog != null) {
                Statistics statistics;
                switch (componentType) {
                    case SEQUENCE: {
                        if (startLog.isResponse()) {
                            statistics = statisticsView.getOutStatistics();
                        } else {
                            statistics = statisticsView.getInStatistics();
                        }
                        statistics.update(endLog.getTime() - startLog.getTime(), endLog.isFault());
                        if (endLog.isFault()) {
                            statistics.addErrorLog(endLog.getErrorLog());
                        }
                        break;
                    }
                    case ENDPOINT: {
                        statistics = statisticsView.getInStatistics();
                        statistics.update(endLog.getTime() - startLog.getTime(), endLog.isFault());
                        if (endLog.isFault()) {
                            statistics.addErrorLog(endLog.getErrorLog());
                        }
                        break;
                    }
                    case PROXYSERVICE: {
                        Statistics inStatistics = statisticsView.getInStatistics();
                        Statistics outStatistics = statisticsView.getOutStatistics();
                        inStatistics.update(endLog.getTime() - startLog.getTime(), endLog.isFault());
                        if (endLog.isFault()) {
                            inStatistics.addErrorLog(endLog.getErrorLog());
                        }
                        if (!endLog.isEndAnyLog()) {
                            StatisticsLog lastLog = statisticsLogs.get(statisticsLogs.size() - 1);
                            if (lastLog != endLog) {
                                outStatistics.update(
                                        lastLog.getTime() - endLog.getTime(), lastLog.isFault());
                                if (lastLog.isFault()) {
                                    outStatistics.addErrorLog(lastLog.getErrorLog());
                                }
                            }
                        }
                        return;
                    }
                }
                startLog = null;
                endLog = null;
            }
        }

        if (startLog != null && componentType == ComponentType.PROXYSERVICE) {
            Statistics inStatistics = statisticsView.getInStatistics();
            StatisticsLog lastLog = statisticsLogs.get(statisticsLogs.size() - 1);
            if (lastLog != startLog) {
                inStatistics.update(lastLog.getTime() - startLog.getTime(), lastLog.isFault());
            }
        }
    }