/// handles requests for LogService void LogService::operator()(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn) { // Set Content-type to "text/plain" (plain ascii text) http::response_writer_ptr writer(http::response_writer::create(tcp_conn, *http_request_ptr, boost::bind(&tcp::connection::finish, tcp_conn))); writer->get_response().set_content_type(http::types::CONTENT_TYPE_TEXT); getLogAppender().writeLogEvents(writer); writer->send(); }
int main(int argc, char ** argv) { try { boost::shared_ptr<fastload::Configuration> configuration; try { configuration = boost::shared_ptr<fastload::Configuration>(new fastload::Configuration(argc, argv)); log4cpp::Appender * appender(getLogAppender(* configuration)); log4cpp::Category & log = log4cpp::Category::getInstance("wdb"); log.addAppender(appender); log.setPriority(configuration->logLevel()); } catch ( std::exception & e ) { // Failure to read configuration or set up logging will be written // to stderr instead of logs: std::clog << e.what() << std::endl; return 1; } log4cpp::Category & log = log4cpp::Category::getInstance("wdb"); fastload::DataQueue::Ptr rawQue(new fastload::DataQueue(50000, "raw")); fastload::DataQueue::Ptr translatedQue(new fastload::DataQueue(1000, "translated")); fastload::TranslateJob::Ptr translateJob = fastload::TranslateJob::get(configuration->pqConnect(), configuration->wciUser(), configuration->nameSpace(), rawQue, translatedQue, not configuration->onlyCreateCroups()); pointer_runner<fastload::TranslateJob> translateRunner(translateJob); boost::thread translateThread(translateRunner); fastload::old::CopyJob copyJob(configuration->pqConnect(), translatedQue); boost::thread copyThread(copyJob); try { for ( std::vector<std::string>::const_iterator it = configuration->file().begin(); it != configuration->file().end(); ++ it ) { if ( * it == "-" ) copyData(std::cin, * rawQue); else { std::ifstream s(it->c_str()); if ( ! s.good() ) { log.fatalStream() << "Unable to open file " << * it; exit(1); } copyData(s, * rawQue); } } rawQue->done(); } catch ( std::exception & e ) { // improved error logging checkForErrors(* translateJob); checkForErrors(copyJob); log.fatal(e.what()); return 1; } const boost::posix_time::time_duration duration(0,0,1); while ( translateJob->status() != fastload::AbstractJob::Done or copyJob.status() != fastload::AbstractJob::Done ) { checkForErrors(* translateJob); checkForErrors(copyJob); boost::this_thread::sleep(duration); } log.infoStream() << "COPY " << translatedQue->callsToGet(); } catch ( std::exception & e ) { log4cpp::Category::getInstance("wdb").fatal(e.what()); return 1; } }