Changeset 88

Show
Ignore:
Timestamp:
11/17/05 16:21:51 (3 years ago)
Author:
dsandler
Message:

Improved reporting:

  • proxy now reports (a) that its application is 'proxy' and (b) its svn
    changelist #
  • publisher now reports version, scribe trees, and published feeds (with
    raw URL).
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • feedtree/trunk/l4j/FeedTreeProxy.xml

    r65 r88  
    1818    <timeoutErr>true</timeoutErr> 
    1919  </splash> --> 
     20  <versionInfo> 
     21    <fileVersion></fileVersion> 
     22    <txtFileVersion></txtFileVersion> 
     23    <productName>FeedTree Web Proxy</productName> 
     24  </versionInfo> 
    2025</launch4jConfig> 
  • feedtree/trunk/src/net/feedtree/proxyapp/WebProxyClient.java

    r84 r88  
    10321032            query.append("nid="); 
    10331033            query.append(getNode().getId().toStringFull()); 
     1034            query.append("&app=proxy"); 
    10341035            query.append("&v="); 
    10351036             
     
    10401041                query.append(release); // sigh 
    10411042            } 
     1043            query.append("&svn="); 
     1044            query.append(g_buildProperties.getProperty("svn.revision")); 
    10421045            query.append("&up="); 
    10431046            query.append(new Date().getTime() - m_startDate.getTime()); 
  • feedtree/trunk/src/net/feedtree/publisher/Publisher.java

    r1 r88  
    4141 
    4242import rice.p2p.commonapi.*; 
     43import rice.p2p.scribe.*; 
    4344 
    4445import net.feedtree.core.client.*; 
     
    136137    protected long m_checkInterval; 
    137138    protected long m_heartbeatInterval; 
     139 
     140    protected Date m_startDate; 
    138141     
    139142    protected Map m_lastFeedEventTimes = Collections.synchronizedMap(new HashMap()); 
     
    141144    protected Timer m_timer = new Timer(); 
    142145     
     146    // constants for date/time computation 
     147    public static final long SECONDS = 1000; 
     148    public static final long MINUTES = SECONDS * 60; 
     149    public static final long HOURS = MINUTES * 60; 
     150    public static final long DAYS = HOURS * 24; 
     151 
     152    // constants for statistics reporting 
     153    public static long DEFAULT_REPORT_INTERVAL = 1 * HOURS; 
     154    public static long DEFAULT_REPORT_START_DELAY = 5 * MINUTES; 
     155 
     156    public static String REPORT_URL = "http://stats.feedtree.net/report"; 
     157     
    143158    protected static int hashEntry(SyndEntry e) { 
    144159        String desc = ""; 
     
    436451        return ANYCAST_CONTINUE; // continue searching 
    437452    } 
    438      
     453 
     454    protected class PubReporter extends TimerTask { 
     455        protected Timer m_timer = new Timer(); 
     456        public PubReporter() { 
     457            Logger.global.fine("# Scheduling reports for every " 
     458                + (DEFAULT_REPORT_INTERVAL / HOURS) + " hours"); 
     459            m_timer.scheduleAtFixedRate( 
     460                this, 
     461                DEFAULT_REPORT_START_DELAY, 
     462                DEFAULT_REPORT_INTERVAL); 
     463        } 
     464 
     465        public void run() { 
     466            Logger.global.fine("# Reporting statistics to URL: " + REPORT_URL); 
     467 
     468            // stats.feedtree.net/report.cgi?nid=foo&v=bar&feeds=topic,parent,10,1 
     469            StringBuffer query = new StringBuffer(); 
     470             
     471            query.append("nid="); 
     472            query.append(getNode().getId().toStringFull()); 
     473            query.append("&app=publisher"); 
     474            query.append("&v="); 
     475             
     476            String release = g_buildProperties.getProperty("feedtree.release"); 
     477            try { 
     478                query.append(URLEncoder.encode(release, "UTF-8")); 
     479            } catch (java.io.UnsupportedEncodingException exc) { 
     480                query.append(release); // sigh 
     481            } 
     482            query.append("&svn="); 
     483            query.append(g_buildProperties.getProperty("svn.revision")); 
     484            query.append("&up="); 
     485            query.append(new Date().getTime() - m_startDate.getTime()); 
     486            query.append("&mem="); 
     487            query.append(Runtime.getRuntime().totalMemory()); 
     488             
     489            query.append("&published_feeds="); 
     490 
     491            for(int i=0; i<m_urls.length; i++) { 
     492                if (i>0) query.append("|"); 
     493                try { 
     494                    query.append(URLEncoder.encode(m_urls[i], "UTF-8")); 
     495                } catch (java.io.UnsupportedEncodingException exc) { 
     496                    query.append(release); // sigh 
     497                } 
     498                query.append(','); 
     499                if (m_topics.containsKey(m_urls[i])) {  
     500                    Topic topic = (Topic) m_topics.get(m_urls[i]); 
     501                    query.append(topic.getId().toStringFull()); 
     502                } 
     503            } 
     504             
     505            query.append("&scribes="); 
     506 
     507            Hashtable topics = getScribe().topics; 
     508            synchronized(topics) { 
     509                boolean first = true; 
     510                for(Enumeration iter = topics.elements();  
     511                        iter.hasMoreElements() ;) 
     512                { 
     513                    ScribeImpl.TopicManager tman  
     514                        = (ScribeImpl.TopicManager)(iter.nextElement()); 
     515                    Topic topic = tman.getTopic(); 
     516                 
     517                    if (!first) { query.append('|'); } else { first = false; } 
     518 
     519                    NodeHandle parent = tman.getParent(); 
     520                     
     521                    query.append(topic.getId().toStringFull()); 
     522                    query.append(','); 
     523                    if (parent != null) { 
     524                        query.append(parent.getId().toStringFull()); 
     525                    } else { 
     526                        // leave parent blank if we're the root! 
     527                        //query.append(getNode().getId().toStringFull()); 
     528                    } 
     529                } 
     530            } 
     531             
     532            try { 
     533                URL u = new URL(REPORT_URL); 
     534 
     535                //Logger.global.finest("Opening URL: " + u); 
     536                URLConnection connection = u.openConnection(); 
     537                connection.setDoOutput(true); 
     538                String postData = query.toString(); 
     539                connection.setRequestProperty("CONTENT_LENGTH",  
     540                    String.valueOf(postData.length())); 
     541 
     542                //Logger.global.finest("Writing POST data: " + postData); 
     543 
     544                OutputStreamWriter output = new OutputStreamWriter( 
     545                    connection.getOutputStream()); 
     546                output.write(postData); 
     547                output.flush(); 
     548                         
     549                BufferedReader input = new BufferedReader( 
     550                        new InputStreamReader(connection.getInputStream())); 
     551 
     552                //Logger.global.finest("Reading from URL..."); 
     553                String response = input.readLine(); 
     554                if (!response.startsWith("OK")) { 
     555                    Logger.global.warning("Statistics server returned an error: " + response); 
     556                } else { 
     557                    Logger.global.fine("Statistics server responded: " + response); 
     558                } 
     559                 
     560                output.close(); 
     561                input.close(); 
     562            } catch (Exception e) {  
     563                Logger.global.warning("Could not report statistics: " + e.toString()); 
     564            } 
     565        } 
     566    } 
    439567     
    440568    public Publisher(Node node, int nodePort, int webPort,  
     
    446574 
    447575        Logger.global.info("### Publisher starting."); 
     576 
     577        new PubReporter(); 
    448578         
    449579        m_storage = Shelf.open( 
     
    491621        // Start the fetch timer 
    492622         
     623        m_startDate = new Date(); 
     624         
    493625        m_checkInterval = new Long( 
    494626            g_config.getProperty(PROP_FETCH_INTERVAL, "120")).longValue() * 1000L; 
     
    497629 
    498630        Logger.global.info("### Scheduling first refresh task for "  
    499             + new Date(new Date().getTime() + m_checkInterval).toString()); 
     631            + new Date(m_startDate.getTime() + m_checkInterval).toString()); 
    500632 
    501633        m_timer.scheduleAtFixedRate(