public void DoQuery(Query query, IQueryResult result, IQueryableChangeData changeData) { // Program semantics guarantee that imap_client != null StringBuilder sb = new StringBuilder(); foreach (QueryPart qp in query.Parts) { if (qp is QueryPart_Text) { if (sb.Length > 0) { sb.Append(' '); } sb.Append(((QueryPart_Text)qp).Text); } } // IMAP SEARCH protocol sb.Insert(0, "TEXT \""); sb.Append("\""); string imap_query = sb.ToString(); try { DoGMailQuery(sb.ToString(), query.MaxHits, result); } catch { Log.Error("GMailSearchDriver IMAP error :{0}", imap_client.LastError); } finally { imap_client.Disconnect(); } }
private void OnQueryDriverChanged(Queryable queryable, IQueryableChangeData change_data) { if (this.result != null) { QueryDriver.DoOneQuery(queryable, this.query, this.result, change_data); } }
public void DoQuery(Query query, IQueryResult result, IQueryableChangeData changeData) { if (NetBeagleList.Count == 0) { return; } ArrayList resultHandleList = new ArrayList(); lock (NetBeagleList) { log.Debug("NetBeagleQueryable: DoQuery ... Starting NetBeagleHandler queries"); foreach (NetBeagleHandler nb in NetBeagleList) { IAsyncResult iar = nb.DoQuery(query, result, changeData); resultHandleList.Add(iar); } } int i = 0; foreach (IAsyncResult iar in resultHandleList) { while (!((ReqContext)(iar.AsyncState)).RequestProcessed) { Thread.Sleep(1000); if (++i > 20) //Don't wait more than 20 secs { break; } } } log.Debug("NetBeagleQueryable:DoQuery ... Done"); }
public void DoQuery (Query query, IQueryResult result, IQueryableChangeData change_data) { try { iqueryable.DoQuery (query, result, change_data); } catch (Exception ex) { Logger.Log.Warn (ex, "Caught exception calling DoQuery on '{0}'", Name); } }
public void DoQuery(Query query, IQueryResult result, IQueryableChangeData change_data) { try { iqueryable.DoQuery(query, result, change_data); } catch (Exception ex) { Logger.Log.Warn(ex, "Caught exception calling DoQuery on '{0}'", Name); } }
public void DoQuery (Query query, IQueryResult result, IQueryableChangeData data) { // Get rid of the standard UnixTransport so that we can // forward our local query to remote hosts. query.Transports.Clear (); List<string[]> network_services = Conf.Networking.GetListOptionValues (Conf.Names.NetworkServices); if (network_services != null) { foreach (string[] service in network_services) query.RegisterTransport (new HttpTransport (service [1])); } // Anonymous delegates cannot be un-registered ... hence Query.HitsAdded hits_added_handler; hits_added_handler = delegate (HitsAddedResponse response) { //Console.WriteLine ("Adding hits added response"); TransformResponse(response); result.Add (response.Hits, response.NumMatches); }; Query.HitsSubtracted hits_subtracted_handler; hits_subtracted_handler = delegate (HitsSubtractedResponse response) { // Console.WriteLine ("Adding hits subtracted response"); result.Subtract (response.Uris); }; Query.Finished finished_handler; finished_handler = delegate (FinishedResponse response) { //Console.WriteLine ("Adding finished response"); // NO-OP }; // FIXME: ClosedEvent ? Should be handled by HttpTransport but should we do something more query.HitsAddedEvent += hits_added_handler; query.HitsSubtractedEvent += hits_subtracted_handler; query.FinishedEvent += finished_handler; Exception throw_me = null; try { query.SendAsyncBlocking (); } catch (Exception ex) { throw_me = ex; } // FIXME FIXME FIXME: Live query does not work! query.HitsAddedEvent -= hits_added_handler; query.HitsSubtractedEvent -= hits_subtracted_handler; query.FinishedEvent -= finished_handler; query.Transports.Clear (); if (throw_me != null) throw throw_me; return; }
private void OnQueryDriverChanged (Queryable queryable, IQueryableChangeData change_data) { bool is_indexing = QueryDriver.IsIndexing; if (is_indexing && crawl_status == IndexingStatus.NotRunning) SendIndexingStatusResponse (IndexingStatus.Running); else if (! is_indexing && crawl_status == IndexingStatus.Running) SendIndexingStatusResponse (IndexingStatus.NotRunning); }
// A method to fire the ChangedEvent event. static public void QueryableChanged(IQueryable iqueryable, IQueryableChangeData change_data) { if (ChangedEvent != null) { Queryable queryable = iqueryable_to_queryable [iqueryable] as Queryable; ChangedEvent(queryable, change_data); } }
public void DoQuery (Query query, IQueryResult result, IQueryableChangeData data) { string search = null; foreach (QueryPart qp in query.Parts) { if (qp is QueryPart_Text) { search = ((QueryPart_Text) qp).Text; break; } } if (String.IsNullOrEmpty (search)) return; SafeProcess pc = new SafeProcess (); // Double the max-hits since it is hard to tell locate to ignore // hidden files and directories; so we prune them later. // So if hidden files are returned first, you are doomed pc.Arguments = new string[] { "locate", "-P", "-e", "-l", (2 * query.MaxHits).ToString (), search }; pc.RedirectStandardOutput = true; pc.RedirectStandardError = false; pc.UseLangC = true; try { pc.Start (); } catch (Beagle.Util.SafeProcessException e) { Log.Error (e, "Error while running 'locate -P -e -l {0} {1}'", (2 * query.MaxHits), search); return; } string match = null; ArrayList result_batch = new ArrayList (); const int MAX_QUEUED_HITS = 25; Hit hit; int count = 0; using (StreamReader pout = new StreamReader (pc.StandardOutput)) { while (count < query.MaxHits && ! pout.EndOfStream) { match = pout.ReadLine (); hit = PathToHit (match); if (hit == null) continue; result_batch.Add (hit); if (result_batch.Count >= MAX_QUEUED_HITS) { result.Add (result_batch); result_batch.Clear (); } count ++; } } result.Add (result_batch, count); pc.Close (); }
public QueryClosure(Queryable queryable, Query query, QueryResult result, IQueryableChangeData change_data) { this.queryable = queryable; this.query = query; this.result = result; this.change_data = change_data; }
private void OnQueryDriverChanged(Queryable queryable, IQueryableChangeData change_data) { bool is_indexing = QueryDriver.IsIndexing; if (is_indexing && crawl_status == IndexingStatus.NotRunning) { SendIndexingStatusResponse(IndexingStatus.Running); } else if (!is_indexing && crawl_status == IndexingStatus.Running) { SendIndexingStatusResponse(IndexingStatus.NotRunning); } }
public void DoQuery (Query query, IQueryResult result, IQueryableChangeData changeData) { Logger.Log.Debug ("Kicking off a bugzilla query"); // FIXME - hard coding the url here XmlDocument xml = GetBugzillaXml (query.QuotedText); if (xml != null) { Hit hit = XmlBugToHit (xml, query.QuotedText); if (hit != null) result.Add (hit); } }
static public void DoOneQuery(Queryable queryable, Query query, QueryResult result, IQueryableChangeData change_data) { try { if (queryable.AcceptQuery(query)) { QueryClosure qc = new QueryClosure(queryable, query, result, change_data); result.AttachWorker(qc); } } catch (Exception ex) { Logger.Log.Warn(ex, "Caught exception calling DoOneQuery on '{0}'", queryable.Name); } }
public IAsyncResult DoQuery(Query query, IQueryResult result, IQueryableChangeData changeData) { ICollection l; SearchRequest sreq = new SearchRequest(); l = query.Text; if ((l != null) && (l.Count > 0)) { sreq.text = ICollection2StringList(query.Text); } l = query.MimeTypes; if ((l != null) && (l.Count > 0)) { sreq.mimeType = ICollection2StringList(query.MimeTypes); } l = query.Sources; if ((l != null) && (l.Count > 0)) { sreq.searchSources = ICollection2StringList(query.Sources); } sreq.qdomain = QueryDomain.Global; //Caution: This Enables Cascaded NetBeagle searching ! //sreq.qdomain = QueryDomain.System; //Cache the query request, get a unique searchId and include in network searchRequest: sreq.searchId = NetworkedBeagle.AddRequest(query); int hc = NetworkedBeagle.HopCount(query); sreq.hopCount = (hc > 0) ? hc:1; log.Info("NetBeagleHandler: Starting WebService Query for " + Hostname + ":" + Port); ReqContext rc = new ReqContext(wsp, result, netBeagleQueryable); IAsyncResult ar = wsp.BeginBeagleQuery(sreq, DoQueryResponseHandler, rc); // Return w/o waiting for Async query to complete. // Return IAsynResult handle, to allow caller to control it, if required. return(ar); }
public void DoQuery(Query query, IQueryResult result, IQueryableChangeData changeData) { Logger.Log.Debug("Kicking off a bugzilla query"); // FIXME - hard coding the url here XmlDocument xml = GetBugzillaXml(query.QuotedText); if (xml != null) { Hit hit = XmlBugToHit(xml, query.QuotedText); if (hit != null) { result.Add(hit); } } }
public IAsyncResult DoQuery (Query query, IQueryResult result, IQueryableChangeData changeData) { ICollection l; SearchRequest sreq = new SearchRequest(); l = query.Text; if ((l != null) && (l.Count > 0)) sreq.text = ICollection2StringList(query.Text); l = query.MimeTypes; if ((l != null) && (l.Count > 0)) sreq.mimeType = ICollection2StringList(query.MimeTypes); l = query.Sources; if ((l != null) && (l.Count > 0)) sreq.searchSources = ICollection2StringList(query.Sources); sreq.qdomain = QueryDomain.Global; //Caution: This Enables Cascaded NetBeagle searching ! //sreq.qdomain = QueryDomain.System; //Cache the query request, get a unique searchId and include in network searchRequest: sreq.searchId = NetworkedBeagle.AddRequest(query); int hc = NetworkedBeagle.HopCount(query); sreq.hopCount = (hc > 0) ? hc:1; log.Info("NetBeagleHandler: Starting WebService Query for " + Hostname + ":" + Port); ReqContext rc = new ReqContext(wsp, result, netBeagleQueryable); IAsyncResult ar = wsp.BeginBeagleQuery(sreq, DoQueryResponseHandler, rc); // Return w/o waiting for Async query to complete. // Return IAsynResult handle, to allow caller to control it, if required. return ar; }
public void DoQuery(Query query, IQueryResult result, IQueryableChangeData changeData) { StringBuilder sb = new StringBuilder(); foreach (QueryPart part in query.Parts) { if (part is QueryPart_Human) { sb.Append(((QueryPart_Human)part).QueryString); } else if (part is QueryPart_Text) { sb.Append(((QueryPart_Text)part).Text); } else { continue; // ignore other query parts } } Logger.Log.Debug("Querying google for '" + sb.ToString() + "'"); GoogleSearchResult gsr = gss.doGoogleSearch(googleKey, sb.ToString(), 0, maxResults, false, "", false, "", "", ""); ArrayList hits = new ArrayList(); int rank = 0; foreach (ResultElement elt in gsr.resultElements) { Hit hit = FromGoogleResultElement(elt, rank); hits.Add(hit); ++rank; } result.Add(hits, gsr.estimatedTotalResultsCount); }
public void DoQuery (Query query, IQueryResult result, IQueryableChangeData changeData) { // Program semantics guarantee that imap_client != null StringBuilder sb = new StringBuilder (); foreach (QueryPart qp in query.Parts) { if (qp is QueryPart_Text) { if (sb.Length > 0) sb.Append (' '); sb.Append (((QueryPart_Text) qp).Text); } } // IMAP SEARCH protocol sb.Insert (0, "TEXT \""); sb.Append ("\""); string imap_query = sb.ToString (); try { DoGMailQuery (sb.ToString (), query.MaxHits, result); } catch { Log.Error ("GMailSearchDriver IMAP error :{0}", imap_client.LastError); } finally { imap_client.Disconnect (); } }
static public void DoOneQuery (Queryable queryable, Query query, QueryResult result, IQueryableChangeData change_data) { try { if (queryable.AcceptQuery (query)) { QueryClosure qc = new QueryClosure (queryable, query, result, change_data); result.AttachWorker (qc); } } catch (Exception ex) { Logger.Log.Warn (ex, "Caught exception calling DoOneQuery on '{0}'", queryable.Name); } }
public void DoQuery (Query query,IQueryResult result, IQueryableChangeData changeData) { if (NetBeagleList.Count == 0) return; ArrayList resultHandleList = new ArrayList(); lock (NetBeagleList) { log.Debug("NetBeagleQueryable: DoQuery ... Starting NetBeagleHandler queries"); foreach (NetBeagleHandler nb in NetBeagleList) { IAsyncResult iar = nb.DoQuery (query, result, changeData); resultHandleList.Add (iar); } } int i = 0; foreach (IAsyncResult iar in resultHandleList) while (! ((ReqContext)(iar.AsyncState)).RequestProcessed) { Thread.Sleep(1000); if (++i > 20) //Don't wait more than 20 secs break; } log.Debug("NetBeagleQueryable:DoQuery ... Done"); }
public void DoQuery(Query query, IQueryResult result, IQueryableChangeData data) { // Get rid of the standard UnixTransport so that we can // forward our local query to remote hosts. query.Transports.Clear(); List <string[]> network_services = Conf.Networking.GetListOptionValues(Conf.Names.NetworkServices); if (network_services != null) { foreach (string[] service in network_services) { query.RegisterTransport(new HttpTransport(service [1])); } } // Anonymous delegates cannot be un-registered ... hence Query.HitsAdded hits_added_handler; hits_added_handler = delegate(HitsAddedResponse response) { //Console.WriteLine ("Adding hits added response"); TransformResponse(response); result.Add(response.Hits, response.NumMatches); }; Query.HitsSubtracted hits_subtracted_handler; hits_subtracted_handler = delegate(HitsSubtractedResponse response) { // Console.WriteLine ("Adding hits subtracted response"); result.Subtract(response.Uris); }; Query.Finished finished_handler; finished_handler = delegate(FinishedResponse response) { //Console.WriteLine ("Adding finished response"); // NO-OP }; // FIXME: ClosedEvent ? Should be handled by HttpTransport but should we do something more query.HitsAddedEvent += hits_added_handler; query.HitsSubtractedEvent += hits_subtracted_handler; query.FinishedEvent += finished_handler; Exception throw_me = null; try { query.SendAsyncBlocking(); } catch (Exception ex) { throw_me = ex; } // FIXME FIXME FIXME: Live query does not work! query.HitsAddedEvent -= hits_added_handler; query.HitsSubtractedEvent -= hits_subtracted_handler; query.FinishedEvent -= finished_handler; query.Transports.Clear(); if (throw_me != null) { throw throw_me; } return; }
public void DoQuery(Query query, IQueryResult result, IQueryableChangeData data) { }
public void DoQuery(Query query, IQueryResult result, IQueryableChangeData data) { string search = null; foreach (QueryPart qp in query.Parts) { if (qp is QueryPart_Text) { search = ((QueryPart_Text)qp).Text; break; } } if (String.IsNullOrEmpty(search)) { return; } SafeProcess pc = new SafeProcess(); // Double the max-hits since it is hard to tell locate to ignore // hidden files and directories; so we prune them later. // So if hidden files are returned first, you are doomed pc.Arguments = new string[] { "locate", "-P", "-e", "-l", (2 * query.MaxHits).ToString(), search }; pc.RedirectStandardOutput = true; pc.RedirectStandardError = false; pc.UseLangC = true; try { pc.Start(); } catch (Beagle.Util.SafeProcessException e) { Log.Error(e, "Error while running 'locate -P -e -l {0} {1}'", (2 * query.MaxHits), search); return; } string match = null; ArrayList result_batch = new ArrayList(); const int MAX_QUEUED_HITS = 25; Hit hit; int count = 0; using (StreamReader pout = new StreamReader(pc.StandardOutput)) { while (count < query.MaxHits && !pout.EndOfStream) { match = pout.ReadLine(); hit = PathToHit(match); if (hit == null) { continue; } result_batch.Add(hit); if (result_batch.Count >= MAX_QUEUED_HITS) { result.Add(result_batch); result_batch.Clear(); } count++; } } result.Add(result_batch, count); pc.Close(); }
public void DoQuery(Query query, IQueryResult query_result, IQueryableChangeData i_change_data) { ChangeData change_data = (ChangeData)i_change_data; ICollection added_uris = null; // Index listeners never return any initial matches. if (change_data == null && query.IsIndexListener) { return; } if (change_data != null) { if (change_data.RemovedUris != null) { query_result.Subtract(change_data.RemovedUris); } // If nothing was added, we can safely return now: this change // cannot have any further effect on an outstanding live query. if (change_data.AddedUris == null || change_data.AddedUris.Count == 0) { return; } added_uris = change_data.AddedUris; // If this is an index listener, we don't need to do a query: // we just build up synthethic hits and add them unconditionally. if (query.IsIndexListener) { ArrayList synthetic_hits = new ArrayList(); foreach (Uri uri in added_uris) { Hit hit = new Hit(); hit.Uri = uri; if (our_hit_filter != null) { bool accept = false; try { accept = our_hit_filter(hit); } catch (Exception e) { Log.Warn(e, "Caught an exception in HitFilter for {0}", hit.Uri); } if (!accept) { continue; } } synthetic_hits.Add(hit); } if (synthetic_hits.Count > 0) { query_result.Add(synthetic_hits); } return; } } Driver.DoQuery(query, query_result, added_uris, backend_query_part_hook, our_hit_filter); }
public void DoQuery (Query query, IQueryResult result, IQueryableChangeData changeData) { StringBuilder sb = new StringBuilder (); foreach (QueryPart part in query.Parts) { if (part is QueryPart_Human) { sb.Append (((QueryPart_Human) part).QueryString); } else if (part is QueryPart_Text) { sb.Append (((QueryPart_Text) part).Text); } else continue; // ignore other query parts } Logger.Log.Debug ("Querying google for '" + sb.ToString () + "'"); GoogleSearchResult gsr = gss.doGoogleSearch (googleKey, sb.ToString (), 0, maxResults, false, "", false, "", "", ""); ArrayList hits = new ArrayList (); int rank = 0; foreach (ResultElement elt in gsr.resultElements) { Hit hit = FromGoogleResultElement (elt, rank); hits.Add (hit); ++rank; } result.Add (hits, gsr.estimatedTotalResultsCount); }
public void DoQuery (Query query, IQueryResult result, IQueryableChangeData data) { }
public QueryClosure (Queryable queryable, Query query, QueryResult result, IQueryableChangeData change_data) { this.queryable = queryable; this.query = query; this.result = result; this.change_data = change_data; }
private void OnQueryDriverChanged (Queryable queryable, IQueryableChangeData change_data) { if (this.result != null) QueryDriver.DoOneQuery (queryable, this.query, this.result, change_data); }
// A method to fire the ChangedEvent event. static public void QueryableChanged (IQueryable iqueryable, IQueryableChangeData change_data) { if (ChangedEvent != null) { Queryable queryable = iqueryable_to_queryable [iqueryable] as Queryable; ChangedEvent (queryable, change_data); } }
public void DoQuery (Query query, IQueryResult query_result, IQueryableChangeData i_change_data) { ChangeData change_data = (ChangeData) i_change_data; ICollection added_uris = null; // Index listeners never return any initial matches. if (change_data == null && query.IsIndexListener) return; if (change_data != null) { if (change_data.RemovedUris != null) query_result.Subtract (change_data.RemovedUris); // If nothing was added, we can safely return now: this change // cannot have any further effect on an outstanding live query. if (change_data.AddedUris == null || change_data.AddedUris.Count == 0) return; added_uris = change_data.AddedUris; // If this is an index listener, we don't need to do a query: // we just build up synthethic hits and add them unconditionally. if (query.IsIndexListener) { ArrayList synthetic_hits = new ArrayList (); foreach (Uri uri in added_uris) { Hit hit = new Hit (); hit.Uri = uri; if (our_hit_filter != null) { bool accept = false; try { accept = our_hit_filter (hit); } catch (Exception e) { Log.Warn (e, "Caught an exception in HitFilter for {0}", hit.Uri); } if (! accept) continue; } synthetic_hits.Add (hit); } if (synthetic_hits.Count > 0) query_result.Add (synthetic_hits); return; } } Driver.DoQuery (query, query_result, added_uris, backend_query_part_hook, our_hit_filter); }