69 lines
2.0 KiB
Java
69 lines
2.0 KiB
Java
|
/*
|
||
|
* Copyright 2007 Yusuke Yamamoto
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package twitter4j;
|
||
|
|
||
|
import twitter4j.management.APIStatistics;
|
||
|
import twitter4j.management.APIStatisticsMBean;
|
||
|
|
||
|
import java.util.regex.Matcher;
|
||
|
import java.util.regex.Pattern;
|
||
|
|
||
|
/**
|
||
|
* Singleton instance of all Twitter API monitoring. Handles URL parsing and
|
||
|
* "wire off" logic. We could avoid using a singleton here if Twitter objects
|
||
|
* were instantiated from a factory.
|
||
|
*
|
||
|
* @author Nick Dellamaggiore (nick.dellamaggiore <at> gmail.com)
|
||
|
* @since Twitter4J 2.2.1
|
||
|
*/
|
||
|
public class TwitterAPIMonitor {
|
||
|
// https?:\/\/[^\/]+\/([a-zA-Z_\.]*).*
|
||
|
// finds the "method" part a Twitter REST API url, ignoring member-specific
|
||
|
// resource names
|
||
|
private static final Pattern pattern = Pattern.compile("https?:\\/\\/[^\\/]+\\/([a-zA-Z_\\.]*).*");
|
||
|
|
||
|
private static final TwitterAPIMonitor SINGLETON = new TwitterAPIMonitor();
|
||
|
|
||
|
private final APIStatistics STATISTICS = new APIStatistics(100);
|
||
|
|
||
|
static {
|
||
|
System.setProperty("http.keepAlive", "false");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*/
|
||
|
private TwitterAPIMonitor() {
|
||
|
}
|
||
|
|
||
|
public APIStatisticsMBean getStatistics() {
|
||
|
return STATISTICS;
|
||
|
}
|
||
|
|
||
|
void methodCalled(final String twitterUrl, final long elapsedTime, final boolean success) {
|
||
|
final Matcher matcher = pattern.matcher(twitterUrl);
|
||
|
if (matcher.matches() && matcher.groupCount() > 0) {
|
||
|
final String method = matcher.group();
|
||
|
STATISTICS.methodCalled(method, elapsedTime, success);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static TwitterAPIMonitor getInstance() {
|
||
|
return SINGLETON;
|
||
|
}
|
||
|
}
|