#include "Report_DomainSummary.h" Report_DomainSummary::Report_DomainSummary(const SpiderManager *_sm, const int _domainId, const vector *_pageIds): Report(_sm), m_domainId(_domainId), m_pageIds(_pageIds) { //find the relevant domain InternetResource *ir = 0; vector::const_iterator i = m_sm->m_domains.begin(); StringMap::const_iterator iStat; const Parser *parser; const Filter *f; const FilterGroup *fg; while (i != m_sm->m_domains.end() && (*i)->m_domainID != m_domainId) i++; if (i != m_sm->m_domains.end()) { Domain *domain = *i; opentag("report"); //parameters addAttribute("domainId", domain->m_domainID); write(" pageIds=\""); char str[32]; for (vector::const_iterator j = m_pageIds->begin(); j != m_pageIds->end(); j++) { _SNPRINTF(str, 32, "%u", *j); write(str); write(","); } write("\""); //domain opentag("domain"); addAttribute("id", domain->m_domainID); addAttribute("name", domain->m_domain); addAttribute("repeaters", domain->m_repeaters); addAttribute("memory", domain->m_memoryUsage); addAttribute("startURL", domain->m_startURL); addAttribute("persistent", domain->m_persistent); opentag("parsers"); for (vector >::const_iterator iParser = domain->m_parsers.begin(); iParser != domain->m_parsers.end(); iParser++) { opentag("parser"); parser = iParser->second; if (parser) { addAttribute("pagegroupid", parser->m_pagegroupid); addAttribute("parsertype", parser->parsertype()); addAttribute("type", parser->m_type); for (FilterGroup::const_iterator iFilter = iParser->first->begin(); iFilter != iParser->first->end(); iFilter++) { f = iFilter->second; opentag("area"); if (f) CDATA(f->regEx()); closetag("area"); } } closetag("parser"); } closetag("parsers"); opentag("browseAreas"); fg = domain->m_browseAreas; if (fg) { for (FilterGroup::const_iterator iFilter = domain->m_browseAreas->begin(); iFilter != domain->m_browseAreas->end(); iFilter++) { f = iFilter->second; opentag("area"); if (f) CDATA(f->regEx()); closetag("area"); } } closetag("browseAreas"); opentag("pages"); page(domain->m_rootPage); closetag("pages"); opentag("repeaters"); for (StringMap::const_iterator iPage=domain->m_pages.begin(); iPage!=domain->m_pages.end(); iPage++) if (iPage->second->isRepeating()) page(iPage->second); closetag("repeaters"); opentag("codes"); for (map::const_iterator iCode=domain->m_HTTPReturnCodes.begin(); iCode!=domain->m_HTTPReturnCodes.end(); iCode++) { if (iCode->first!=200) { opentag("code"); addAttribute("count", iCode->second); addAttribute("id", iCode->first); for (StringMap::const_iterator iPage = domain->m_pages.begin(); iPage != domain->m_pages.end(); iPage++) { ir = iPage->second->m_ir; if (ir && iCode->first == ir->m_responseCode) page(iPage->second); } closetag("code"); } } closetag("codes"); opentag("resourceSizes"); for (map::const_iterator i = domain->m_resourceSizes.begin(); i != domain->m_resourceSizes.end(); i++) { opentag("size"); addAttribute("kb", i->first); addAttribute("count", i->second); closetag("size"); } closetag("resourceSizes"); opentag("unknownProtocols"); for (iStat = domain->m_unknownProtocol.begin(); iStat != domain->m_unknownProtocol.end(); iStat++ ) { opentag("unknownProtocol");CDATA(iStat->first);closetag("unknownProtocol"); } closetag("unknownProtocols"); opentag("unknownFileExtensions"); for (iStat = domain->m_unknownFileExtension.begin(); iStat != domain->m_unknownFileExtension.end(); iStat++ ) { opentag("unknownFileExtension");CDATA(iStat->first);closetag("unknownFileExtension"); } closetag("unknownFileExtensions"); opentag("unknownCharSets"); for (iStat = domain->m_unknownCharSet.begin(); iStat != domain->m_unknownCharSet.end(); iStat++ ) { opentag("unknownCharSet");CDATA(iStat->first);closetag("unknownCharSet"); } closetag("unknownCharSets"); opentag("unknownContentTypes"); for (iStat = domain->m_unknownContentType.begin(); iStat != domain->m_unknownContentType.end(); iStat++ ) { opentag("unknownContentType");CDATA(iStat->first);closetag("unknownContentType"); } closetag("unknownContentTypes"); opentag("unknownResponseProtocols"); for (iStat = domain->m_unknownResponseProtocol.begin(); iStat != domain->m_unknownResponseProtocol.end(); iStat++ ) { opentag("unknownResponseProtocol");CDATA(iStat->first);closetag("unknownResponseProtocol"); } closetag("unknownResponseProtocols"); opentag("unknownLanguages"); for (iStat = domain->m_unknownLanguage.begin(); iStat != domain->m_unknownLanguage.end(); iStat++ ) { opentag("unknownLanguage");CDATA(iStat->first);closetag("unknownLanguage"); } closetag("unknownLanguages"); opentag("unknownContentEncodings"); for (iStat = domain->m_unknownContentEncoding.begin(); iStat != domain->m_unknownContentEncoding.end(); iStat++ ) { opentag("unknownContentEncoding");CDATA(iStat->first);closetag("unknownContentEncoding"); } closetag("unknownContentEncodings"); opentag("unknownCompressions"); for (iStat = domain->m_unknownCompression.begin(); iStat != domain->m_unknownCompression.end(); iStat++ ) { opentag("unknownCompression");CDATA(iStat->first);closetag("unknownCompression"); } closetag("unknownCompressions"); opentag("unknownConversationEndSchemes"); for (iStat = domain->m_unknownConversationEndScheme.begin(); iStat != domain->m_unknownConversationEndScheme.end(); iStat++ ) { opentag("unknownConversationEndScheme");CDATA(iStat->first);closetag("unknownConversationEndScheme"); } closetag("unknownConversationEndSchemes"); closetag("domain"); closetag("report"); } } void Report_DomainSummary::page(const InternetURIRequest *p) { if (p->m_ir) { //make sure that this page has not been displayed already vector::const_iterator iExpanded=m_expanded.begin(); const unsigned int id = p->m_ir->m_id; while (iExpanded!=m_expanded.end() && *iExpanded!=id) iExpanded++; if (iExpanded == m_expanded.end()) { //ok show page m_expanded.push_back(id); opentag("page"); addAttribute("id", id); addAttribute("url", p->absoluteURL(), true); addAttribute("httpResponseCode", p->m_ir->m_responseCode); addAttribute("checkDigit", p->m_ir->m_checkDigit); addAttribute("childcount", p->size()); //addAttribute("memory", p->m_memoryUsage); //show children only if this id is in the expanded list vector::const_iterator iIDs = m_pageIds->begin(); while (iIDs != m_pageIds->end() && *iIDs != id) iIDs++; if (iIDs != m_pageIds->end()) //the page ID is in the expanded list so iterate through the children for (InternetURIRequest::const_iterator iPage=p->begin(); iPage!=p->end(); iPage++) page(*iPage); closetag("page"); } } else { //just a link, not retrieved yet opentag("page"); addAttribute("url", p->absoluteURL(), true); closetag("page"); } }