Looks like we can rule out the GWT api being the problem.  I quickly
threw together a JS version of the chart and it still doesn't work.

The JS version exhibits the same behavior as before.  The data source
query and chart drawing have no problems the first time but any
subsequent requests behave as though they time out.

I noticed one person had an issue with headers being sent after the
response, but my setup doesn't have this issue.

--Craig


On Jan 22, 10:35 am, "Eric Z. Ayers" <[email protected]> wrote:
> It seems like the GWT code involved in this problem is very minimal.
> If you want to eliminate the GWT component, I would suggest you write
> a very small JavaScript driver for your class and see if your second
> query works.
>
> -Eric.
>
> On Jan 21, 11:30 am, Craig Schroeder <[email protected]> wrote:
>
> > Hey VizBoy,
> > Not sure if you were referring to me here but I am going to paste in my code
> > below...
>
> > Hopefully someone can help me figure out if this is an issue in GWT or the
> > GWT API, or some environmental issue on my end.  I don't see any errors in
> > application logic or system responses so I'm not sure why one request works
> > and then subsequent ones don't.
>
> > Thanks,
> > Craig
>
> > ##########python service#############
> > import gviz_api, mmap, re, os, timeit
> > from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
>
> > def getResults(args):
> >     fname = "xxxxxxxxxxxx-" + args[0]
> >     fname = os.path.join("../audit", fname)
> >     try:
> >         fileobj = open(fname)
> >     except:
> >         return "file not found"
> >     queryID = args[1]
> >     try:
> >         filters = args[2:]
> >     except:
> >         pass
> >     flag = False
>
> >     if len(filters) == 0:
> >         try:
> >             records[args[0]][args[1]]
> >             description = {("key", "string"):("value", "number")}
> >             data = records[args[0]][args[1]]
> >             data_table = gviz_api.DataTable(description)
> >             data_table.LoadData(data)
> >             print
> > data_table.ToJSonResponse(columns_order=("key","value"),order_by=reports[ar 
> > gs[1]]["sort"])
> >             return
> > data_table.ToJSonResponse(columns_order=("key","value"),order_by=reports[ar 
> > gs[1]]["sort"])
> >         except KeyError:
> >             print "KeyError"
> >     if len(filters) == 0:
> >         filemap = mmap.mmap(fileobj.fileno(), os.path.getsize(fname) ,
> > access=mmap.ACCESS_READ)
> >     else:
> >         print "starting file filtering"
> >         fileString = ""
> >         fileList = []
> >         c=0
> >         for line in fileobj:
> >             c+=1
> >             if c%1000 == 0:
> >                 print c
> >             for f in filters:
> >                 if flag:
> >                     break
> >                 if f not in line:
> >                     flag = True
> >             if not flag:
> >                 fileList.append(line)
> >             flag = False
> >         print "ending file filtering"
> >         fileString = ''.join(fileList)
> >     pat = re.compile(reports[queryID]["regex"])
> >     count = {}
> >     if len(filters) == 0:
> >         for m in pat.findall(filemap):
> >             try:
> >                 count[m] +=1
> >             except KeyError:
> >                 count[m] = 1
> >     else:
> >         for m in pat.findall(fileString):
> >             try:
> >                 count[m] +=1
> >             except KeyError:
> >                 count[m] = 1
> >     if len(filters) == 0:
> >         try:
> >             records[args[0]][args[1]] = count
> >         except:
> >             records[args[0]] = {}
> >             records[args[0]][args[1]] = count
> >     print "just before returning"
> >     try:
> >         filemap.close()
> >     except:
> >         pass
> >     fileString = ""
> >     fileobj.close()
> >     description = {("key", "string"):("value", "number")}
> >     if len(filters) == 0:
> >         data = records[args[0]][args[1]]
> >     else:
> >         data = count
> >     data_table = gviz_api.DataTable(description)
> >     data_table.LoadData(data)
> >     print
> > data_table.ToJSonResponse(columns_order=("key","value"),order_by=reports[ar 
> > gs[1]]["sort"])
> >     return
> > data_table.ToJSonResponse(columns_order=("key","value"),order_by=reports[ar 
> > gs[1]]["sort"])
>
> > class MyHandler(BaseHTTPRequestHandler):
>
> >     def do_GET(self):
> >         if self.path.find("?") != -1:
> >             queryString = self.path.split("?")[1]
> >             queryArgs =
> > queryString.split("tq=")[1].split("&")[0].split("%40")
> >         urlargs = self.path.split("?")[0].split("/")
> >         print urlargs
> >         self.send_response(200)
> >         self.send_header('Content-type',    'text/html')
> >         self.end_headers()
> >         if self.path == "/":
> >             self.wfile.write("Don't know what you're trying to do")
> >             return
> >         if urlargs[1] == "gwt":
> >             if urlargs[2] == "menu":
> >                 self.wfile.write()
> >             else:
> >                 self.wfile.write(getResults(queryArgs))
> >             self.wfile.write(open(xxxxxxxx).read())
> >         return
> > reports = {}
> > reports["sessioncount"] = {}
> > reports["sessioncount"]["description"] = "Counts Product Session Starts"
> > reports["sessioncount"]["regex"] = r"ProductSessionStartAudit"
> > reports["sessioncount"]["sort"] = "value"
>
> > reports["1pm"] = {}
> > reports["1pm"]["description"] = "Counts all activities during the 1pm hour"
> > reports["1pm"]["regex"] = r"(?<=\|\|\d\d/\d\d/\d\d\d\d )13:\d\d"
> > reports["1pm"]["sort"] = "key"
>
> > reports["top-locids"] = {}
> > reports["top-locids"]["description"] = "Ranks locids"
> > reports["top-locids"]["regex"] = r"(?<=-)[-A-Za-z0-9_]*(?=-[^-|]{30,32})"
> > reports["top-locids"]["sort"] = "value"
>
> > records = {}
>
> > def main():
> >     try:
> >         PORT = 8585
> >         server = HTTPServer(('', PORT), MyHandler)
> >         print 'started server on %s...' % PORT
>
> >         server.serve_forever()
>
> >     except (KeyboardInterrupt, SystemExit):
> >         print "closing..."
> >         server.socket.close()
>
> > if __name__ == '__main__':
> >     main()
> > ###################################
>
> > ##########dashboard.java############
> > package com.xxxxxxx.client;
>
> > import com.google.gwt.core.client.EntryPoint;
> > import com.google.gwt.user.client.Window;
> > import com.google.gwt.user.client.ui.ChangeListener;
> > import com.google.gwt.user.client.ui.ClickListener;
> > import com.google.gwt.user.client.ui.HorizontalPanel;
> > import com.google.gwt.user.client.ui.ListBox;
> > import com.google.gwt.user.client.ui.Panel;
> > import com.google.gwt.user.client.ui.RootPanel;
> > import com.google.gwt.user.client.ui.Widget;
> > import com.google.gwt.visualization.client.AjaxLoader;
> > import com.google.gwt.visualization.client.DataTable;
> > import com.google.gwt.visualization.client.Query;
> > import com.google.gwt.visualization.client.QueryResponse;
> > import com.google.gwt.visualization.client.Query.Callback;
> > import com.google.gwt.visualization.client.visualizations.ColumnChart;
> > import com.google.gwt.visualization.client.visualizations.Table;
>
> > import org.gwtwidgets.client.ui.cal.CalendarDate;
> > import org.gwtwidgets.client.ui.cal.SimpleCalendar;
>
> > public class dashboard implements EntryPoint {
> > public static class vizData {
> >     public static String vizDate = "";
> >     public static String vizQuery = "";
> >     public static int vizID;
> >     public static ColumnChart col;
> >     public static Table tab;
> >     public static int count = 0;}
>
> >   public void onModuleLoad() {
> >     // Create a callback to be called when the visualization API
> >     // has been loaded.
> >     Runnable onLoadCallback = new Runnable() {
> >       public void run() {
> >         Panel panel = RootPanel.get();
> >         vizData.col = new ColumnChart();
> >         vizData.tab = new Table();
> >         panel.add(vizData.col);
> >         panel.add(vizData.tab);
> >       }
> >     };
>
> >     Panel panel = RootPanel.get();
>
> >     HorizontalPanel top = new HorizontalPanel();
>
> >     SimpleCalendar cal = new SimpleCalendar();
> >     cal.addClickListener(new ClickListener() {
> >         @SuppressWarnings("deprecation")
> > public void onClick(Widget sender) {
> >          CalendarDate date = ((SimpleCalendar) sender).getDateSelected();
> >          int y = date.getDate().getYear() + 1900;
> >          int m = date.getDate().getMonth() + 1;
> >          int d = date.getDate().getDate();
> >          String mm;
> >          String dd;
> >          if (m < 10) {
> >          mm = "0" + Integer.toString(m);
> >          }
> >          else {
> >          mm = Integer.toString(m);
> >          }
> >          if (d < 10) {
> >          dd = "0" + Integer.toString(d);
> >          }
> >          else {
> >          dd = Integer.toString(d);
> >          }
> >             vizData.vizDate = Integer.toString(y) + "-" + mm + "-" + dd;
> >             updateData();}
>
> >      });
> >     top.add(cal);
>
> >     ListBox query = new ListBox();
> >     query.setTitle("Select a base query");
> >     query.addItem("sessioncount");
> >     vizData.vizQuery = "sessioncount";
> >     query.addItem("1pm");
> >     query.addChangeListener(new ChangeListener() {
> > public void onChange(Widget sender) {
> > vizData.vizQuery = ((ListBox) sender).getValue(((ListBox)
> > sender).getSelectedIndex());
> > if (vizData.vizDate != ""){
> > updateData();}
> > }
>
> >     });
> >     top.add(query);
>
> >     panel.add(top);
>
> >     // Load the visualization api, passing the onLoadCallback to be called
> >     // when loading is done.
> >     AjaxLoader.loadVisualizationApi(onLoadCallback, ColumnChart.PACKAGE,
> > Table.PACKAGE);
> >   }
>
> >   private ColumnChart.Options colOptions(String title) {
> >     ColumnChart.Options options = ColumnChart.Options.create();
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Visualization API" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-visualization-api?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to