001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */
019: package org.apache.synapse.statistics.impl;
020:
021: import org.apache.synapse.statistics.StatisticsStack;
022: import org.apache.synapse.statistics.StatisticsCollector;
023: import org.apache.synapse.SynapseException;
024: import org.apache.commons.logging.Log;
025: import org.apache.commons.logging.LogFactory;
026:
027: /**
028: * The data structure to hold statistics related to the Proxy Services
029: *
030: */
031:
032: public class ProxyServiceStatisticsStack implements StatisticsStack {
033:
034: private static final Log log = LogFactory
035: .getLog(ProxyServiceStatisticsStack.class);
036: /** The name of the proxy service*/
037: private String proxyServiceName;
038: /** To check whether statistics is enabled or not */
039: private boolean isStatisticsEnable = false;
040: /** The time which starts to collect statistics for IN flow */
041: private long inTimeForInFlow = -1;
042: /** The time which starts to collect statistics for OUT flow */
043: private long inTimeForOutFlow = -1;
044: /** To indicate whether IN Flow is fault or not*/
045: private boolean isINFault;
046: /** To indicate whether OUT Flow is fault or not*/
047: private boolean isOUTFault;
048:
049: /**
050: * To put a statistics
051: * @param key - The Name of the proxy service
052: * @param initTime
053: * @param isInFlow
054: * @param isStatisticsEnable
055: */
056: public void put(String key, long initTime, boolean isInFlow,
057: boolean isStatisticsEnable, boolean isFault) {
058: if (isInFlow) {
059: this .proxyServiceName = key;
060: this .isStatisticsEnable = isStatisticsEnable;
061: this .inTimeForInFlow = initTime;
062: this .isINFault = isFault;
063: }
064: }
065:
066: /**
067: * This method used to report the latest statistics to the StatisticsCollector
068: * @param statisticsCollector
069: */
070: public void reportToStatisticsCollector(
071: StatisticsCollector statisticsCollector, boolean isFault) {
072: synchronized (this ) {
073: if (proxyServiceName != null && isStatisticsEnable
074: && inTimeForInFlow != -1) {
075: inTimeForOutFlow = System.currentTimeMillis();
076: isOUTFault = isFault;
077: statisticsCollector.reportForProxyService(
078: proxyServiceName, false, inTimeForInFlow,
079: inTimeForOutFlow, isINFault);
080: inTimeForInFlow = -1;
081: } else if (inTimeForOutFlow != -1) {
082: statisticsCollector.reportForProxyService(
083: proxyServiceName, true, inTimeForOutFlow,
084: System.currentTimeMillis(), isFault);
085: inTimeForOutFlow = -1;
086: }
087: }
088: }
089:
090: /**
091: * Report a particular statistics to the StatisticsReporter
092: *
093: * @param statisticsCollector
094: * @param isFault
095: * @param name
096: */
097: public void reportToStatisticsCollector(
098: StatisticsCollector statisticsCollector, boolean isFault,
099: String name) {
100: if (name != null && proxyServiceName != null
101: && proxyServiceName.equals(name)) {
102: reportToStatisticsCollector(statisticsCollector, isFault);
103: } else {
104: handleException("Invalid ProxyService Name " + name
105: + " expected " + proxyServiceName);
106: }
107: }
108:
109: /**
110: * This method used to unreported all statistics to the StatisticsCollector
111: * @param statisticsCollector
112: * @param isFault
113: */
114: public void reportAllToStatisticsCollector(
115: StatisticsCollector statisticsCollector, boolean isFault) {
116: reportToStatisticsCollector(statisticsCollector, isFault);
117: }
118:
119: private void handleException(String msg) {
120: log.error(msg);
121: throw new SynapseException(msg);
122: }
123: }
|