Skip site navigation (1) Skip section navigation (2)

Re: about monitoring the input stream

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Albert Cardona <acardona(at)ini(dot)phys(dot)ethz(dot)ch>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: about monitoring the input stream
Date: 2006-09-16 12:12:24
Message-ID: FD3CDF0A-01B6-4EF9-A508-B0109659E3D7@fastcrypt.com (view raw or flat)
Thread:
Lists: pgsql-jdbc
Hi Albert,

Could you release your code with a freebsd like license. I'm afraid  
that we can't accept any GPL'd code.

I'd greatly love to see your code included.

Dave

On 16-Sep-06, at 6:08 AM, Albert Cardona wrote:

>
> Mark,
>
> The relevant parts of the code for monitoring the PGStream are  
> attached below.
>
> This code is part of TrakEM2, an ImageJ/postgresql -based  
> application (GPL
> applies) for managing an arbitrarily large set of images, segmented  
> profiles
> and metadata in general, for the purpose of extracting 3D models and a
> hierarchical structure of objects present in the sample represented  
> by the
> images. See all details here:
> http://www.ini.unizh.ch/~acardona/trakem2.html
>
> The code below belongs to the current svn snapshot, which won't be  
> available
> until the end of this month.
>
>
> /** Extract from private inner class Monitor. GPL applies, see the
> TrakEM2-src.zip file, class ini.trakem2.persistence.DBLoader, at
> http://www.ini.unizh.ch/~acardona/trakem2.html */
>
>         public Monitor(Connection con) {
>                 connection = con;
>                 LoggingInputStream lis = null;
>                 try {
>                         AbstractJdbc2Connection a2 =
> (AbstractJdbc2Connection)connection;
>                         Class c2 =
> connection.getClass().getSuperclass().getSuperclass();
>                         java.lang.reflect.Field f_proto =
> c2.getDeclaredField("protoConnection");
>                         f_proto.setAccessible(true);
>                         // protoConnection is a ProtocolConnection  
> interface,
> implemented in core.v3.ProtocolConnectionImpl !
>                         //ProtocolConnectionImpl pci =
> (ProtocolConnectionImpl)m_proto.get(c2); // class is private to the  
> package,
> can't cast!
>                         Object pci = f_proto.get(a2);
>                         // finally, get the PGStream
>                         java.lang.reflect.Field f_pgstream =
> pci.getClass().getDeclaredField("pgStream");
>                         f_pgstream.setAccessible(true);
>                         PGStream pgstream = (PGStream)f_pgstream.get 
> (pci);
>                         // now the InputStream
>                         java.lang.reflect.Field f_i =
> pgstream.getClass().getDeclaredField("pg_input");
>                         f_i.setAccessible(true);
>                         InputStream stream = (InputStream)f_i.get 
> (pgstream);
>                         lis = new LoggingInputStream(stream);
>                         f_i.set(pgstream, lis); // TADA! Many  
> thanks to the
> PGSQL JDBC mailing list for this last tip on not just monitoring  
> the PGStream
> as I was doing, but on replacing the inputstream altogether with a  
> logging
> copy! ("CountingInputStream", they called it).
>
>                 } catch (Exception e) {
>                         new IJError(e);
>                 }
>                 this.lis = lis;
>                 makeWindow();
>         }
>
> /** ===================== */
>
> /** The class below exists as ini.trakem2.io.LoggingInputStream in  
> TrakEM2.
> The GPL applies, see the TrakEM2-src.zip downloadable at
> http://www.ini.unizh.ch/~acardona/trakem2.html */
>
> import java.io.BufferedInputStream;
> import java.io.InputStream;
> import java.io.IOException;
>
>
> /** A class to monitor an input stream for speed and total byte  
> download. */
> public class LoggingInputStream extends BufferedInputStream {
>
>         private long last;
>         private long n = 0;
>         private long accum_time = 0;
>         private long accum_bytes = 0;
>
>         public LoggingInputStream(InputStream in) {
>                 super(in);
>                 last = System.currentTimeMillis();
>         }
>
>         public int read() throws IOException {
>                 int m = super.read();
>                 n += m;
>                 return m;
>         }
>
>         public int read(byte[] b) throws IOException {
>                 int m = super.read(b);
>                 n += m;
>                 return m;
>         }
>
>         public int read(byte[] b, int off, int len) throws  
> IOException {
>                 int m = super.read(b, off, len);
>                 n += m;
>                 return m;
>         }
>
>         /** Put the accumulated count to zero. */
>         public void resetInfo() { // to work perfect, this would  
> need a
> synchronized clause, but no such perfection is needed, and there are
> perfomance issues.
>                 accum_bytes = n = 0;
>                 last = System.currentTimeMillis();
>                 accum_time = 0;
>         }
>
>         /** Returns info as
>         * [0] = current time in ms
>         * [1] = elapsed time in ms since last call to getInfo(long[])
>         * [2] = n_bytes_read since last call to getInfo(long[])
>         * [3] = accumulated time in ms since last call to resetInfo()
>         * [4] = accumulated bytes since last call to resetInfo()
>         *
>         * So current speed = info[2]/info[1] Kb/s
>         */
>         public void getInfo(long[] info) {
>                 long now = System.currentTimeMillis();
>                 accum_time += now - last;
>                 accum_bytes += n;
>                 info[0] = now;
>                 info[1] = now - last; // elapsed time
>                 info[2] = n;
>                 info[3] = accum_time; // total time since last call to
> resetInfo()
>                 info[4] = accum_bytes; // total bytes since last  
> call to
> resetInfo()
>                 // reset cycle vars:
>                 n = 0;
>                 last = now;
>         }
> }
>
>
> -- 
> Albert Cardona
> Molecular Cell Developmental Biology
> University of California Los Angeles
> Tel +1 310 2067376
> Programming: http://www.ini.unizh.ch/~acardona/trakem2.html
> Research: http://www.mcdb.ucla.edu/Research/Hartenstein/
> Web design: http://www.pixelets.com
>
>
>
> ---------------------------(end of  
> broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faq
>


In response to

pgsql-jdbc by date

Next:From: Sriram DandapaniDate: 2006-09-17 15:54:21
Subject: Re: idle in transaction
Previous:From: Albert CardonaDate: 2006-09-16 10:08:43
Subject: Re: about monitoring the input stream

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group