}\r
int rval=chdir(m_workingdirectory.c_str());\r
\r
- SetupDB();\r
- SetupDefaultOptions();\r
+#ifdef QUERY_LOG\r
+ {\r
+ Poco::AutoPtr<Poco::FormattingChannel> formatter=new Poco::FormattingChannel(new Poco::PatternFormatter("%Y-%m-%d %H:%M:%S | %t"));\r
+ Poco::AutoPtr<Poco::FileChannel> fc=new Poco::FileChannel("query.log");\r
+ fc->setProperty("rotation","daily");\r
+ fc->setProperty("times","utc");\r
+ fc->setProperty("archive","timestamp");\r
+ fc->setProperty("purgeCount","5");\r
+ fc->setProperty("compress","true");\r
+ formatter->setChannel(fc);\r
+ Poco::Logger::create("querylog",formatter,Poco::Message::PRIO_INFORMATION);\r
+ }\r
+#endif\r
+\r
+ LoadDatabase();\r
+ SetupDB(m_db);\r
+ SetupDefaultOptions(m_db);\r
initializeLogger();\r
config().setString("application.logger","logfile");\r
}\r
int initiallevel=Poco::Message::PRIO_TRACE;\r
\r
std::string tempval="";\r
- if(Option::Instance()->Get("LogLevel",tempval))\r
+ Option option(m_db);\r
+\r
+ if(option.Get("LogLevel",tempval))\r
{\r
StringFunctions::Convert(tempval,initiallevel);\r
}\r
setLogger(Poco::Logger::create("logfile",formatter,Poco::Message::PRIO_INFORMATION));\r
Poco::Logger::get("logfile").information("LogLevel set to "+tempval);\r
Poco::Logger::get("logfile").setLevel(initiallevel);\r
+\r
}\r
\r
int FMSApp::main(const std::vector<std::string> &args)\r
// so we need to set the working directory again\r
int rval=chdir(m_workingdirectory.c_str());\r
\r
- if(m_displayhelp)\r
+ if(VerifyDB(m_db)==false)\r
+ {\r
+ std::cout << "The FMS database failed verification. It is most likely corrupt!" << std::endl;\r
+ logger().fatal("The FMS database failed verification. It is most likely corrupt!");\r
+ }\r
+ else if(m_displayhelp)\r
{\r
}\r
else if(m_showoptions)\r
else\r
{\r
logger().information("FMS startup v"FMS_VERSION);\r
+ logger().information("Using SQLite "SQLITE_VERSION);\r
+\r
+ std::string tempval("");\r
+ Option option(m_db);\r
+ option.Get("VacuumOnStartup",tempval);\r
+ if(tempval=="true")\r
+ {\r
+ logger().information("VACUUMing database");\r
+ m_db->Execute("VACUUM;");\r
+ }\r
\r
StartThreads();\r
\r
{\r
for(std::map<std::string,std::string>::iterator i=m_setoptions.begin(); i!=m_setoptions.end(); i++)\r
{\r
- std::string tempval="";\r
- if(Option::Instance()->Get((*i).first,tempval))\r
+ std::string tempval("");\r
+ Option option(m_db);\r
+ if(option.Get((*i).first,tempval))\r
{\r
- Option::Instance()->Set((*i).first,(*i).second);\r
+ option.Set((*i).first,(*i).second);\r
std::cout << "Option " << (*i).first << " set to " << (*i).second << std::endl;\r
}\r
else\r
\r
void FMSApp::showOptions()\r
{\r
- SQLite3DB::Statement st=SQLite3DB::DB::Instance()->Prepare("SELECT Option, OptionValue FROM tblOption;");\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT Option, OptionValue FROM tblOption;");\r
st.Step();\r
while(st.RowReturned())\r
{\r
\r
void FMSApp::StartThreads()\r
{\r
- std::string tempval="";\r
+ std::string tempval("");\r
+ Option option(m_db);\r
\r
// always start the DB maintenance thread\r
logger().trace("FMSApp::StartThreads starting DBMaintenanceThread");\r
m_threads.Start(new DBMaintenanceThread());\r
\r
- Option::Instance()->Get("StartHTTP",tempval);\r
+ option.Get("StartHTTP",tempval);\r
if(tempval=="true")\r
{\r
logger().trace("FMSApp::StartThreads starting HTTPThread");\r
m_threads.Start(new HTTPThread());\r
+ if(isInteractive())\r
+ {\r
+ std::cout << "Started HTTP Thread" << std::endl;\r
+ }\r
}\r
else\r
{\r
}\r
\r
tempval="";\r
- Option::Instance()->Get("StartNNTP",tempval);\r
+ option.Get("StartNNTP",tempval);\r
if(tempval=="true")\r
{\r
logger().trace("FMSApp::StartThreads starting NNTPListener");\r
m_threads.Start(new NNTPListener());\r
+ if(isInteractive())\r
+ {\r
+ std::cout << "Started NNTP Thread" << std::endl;\r
+ }\r
}\r
else\r
{\r
}\r
\r
tempval="";\r
- Option::Instance()->Get("StartFreenetUpdater",tempval);\r
+ option.Get("StartFreenetUpdater",tempval);\r
if(tempval=="true")\r
{\r
logger().trace("FMSApp::StartThreads starting FreenetMasterThread");\r
m_threads.Start(new FreenetMasterThread());\r
+ if(isInteractive())\r
+ {\r
+ std::cout << "Started Freenet FCP Thread" << std::endl;\r
+ }\r
}\r
else\r
{\r