Beispiel #1
0
        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");
        }
Beispiel #4
0
		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);
			}
		}
Beispiel #5
0
 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);
		}
Beispiel #8
0
 // 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);
     }
 }
Beispiel #9
0
		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 ();
		}
Beispiel #10
0
 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);
			}
		}
Beispiel #13
0
 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;
		}
Beispiel #17
0
        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 ();
			}
		}
Beispiel #19
0
		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;
        }
Beispiel #22
0
 public void DoQuery(Query query, IQueryResult result, IQueryableChangeData data)
 {
 }
Beispiel #23
0
        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();
        }
Beispiel #24
0
        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);
        }
Beispiel #25
0
		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)
		{
		}
Beispiel #27
0
			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;
			}
Beispiel #28
0
		private void OnQueryDriverChanged (Queryable queryable, IQueryableChangeData change_data)
		{
			if (this.result != null)
				QueryDriver.DoOneQuery (queryable, this.query, this.result, change_data);
		}
Beispiel #29
0
		// 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);
		}