| 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 | } |
|---|