001
014
015 package com.liferay.portal.monitoring.statistics.service;
016
017 import com.liferay.portal.kernel.monitoring.RequestStatus;
018 import com.liferay.portal.kernel.monitoring.statistics.DataSampleProcessor;
019 import com.liferay.portal.kernel.monitoring.statistics.RequestStatistics;
020 import com.liferay.portal.monitoring.jmx.MethodSignature;
021
022 import java.util.Map;
023 import java.util.concurrent.ConcurrentHashMap;
024
025
028 public class ServiceStatistics
029 implements DataSampleProcessor<ServiceRequestDataSample> {
030
031 public ServiceStatistics(String className) {
032 _className = className;
033 }
034
035 public long getAverageTime(String methodName, String[] parameterTypes) {
036 MethodSignature methodSignature = new MethodSignature(
037 _className, methodName, parameterTypes);
038
039 RequestStatistics requestStatistics = _methodRequestStatistics.get(
040 methodSignature);
041
042 if (requestStatistics != null) {
043 return requestStatistics.getAverageTime();
044 }
045
046 return -1;
047 }
048
049 public long getErrorCount(String methodName, String[] parameterTypes) {
050 MethodSignature methodSignature = new MethodSignature(
051 _className, methodName, parameterTypes);
052
053 RequestStatistics requestStatistics = _methodRequestStatistics.get(
054 methodSignature);
055
056 if (requestStatistics != null) {
057 return requestStatistics.getErrorCount();
058 }
059
060 return -1;
061 }
062
063 public long getMaxTime(String methodName, String[] parameterTypes) {
064 MethodSignature methodSignature = new MethodSignature(
065 _className, methodName, parameterTypes);
066
067 RequestStatistics requestStatistics = _methodRequestStatistics.get(
068 methodSignature);
069
070 if (requestStatistics != null) {
071 return requestStatistics.getMaxTime();
072 }
073
074 return -1;
075 }
076
077 public long getMinTime(String methodName, String[] parameterTypes) {
078 MethodSignature methodSignature = new MethodSignature(
079 _className, methodName, parameterTypes);
080
081 RequestStatistics requestStatistics = _methodRequestStatistics.get(
082 methodSignature);
083
084 if (requestStatistics != null) {
085 return requestStatistics.getMinTime();
086 }
087
088 return -1;
089 }
090
091 public long getRequestCount(String methodName, String[] parameterTypes) {
092 MethodSignature methodSignature = new MethodSignature(
093 _className, methodName, parameterTypes);
094
095 RequestStatistics requestStatistics = _methodRequestStatistics.get(
096 methodSignature);
097
098 if (requestStatistics != null) {
099 return requestStatistics.getRequestCount();
100 }
101
102 return -1;
103 }
104
105 @Override
106 public void processDataSample(
107 ServiceRequestDataSample serviceRequestDataSample) {
108
109 MethodSignature methodSignature =
110 serviceRequestDataSample.getMethodSignature();
111
112 RequestStatistics requestStatistics = _methodRequestStatistics.get(
113 methodSignature);
114
115 if (requestStatistics == null) {
116 requestStatistics = new RequestStatistics(
117 methodSignature.toString());
118
119 _methodRequestStatistics.put(methodSignature, requestStatistics);
120 }
121
122 RequestStatus requestStatus =
123 serviceRequestDataSample.getRequestStatus();
124
125 if (requestStatus == RequestStatus.ERROR) {
126 requestStatistics.incrementError();
127 }
128 else if (requestStatus == RequestStatus.TIMEOUT) {
129 requestStatistics.incrementTimeout();
130 }
131 else if (requestStatus == RequestStatus.SUCCESS) {
132 requestStatistics.incrementSuccessDuration(
133 serviceRequestDataSample.getDuration());
134 }
135 }
136
137 private String _className;
138 private Map<MethodSignature, RequestStatistics> _methodRequestStatistics =
139 new ConcurrentHashMap<MethodSignature, RequestStatistics>();
140
141 }