22 void*
m_hndlMno = dlopen(
"libmnogosearch-3.3.so", RTLD_LAZY);
23 if ( m_hndlMno == NULL ) {
24 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : Cannot load libmnogosearch.so shared library! " << dlerror();
28 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmEnvInit function " << dlerror();
32 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmAgentInit function " << dlerror();
36 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmAgentAddLine function " << dlerror();
40 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmFind2 function " << dlerror();
44 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmVarListFindStr function " << dlerror();
48 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmVarListFindInt function " << dlerror();
52 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmResultFree function " << dlerror();
56 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmAgentFree function " << dlerror();
60 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : cannot dlsym on UdmEnvFree function " << dlerror();
64 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : Cannot mf_UdmEnvInit";
68 LOG(
ERROR) <<
"WsMnoGoSearch::WsMnoGoSearch() : Cannot mf_UdmAgentInit";
78 LOG(
INFO) <<
"WsMnoGoSearch::WsMnoGoSearch() : completed";
92 LOG(
DEBUG) <<
"WsMnoGoSearch::load() : Loading results for " << q;
96 LOG(
INFO) <<
"WsMnoGoSearch::load() : Load cannot UdmFind2 ";
99 LOG(
DEBUG) <<
"WsMnoGoSearch::load() : Filesystem root : " <<
m_fst->getRootPath().string();
100 for (
int row = 0; row <
m_res->num_rows; ++row) {
101 UDM_DOCUMENT* Doc = &
m_res->Doc[row];
103 boost::algorithm::replace_all(url,
"%26",
"&");
104 boost::algorithm::replace_all(url,
"%20",
" ");
107 path fp(url.substr(7));
108 LOG(
DEBUG) <<
"WsMnoGoSearch::load() : PATH is " << fp.string();
116 return m_res->num_rows;
127 vector<WsResultItem> filteredResults;
128 list<WsResultItem>::iterator it;
130 LOG(
DEBUG) <<
"WsMnoGoSearch::getResults() : Total found results before filter " <<
m_results.size();
133 path = (*it).getPath().string();
135 n =
m_fst->eatPath(path);
138 if ( n.get()->isDirectory() )
continue;
140 if (n.get()->isAllowed(groups)) {
141 string newPath = (*it).getFullPath().string();
142 std::time_t t = boost::filesystem::last_write_time(newPath);
143 (*it).setModifyDate(t);
144 (*it).setSize(boost::filesystem::file_size(newPath));
145 filteredResults.push_back(*it);
148 LOG(
ERROR) <<
"WsMnoGoSearch::getResults() : Error finding node " << path << endl;
150 LOG(
DEBUG) <<
"WsMnoGoSearch :: Total found results after filter " <<
m_results.size();
151 return filteredResults;
pf_UdmAgentFree mf_UdmAgentFree
int(* pf_UdmAgentAddLine)(UDM_AGENT *Agent, const char *line)
boost::shared_ptr< WsAbstractNode > NodePtr
int load(FileSystemTreePtr fst, string query)
Loads all search results.
pf_UdmAgentAddLine mf_UdmAgentAddLine
pf_UdmVarListFindInt mf_UdmVarListFindInt
UDM_ENV *(* pf_UdmEnvInit)(UDM_ENV *Env)
vector< WsResultItem > getResults(const set< string > &groups)
Get list of documents readable by person member of all groups passed in parameter.
pf_UdmAgentInit mf_UdmAgentInit
list< WsResultItem > m_results
void(* pf_UdmEnvFree)(UDM_ENV *Env)
Represents a Result of a search.
const char *(* pf_UdmVarListFindStr)(UDM_VARLIST *vars, const char *name, const char *defval)
Abstract class for search.
void WsMnoGoSearchInit(void)
boost::shared_ptr< WsFileSystemTree > FileSystemTreePtr
UDM_AGENT *(* pf_UdmAgentInit)(UDM_AGENT *Agent, UDM_ENV *Env, int id)
int getSize()
Loads all search results.
UDM_RESULT *(* pf_UdmFind2)(UDM_AGENT *Agent, const char *query)
void(* pf_UdmResultFree)(UDM_RESULT *Result)
pf_UdmResultFree mf_UdmResultFree
void(* pf_UdmAgentFree)(UDM_AGENT *Agent)
WsMnoGoSearch()
Constructor for the Search object.
pf_UdmEnvFree mf_UdmEnvFree
pf_UdmVarListFindStr mf_UdmVarListFindStr
int(* pf_UdmVarListFindInt)(UDM_VARLIST *vars, const char *name, const int defval)
pf_UdmEnvInit mf_UdmEnvInit