Esempio n. 1
0
        public void Start(int pollIntervalInSeconds, IDataAccess dal, ILogger logger)
        {
            while (true) {
                try {
                    var batch = dal.DequeueTransform();

                    if (batch.Count > 0) {
                        var docsToUpsert = new Dictionary<string, string> ();
                        foreach (var rootId in batch) {
                            var allRows = dal.GetRows (rootId);

                            JObject finalDoc = CombineRows (rootId, allRows);

                            if (finalDoc != null) {
                                finalDoc ["_transformed_on"] = DateTime.Now;
                                string doc = JsonConvert.SerializeObject (finalDoc);
                                docsToUpsert.Add (rootId, doc);
                            }
                        }

                        dal.UpsertDocuments(docsToUpsert);

                        logger.WriteLine ("Transformed {0}...", batch.Count);
                    } else {
                        Thread.Sleep (pollIntervalInSeconds * 1000);
                    }

                    _backoff = 1;
                } catch (Exception ex) {
                    if (_backoff < 5) {
                        _backoff++;
                    }
                    logger.WriteLine (ex.ToString ());
                    Debug.WriteLine (ex.ToString ());
                    Thread.Sleep (_backoff * 1000);
                }
            }
        }