Esempio n. 1
0
 public CosmosDbFeedObserver(
     SqlClientExtension client,
     ICosmosDbSink cosmosDbSink)
 {
     this.client = client;
     this.destinationCollectionUri = UriFactory.CreateDocumentCollectionUri(
         client.DatabaseName,
         client.CollectionName);
     this.cosmosDbSink    = cosmosDbSink;
     this.isBulkIngestion = ConfigHelper.IsBulkIngestion();
 }
Esempio n. 2
0
        public async Task GenerateTimeSeriesData()
        {
            CosmosDbConfig config = CosmosDbConfig.GetCosmosDbConfig();

            SqlClientExtension clientExtension = new SqlClientExtension(
                config,
                ConsistencyLevel.Session,
                connectionPolicy);
            await clientExtension.CreateCollectionIfNotExistsAsync();

            while (true)
            {
                SensorReading reading = SensorReading.GetSampleReading();

                await clientExtension.DocumentClient.UpsertDocumentAsync(
                    UriFactory.CreateDocumentCollectionUri(clientExtension.DatabaseName, clientExtension.CollectionName),
                    reading);

                System.Threading.Thread.Sleep(new TimeSpan(0, 0, 0, 1));
            }
        }
Esempio n. 3
0
        private async Task UpdateSiteIdAgg(
            SqlClientExtension client,
            object doc,
            SensorReading sensorReading)
        {
            // take the first document
            SiteIdAggModel siteIdAggModel =
                JsonConvert.DeserializeObject <SiteIdAggModel>(doc.ToString());

            if (!SiteIdAggModel.IsDuplicate(siteIdAggModel, sensorReading))
            {
                SiteIdAggModel aggModel =
                    SiteIdAggModel.GetIncrementedCountDoc(siteIdAggModel, sensorReading);

                for (int i = 0; i < retries; i++)
                {
                    try
                    {
                        await client.UpdateItem((Document)doc, aggModel);

                        break;
                    }
                    catch (DocumentClientException docEx)
                    {
                        if (docEx.StatusCode == HttpStatusCode.Conflict)
                        {
                            // Eat this execption, it can happen more workers are trying
                            // to update the same document
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.LogError(ex.Message, false);
                    }
                }
            }
        }
        public ChangeFeedObserverFactory(
            SqlClientExtension destClient,
            ICosmosDbSink cosmosDbSink,
            ILoggerFactory loggerFactory)
        {
            if (destClient == null)
            {
                throw new ArgumentNullException(nameof(destClient));
            }
            if (cosmosDbSink == null)
            {
                throw new ArgumentNullException(nameof(cosmosDbSink));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            this.destinationType = DestinationType.CosmosDB;
            this.destClient      = destClient;
            this.cosmosDbSink    = cosmosDbSink;
            this.loggerFactory   = loggerFactory;
            this.logger          = loggerFactory.CreateLogger <ChangeFeedObserverFactory>();
        }
Esempio n. 5
0
 private async Task <List <object> > GetSiteIdAggDocs(SqlClientExtension client, SensorReading sensorReading)
 {
     return(await client.queryDocs("select * from c where c.id='" + sensorReading.SiteId + "'", sensorReading.SensorId));
 }
Esempio n. 6
0
 public void IngestDocsInBulk(SqlClientExtension client, IChangeFeedObserverContext context, IReadOnlyList <Document> docs, CancellationToken cancellationToken, Uri destinationCollectionUri)
 {
     throw new NotImplementedException();
 }