Mercurial Hosting > nabble
comparison src/nabble/view/web/util/VisitCounter.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:7ecd1a4ef557 |
---|---|
1 package nabble.view.web.util; | |
2 | |
3 import nabble.model.DailyNumber; | |
4 import nabble.view.lib.Jtp; | |
5 import org.slf4j.Logger; | |
6 import org.slf4j.LoggerFactory; | |
7 | |
8 import javax.servlet.ServletException; | |
9 import javax.servlet.http.HttpServlet; | |
10 import javax.servlet.http.HttpServletRequest; | |
11 import javax.servlet.http.HttpServletResponse; | |
12 import java.io.IOException; | |
13 | |
14 | |
15 public final class VisitCounter extends HttpServlet { | |
16 private static final Logger logger = LoggerFactory.getLogger(VisitCounter.class); | |
17 | |
18 protected void service(HttpServletRequest request,HttpServletResponse response) | |
19 throws ServletException, IOException | |
20 { | |
21 response.setHeader("Content-Type", "application/x-javascript" ); | |
22 Jtp.dontCache(response); | |
23 String referrer = request.getParameter("referrer"); | |
24 logger.debug("VisitCounter referrer="+referrer); | |
25 String url = request.getHeader("Referer"); | |
26 logger.debug("VisitCounter url="+url); | |
27 countVisit( request, referrer, url ); | |
28 } | |
29 | |
30 private static void countVisit(HttpServletRequest request,String referrer, String url) { | |
31 DailyNumber.totalVisits.inc(); | |
32 if( referrer==null || referrer.equals("") ) { | |
33 DailyNumber.directVisits.inc(); | |
34 } else if( isFromAd(url) ) { | |
35 DailyNumber.adVisits.inc(); | |
36 } else if( isSearchEngine(referrer) ) { | |
37 DailyNumber.searchEngineVisits.inc(); | |
38 } else { | |
39 DailyNumber.externalVisits.inc(); | |
40 } | |
41 } | |
42 | |
43 private static boolean isFromAd(String url) { | |
44 return url != null && url.indexOf("?keyword=") >= 0; | |
45 } | |
46 | |
47 // logic from _uOrg() in urchin.js | |
48 private static boolean isSearchEngine(String referrer) { | |
49 int i = referrer.indexOf("://"); | |
50 if( i == -1 ) | |
51 return false; | |
52 String h = referrer.substring(i+3); | |
53 if (h.indexOf("/") > -1) { | |
54 h = h.substring(0,h.indexOf("/")); | |
55 } | |
56 for (SearchEngine se : searchEngines) { | |
57 boolean isSearchEngine = h.indexOf(se.name) > -1; | |
58 boolean isQuery = referrer.indexOf("?" + se.query + "=") > -1|| referrer.indexOf("&" + se.query + "=") > -1; | |
59 if (isSearchEngine && isQuery) | |
60 return true; | |
61 } | |
62 return false; | |
63 } | |
64 | |
65 private static final class SearchEngine { | |
66 final String name; | |
67 final String query; | |
68 | |
69 SearchEngine(String name,String query) { | |
70 this.name = name; | |
71 this.query = query; | |
72 } | |
73 } | |
74 | |
75 private static final SearchEngine[] searchEngines = new SearchEngine[]{ | |
76 new SearchEngine("google","q"), | |
77 new SearchEngine("yahoo","p"), | |
78 new SearchEngine("msn","q"), | |
79 new SearchEngine("aol","query"), | |
80 new SearchEngine("lycos","query"), | |
81 new SearchEngine("ask","q"), | |
82 new SearchEngine("altavista","q"), | |
83 new SearchEngine("search","q"), | |
84 new SearchEngine("netscape","query"), | |
85 new SearchEngine("earthlink","q"), | |
86 new SearchEngine("cnn","query"), | |
87 new SearchEngine("looksmart","key"), | |
88 new SearchEngine("about","terms"), | |
89 new SearchEngine("excite","qkw"), | |
90 new SearchEngine("mamma","query"), | |
91 new SearchEngine("alltheweb","q"), | |
92 new SearchEngine("gigablast","q"), | |
93 new SearchEngine("voila","kw"), | |
94 new SearchEngine("virgilio","qs"), | |
95 new SearchEngine("teoma","q"), | |
96 }; | |
97 } |