public List <ES_Message> GetByQuery(ViewModels.ES_Query query, int tenantId) { var json = new JavaScriptSerializer().Serialize(query); var path = string.Format(base.Config.GetDocumentsByQueryPath, tenantId.ToString()); //LogEntry.WriteNLogEntry( // string.Format("ES_MessageService.GetByQuery()\n\nBasePath: {0}\nClusterName: {1}\nquery: \n{2}\ntenantId: {3}\npath: {4}", this.Config.BasePath, this.Config.ClusterName, json, tenantId, path), // NLog.LogLevel.Trace, // LogEvent.EventManagerElasticsearchGeneral //); var messages = new List <ES_Message>(); var responseJson = base.String_WebRequest(path, json, Base_Classes.ES_Verb.POST); if (!string.IsNullOrEmpty(responseJson)) { try { var serializer = new JavaScriptSerializer(); serializer.MaxJsonLength = Int32.MaxValue; var messageResponse = serializer.Deserialize <ES_MessagesQueryResponse>(responseJson); if (messageResponse == null) { throw new Exception("ES_MessageService.GetByQuery() failed to serialize response:" + "\n\n" + responseJson); } //LogEntry.WriteNLogEntry( // string.Format("ES_MessageService.GetByQuery() success\n\nBasePath: {0}\nClusterName: {1}\nquery: \n{2}\ntenantId: {3}\npath: {4}\ncount: {5}", this.Config.BasePath, this.Config.ClusterName, json, tenantId, path, messageResponse.hits.hits.Count()), // NLog.LogLevel.Trace, // LogEvent.EventManagerElasticsearchGeneral //); foreach (var doc in messageResponse.hits.hits) { var em = doc._source; em.TenantId = tenantId; // TenantId is not part of the elasticsearch document em.MessageId = int.Parse(doc._id); // MessageId is not part of the elasticsearch document messages.Add(em); } } catch (System.Exception ex1) { //LogEntry.WriteNLogEntryEx( // "ES_MessageService.GetByQuery() Json deserialization failed on: " + path + ".\n\nResponse looked like this:\n\n" + responseJson, // NLog.LogLevel.Error, // ex1, // LogEvent.EventManagerElasticsearchConnectionError //); throw; } } return(messages); }
/// <summary> /// This method returns a Task. You must use the "await" keyword within an "async" method when calling this method. /// </summary> /// <returns></returns> public async Task <List <ES_Message> > GetByQueryAsync(ViewModels.ES_Query query, int tenantId) { var message = await Task.Run(() => GetByQuery(query, tenantId)); return(message); }