示例#1
0
        public static InvokeResult <IDataStreamConnector> GetConnector(DataStreamTypes type, IAdminLogger logger)
        {
            IDataStreamConnector _streamConnector = null;

            switch (type)
            {
            case DataStreamTypes.AWSElasticSearch: _streamConnector = new AWSElasticSearchConnector(logger); break;

            case DataStreamTypes.AWSS3: _streamConnector = new AWSS3Connector(logger); break;

            case DataStreamTypes.AzureBlob: _streamConnector = new AzureBlobConnector(logger); break;

            case DataStreamTypes.AzureEventHub: _streamConnector = new AzureEventHubConnector(logger); break;

            case DataStreamTypes.AzureTableStorage:
            case DataStreamTypes.AzureTableStorage_Managed: _streamConnector = new AzureTableStorageConnector(logger); break;

            case DataStreamTypes.SQLServer: _streamConnector = new SQLServerConnector(logger); break;

            case DataStreamTypes.Redis: _streamConnector = new RedisConnector(logger); break;

            case DataStreamTypes.Postgresql: _streamConnector = new PostgresqlConnector(logger); break;

            case DataStreamTypes.PointArrayStorage: _streamConnector = new PointArrayPostgresqlConnector(logger); break;
            }

            if (_streamConnector == null)
            {
                return(InvokeResult <IDataStreamConnector> .FromError("Unsupported Stream Type"));
            }

            return(InvokeResult <IDataStreamConnector> .Create(_streamConnector));
        }
        private async Task BulkInsert(IDataStreamConnector connector, DataStream stream, string deviceType, QueryRangeType rangeType)
        {
            var records = GetRecordsToInsert(stream, "dev123", rangeType);

            foreach (var record in records)
            {
                Assert.IsTrue((await connector.AddItemAsync(record)).Successful, "Did not insert bulk item");
            }

            // Give it just a little time to insert the rest of the records
            await Task.Delay(1000);
        }
        protected async Task <DataStreamRecord> AddObject(IDataStreamConnector connector, DataStream stream, string deviceId, string timeStamp, params KeyValuePair <string, object>[] items)
        {
            var record    = GetRecord(stream, deviceId, timeStamp, items);
            var addResult = await connector.AddItemAsync(record);

            if (!addResult.Successful)
            {
                Console.WriteLine(addResult.Errors.First().Message);
            }

            Assert.IsTrue(addResult.Successful);
            return(record);
        }
        protected async Task ValidatePaginatedRecordSet(string deviceId, IDataStreamConnector connector)
        {
            var getResult = await connector.GetItemsAsync(deviceId, new Core.Models.UIMetaData.ListRequest()
            {
                PageIndex = 0,
                PageSize  = 15
            });

            Assert.IsTrue(getResult.Successful);

            Assert.AreEqual("99", getResult.Model.ToArray()[0].Where(fld => fld.Key == "pointIndex").First().Value.ToString());
            Assert.IsTrue(getResult.HasMoreRecords, "Should Have Records");
            WriteResult(getResult);

            getResult = await connector.GetItemsAsync(deviceId, new Core.Models.UIMetaData.ListRequest()
            {
                PageIndex = 2, PageSize = 15
            });

            Assert.AreEqual("84", getResult.Model.ToArray()[0].Where(fld => fld.Key == "pointIndex").First().Value.ToString());
            Assert.IsTrue(getResult.Successful);
            Assert.IsTrue(getResult.HasMoreRecords);
            WriteResult(getResult);

            getResult = await connector.GetItemsAsync(deviceId, new Core.Models.UIMetaData.ListRequest()
            {
                PageIndex = 7, PageSize = 15
            });

            Assert.AreEqual("9", getResult.Model.ToArray()[0].Where(fld => fld.Key == "pointIndex").First().Value.ToString());
            Assert.AreEqual(10, getResult.PageSize);
            Assert.IsTrue(getResult.Successful);
            Assert.IsFalse(getResult.HasMoreRecords);
            WriteResult(getResult);

            getResult = await connector.GetItemsAsync(deviceId, new Core.Models.UIMetaData.ListRequest()
            {
                PageIndex = 8, PageSize = 15
            });

            Assert.AreEqual(0, getResult.PageSize);
            Assert.IsTrue(getResult.Successful);
            Assert.IsFalse(getResult.HasMoreRecords);
            WriteResult(getResult);
        }
        private async Task BulkInsert(IDataStreamConnector connector, DataStream stream, string deviceType, QueryRangeType rangeType)
        {
            var batchOper  = new TableBatchOperation();
            var cloudTable = GetCloudTable(stream);
            var records    = GetRecordsToInsert(stream, "dev123", rangeType);

            foreach (var record in records)
            {
                var tsRecord = DataStreamTSEntity.FromDeviceStreamRecord(stream, record);
                batchOper.Add(TableOperation.Insert(tsRecord));
                Console.WriteLine(tsRecord.RowKey);
            }

            var results = await cloudTable.ExecuteBatchAsync(batchOper);

            Assert.AreEqual(records.Count, results.Count, "Batch result size should match insert size");
            foreach (var result in results)
            {
                Assert.AreEqual(204, result.HttpStatusCode);
            }
            // Give it just a little time to insert the rest of the records
            await Task.Delay(1000);
        }
        protected async Task ValidateDataFilterAfter(string deviceId, DataStream stream, IDataStreamConnector connector)
        {
            var startDate = DateTime.UtcNow.AddDays(1).ToJSONString();

            var getResult = await connector.GetItemsAsync(deviceId, new Core.Models.UIMetaData.ListRequest()
            {
                PageIndex = 0,
                PageSize  = 30,
                StartDate = startDate
            });

            Console.WriteLine($"All Date Values should be larger than {startDate}");

            Assert.IsTrue(getResult.Successful, getResult.Successful ? "Success" : $"Could not get result {getResult.Errors.First().Message}");


            Assert.AreEqual(getResult.PageSize, getResult.Model.Count(), "Page size should match model count");
            Assert.AreEqual(10, getResult.PageSize);
            Assert.IsFalse(getResult.Model.Where(rec => String.Compare(rec.Timestamp, startDate) < 0).Any());
            Assert.IsTrue(getResult.Successful);
            Assert.IsFalse(getResult.HasMoreRecords);
            WriteResult(getResult);
        }
示例#7
0
        public async Task <ListResponse <DataStreamResult> > GetStreamDataAsync(DataStream stream, IDataStreamConnector connector, string deviceId, EntityHeader org, EntityHeader user, ListRequest request)
        {
            await AuthorizeAsync(stream, AuthorizeResult.AuthorizeActions.Read, user, org, "ReadDeviceData");

            await connector.InitAsync(stream);

            return(await connector.GetItemsAsync(deviceId, request));
        }