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 public void processDataSample(
106 ServiceRequestDataSample serviceRequestDataSample) {
107
108 MethodSignature methodSignature =
109 serviceRequestDataSample.getMethodSignature();
110
111 RequestStatistics requestStatistics = _methodRequestStatistics.get(
112 methodSignature);
113
114 if (requestStatistics == null) {
115 requestStatistics = new RequestStatistics(
116 methodSignature.toString());
117
118 _methodRequestStatistics.put(methodSignature, requestStatistics);
119 }
120
121 RequestStatus requestStatus =
122 serviceRequestDataSample.getRequestStatus();
123
124 if (requestStatus == RequestStatus.ERROR) {
125 requestStatistics.incrementError();
126 }
127 else if (requestStatus == RequestStatus.TIMEOUT) {
128 requestStatistics.incrementTimeout();
129 }
130 else if (requestStatus == RequestStatus.SUCCESS) {
131 requestStatistics.incrementSuccessDuration(
132 serviceRequestDataSample.getDuration());
133 }
134 }
135
136 private String _className;
137 private Map<MethodSignature, RequestStatistics> _methodRequestStatistics =
138 new ConcurrentHashMap<MethodSignature, RequestStatistics>();
139
140 }