Mercurial Hosting > nabble
view src/nabble/view/web/util/VisitCounter.java @ 62:4674ed7d56df default tip
remove n2
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Sep 2023 20:25:29 -0600 |
parents | 7ecd1a4ef557 |
children |
line wrap: on
line source
package nabble.view.web.util; import nabble.model.DailyNumber; import nabble.view.lib.Jtp; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public final class VisitCounter extends HttpServlet { private static final Logger logger = LoggerFactory.getLogger(VisitCounter.class); protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setHeader("Content-Type", "application/x-javascript" ); Jtp.dontCache(response); String referrer = request.getParameter("referrer"); logger.debug("VisitCounter referrer="+referrer); String url = request.getHeader("Referer"); logger.debug("VisitCounter url="+url); countVisit( request, referrer, url ); } private static void countVisit(HttpServletRequest request,String referrer, String url) { DailyNumber.totalVisits.inc(); if( referrer==null || referrer.equals("") ) { DailyNumber.directVisits.inc(); } else if( isFromAd(url) ) { DailyNumber.adVisits.inc(); } else if( isSearchEngine(referrer) ) { DailyNumber.searchEngineVisits.inc(); } else { DailyNumber.externalVisits.inc(); } } private static boolean isFromAd(String url) { return url != null && url.indexOf("?keyword=") >= 0; } // logic from _uOrg() in urchin.js private static boolean isSearchEngine(String referrer) { int i = referrer.indexOf("://"); if( i == -1 ) return false; String h = referrer.substring(i+3); if (h.indexOf("/") > -1) { h = h.substring(0,h.indexOf("/")); } for (SearchEngine se : searchEngines) { boolean isSearchEngine = h.indexOf(se.name) > -1; boolean isQuery = referrer.indexOf("?" + se.query + "=") > -1|| referrer.indexOf("&" + se.query + "=") > -1; if (isSearchEngine && isQuery) return true; } return false; } private static final class SearchEngine { final String name; final String query; SearchEngine(String name,String query) { this.name = name; this.query = query; } } private static final SearchEngine[] searchEngines = new SearchEngine[]{ new SearchEngine("google","q"), new SearchEngine("yahoo","p"), new SearchEngine("msn","q"), new SearchEngine("aol","query"), new SearchEngine("lycos","query"), new SearchEngine("ask","q"), new SearchEngine("altavista","q"), new SearchEngine("search","q"), new SearchEngine("netscape","query"), new SearchEngine("earthlink","q"), new SearchEngine("cnn","query"), new SearchEngine("looksmart","key"), new SearchEngine("about","terms"), new SearchEngine("excite","qkw"), new SearchEngine("mamma","query"), new SearchEngine("alltheweb","q"), new SearchEngine("gigablast","q"), new SearchEngine("voila","kw"), new SearchEngine("virgilio","qs"), new SearchEngine("teoma","q"), }; }