/[projects]/android/MarketStats/src/dk/thoerup/marketstats/ShowStats.java
ViewVC logotype

Annotation of /android/MarketStats/src/dk/thoerup/marketstats/ShowStats.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 759 - (hide annotations) (download)
Thu May 27 09:45:09 2010 UTC (14 years ago) by torben
File size: 4123 byte(s)
don't use spaces in memcache keys
1 torben 659 package dk.thoerup.marketstats;
2    
3     import java.io.IOException;
4     import java.io.PrintWriter;
5     import java.net.InetSocketAddress;
6 torben 662 import java.util.ArrayList;
7     import java.util.Collections;
8 torben 659 import java.util.Date;
9     import java.util.Locale;
10     import java.util.logging.Logger;
11    
12     import javax.servlet.ServletException;
13     import javax.servlet.http.HttpServlet;
14     import javax.servlet.http.HttpServletRequest;
15     import javax.servlet.http.HttpServletResponse;
16    
17     import net.spy.memcached.MemcachedClient;
18    
19     import com.gc.android.market.api.MarketSession;
20     import com.gc.android.market.api.model.Market.AppsRequest;
21     import com.gc.android.market.api.model.Market.CommentsRequest;
22    
23    
24 torben 664
25 torben 659 public class ShowStats extends HttpServlet {
26     private static final long serialVersionUID = 1L;
27    
28 torben 662 final int TIMEOUT = 30*60;
29 torben 659 static final Logger log = Logger.getLogger(ShowStats.class.getName());
30    
31     String login;
32     String password;
33 torben 667
34     MemcachedClient memcache = null;
35 torben 659
36    
37     @Override
38     public void init() throws ServletException {
39     super.init();
40    
41     login = getServletContext().getInitParameter("login");
42     password = getServletContext().getInitParameter("password");
43 torben 667
44     try {
45     memcache = new MemcachedClient(new InetSocketAddress("localhost", 11211));
46     } catch (IOException e) {
47     throw new ServletException(e);
48     }
49 torben 659 }
50    
51 torben 705 protected String doLookup(String query) throws IOException {
52 torben 667
53 torben 659
54 torben 759 String key = "marketstats:" + query.replace(' ', '_');
55 torben 667 String response = (String) memcache.get(key);
56 torben 659
57     if (response == null) {
58 torben 705 response = doLookupWorker(query);
59 torben 667 memcache.set(key, TIMEOUT, response);
60 torben 659 response += "<!-- new lookup -->";
61     } else {
62     response += "<!-- from memcached -->";
63     }
64     return response;
65     }
66 torben 663
67 torben 756 private void loadComments(String appId, MarketSession session, ArrayList<CommentBean> commentBeans) {
68 torben 663 CommentCallback commentsCb = new CommentCallback();
69     commentsCb.setList( commentBeans );
70 torben 659
71 torben 756 session.setLocale( Locale.ROOT );
72 torben 663
73    
74 torben 756
75 torben 663 int start = 0;
76     do {
77     int count = 10;
78     if (start > 0)
79     count = Math.min(10, commentsCb.getEntryCount() );
80    
81 torben 757 //log.warning("count=" + count + " start=" + start + " entryCount=" + commentsCb.getEntryCount() );
82 torben 663 CommentsRequest commentsRequest = CommentsRequest.newBuilder()
83     .setAppId(appId)
84     .setStartIndex(start)
85     .setEntriesCount(count)
86     .build();
87    
88     session.append(commentsRequest, commentsCb);
89     session.flush();
90     start +=10;
91    
92 torben 757 if (start >= 200)
93 torben 663 break; //emergency brake
94    
95     } while ( start < commentsCb.getEntryCount() );
96     }
97 torben 659
98 torben 663
99 torben 705 protected String doLookupWorker(String query) {
100 torben 659 final StringBuilder sb = new StringBuilder();
101    
102    
103     MarketSession session = new MarketSession();
104     session.login(login,password);
105    
106 torben 662
107 torben 659 AppsRequest appsRequest = AppsRequest.newBuilder()
108 torben 705 .setQuery(query)
109 torben 659 .setStartIndex(0).setEntriesCount(10)
110     .setWithExtendedInfo(true)
111     .build();
112    
113    
114 torben 663 AppsCallback appsCb = new AppsCallback() ;
115     appsCb.setStringBuffer(sb);
116 torben 659
117 torben 662 ArrayList<CommentBean> commentBeans = new ArrayList<CommentBean>();
118 torben 659
119    
120    
121     session.append(appsRequest, appsCb);
122     session.flush();
123 torben 705
124     String appId = appsCb.getAppId();
125    
126     if (appId != null) {
127 torben 662
128 torben 756 loadComments(appId, session, commentBeans);
129 torben 705
130     sb.append("-----------------------------------------------------------------\n");
131     for (CommentBean c : commentBeans) {
132 torben 756 sb.append("User: " + c.author + "\n");
133 torben 705 sb.append("Rating: " + c.rating + "\n");
134     sb.append("Time: " + new Date(c.time).toString() + "\n");
135     sb.append( c.text + "\n");
136     sb.append("\n");
137    
138     }
139     sb.append("Comments: " + commentBeans.size() + "\n");
140 torben 662 }
141 torben 705 sb.append("Cache.Timeout=" + TIMEOUT/60 + " minutes");
142 torben 662
143    
144 torben 659 return sb.toString();
145     }
146    
147     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
148 torben 705 String query = request.getParameter("query");
149 torben 662
150 torben 660 response.setContentType("text/html");
151 torben 659 PrintWriter out = response.getWriter();
152 torben 758 out.print( "<html><body><pre>" + doLookup(query) + "</pre></body></html>" );
153 torben 659 }
154    
155     }

  ViewVC Help
Powered by ViewVC 1.1.20