void OnRecordQueued(dynamic record, DocumentMetrics metrics) { if (RecordQueuedCallback != null) { RecordQueuedCallback(this, record, metrics); } }
void UpdateTrackedList(List <dynamic> batch, DateTime timestamp) { foreach (dynamic doc in batch) { lock (_syncTracker) { if (!_docsTracker.ContainsKey(doc.id)) { _docsTracker.Add(doc.id, new DocumentMetrics() { Queued = timestamp, Retrieved = DateTime.MinValue, NumberOfRetries = 1 }); } else { _docsTracker[doc.id].Queued = timestamp; _docsTracker[doc.id].Retrieved = DateTime.MinValue; _docsTracker[doc.id].NumberOfRetries++; } } DocumentMetrics metrics = _docsTracker[doc.id]; dynamic expObj = DynamicToExpandoObject(doc); OnRecordQueued(expObj, metrics); } }
void OnOutputReceived(dynamic output, DocumentMetrics metrics) { if (OutputReceivedCallback != null) { OutputReceivedCallback(this, output, metrics); } }
void DataRetrievingWorker() { string jobId = string.Format("worker_{0}", WorkerId); while (_docsInProgress > 0) { dynamic results = null; Stopwatch watcher = new Stopwatch(); DateTime retrieved = DateTime.MinValue; try { watcher.Start(); results = _engine.GetProcessedDocumentsByJobId(jobId); watcher.Stop(); retrieved = DateTime.Now; } catch (Exception ex) { SemantriaWorkerException workerException = new SemantriaWorkerException("An exception occured during retrieval of the documents from the server.", ex); OnErrorOccurred(workerException); } if (results == null || results.Count == 0) { Thread.Sleep(PullingTimeout); continue; } OnMethodExecuted(new RequestMetrics(SemantriaAPImethod.RetrieveResultsByJobId, watcher.Elapsed, results.Count)); foreach (dynamic doc in results) { DocumentMetrics metrics = new DocumentMetrics(); lock (_syncTracker) { if (!_docsTracker.ContainsKey(doc.id)) { continue; } _docsTracker[doc.id].Retrieved = retrieved; metrics = _docsTracker[doc.id]; _docsInProgress--; } OnOutputReceived(doc, metrics); } } }
//Callback method for analysis output. static void OutputReceived(object sender, dynamic output, DocumentMetrics metrics) { if (output == null) { return; } lock (resSyncObject) { if (!resultsTracker.ContainsKey(output.id)) { return; } else { resultsTracker[output.id] = metrics; } resWritter.WriteRow(new List<string>() { output.id, string.Format("{0:0.##}", output.sentiment_score), output.sentiment_polarity }); } }
//Callback method for analysis output. static void RecordQueued(object sender, dynamic record, DocumentMetrics metrics) { if (record == null) { return; } lock (resSyncObject) { if (!resultsTracker.ContainsKey(record.id)) { resultsTracker.Add(record.id, metrics); } } }