Exemplo n.º 1
0
        internal Queries(IProjectSettings prjSettings,
                         IKeenHttpClientProvider keenHttpClientProvider)
        {
            if (null == prjSettings)
            {
                throw new ArgumentNullException(nameof(prjSettings),
                                                "Project Settings must be provided.");
            }

            if (null == keenHttpClientProvider)
            {
                throw new ArgumentNullException(nameof(keenHttpClientProvider),
                                                "A KeenHttpClient provider must be provided.");
            }

            if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl) ||
                !Uri.IsWellFormedUriString(prjSettings.KeenUrl, UriKind.Absolute))
            {
                throw new KeenException(
                          "A properly formatted KeenUrl must be provided via Project Settings.");
            }

            var serverBaseUrl = new Uri(prjSettings.KeenUrl);

            _keenHttpClient   = keenHttpClientProvider.GetForUrl(serverBaseUrl);
            _queryRelativeUrl = KeenHttpClient.GetRelativeUrl(prjSettings.ProjectId,
                                                              KeenConstants.QueriesResource);

            // TODO : The Python SDK has changed to not automatically falling back, but rather
            // throwing so that client devs learn to use the most appropriate key. So here we
            // really could or should just demand the ReadKey.
            _key = string.IsNullOrWhiteSpace(prjSettings.MasterKey) ?
                   prjSettings.ReadKey : prjSettings.MasterKey;
        }
Exemplo n.º 2
0
        internal Event(IProjectSettings prjSettings,
                       IKeenHttpClientProvider keenHttpClientProvider)
        {
            if (null == prjSettings)
            {
                throw new ArgumentNullException(nameof(prjSettings),
                                                "Project Settings must be provided.");
            }

            if (null == keenHttpClientProvider)
            {
                throw new ArgumentNullException(nameof(keenHttpClientProvider),
                                                "A KeenHttpClient provider must be provided.");
            }

            if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl) ||
                !Uri.IsWellFormedUriString(prjSettings.KeenUrl, UriKind.Absolute))
            {
                throw new KeenException(
                          "A properly formatted KeenUrl must be provided via Project Settings.");
            }

            var serverBaseUrl = new Uri(prjSettings.KeenUrl);

            _keenHttpClient    = keenHttpClientProvider.GetForUrl(serverBaseUrl);
            _eventsRelativeUrl = KeenHttpClient.GetRelativeUrl(prjSettings.ProjectId,
                                                               KeenConstants.EventsResource);

            _readKey  = prjSettings.ReadKey;
            _writeKey = prjSettings.WriteKey;
        }
Exemplo n.º 3
0
        public void Results_Throws()
        {
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForGetAsync("{}", HttpStatusCode.InternalServerError);
            }

            var client = new KeenClient(SettingsEnv, httpClientProvider);

            Assert.Throws <KeenException>(() => client.QueryDataset(null, _indexBy, _timeframe));
            Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, null, _timeframe));
            Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, _indexBy, null));

            Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, _indexBy, _timeframe));

            var brokenClient = new KeenClient(new ProjectSettingsProvider("5011efa95f546f2ce2000000",
                                                                          null,
                                                                          Environment.GetEnvironmentVariable("KEEN_WRITE_KEY") ?? "",
                                                                          Environment.GetEnvironmentVariable("KEEN_READ_KEY") ?? "",
                                                                          Environment.GetEnvironmentVariable("KEEN_SERVER_URL") ?? KeenConstants.ServerAddress + "/" + KeenConstants.ApiVersion + "/"),
                                              httpClientProvider);

            Assert.Throws <KeenException>(() => brokenClient.QueryDataset(_datasetName, _indexBy, _timeframe));
        }
        public void CreateDataset_Throws_ServerError()
        {
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForDeleteAsync("{}", HttpStatusCode.InternalServerError);
            }

            var client = new KeenClient(SettingsEnv, httpClientProvider);

            Assert.Throws <KeenException>(() => client.CreateDataset(null));
        }
        public void ListDefinitions_Throws_ServerError()
        {
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForGetAsync("{}", HttpStatusCode.InternalServerError);
            }

            var client = new KeenClient(SettingsEnv, httpClientProvider);

            Assert.Throws <KeenException>(() => client.ListDatasetDefinitions());
        }
        public void Delete_Success()
        {
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForDeleteAsync(string.Empty);
            }

            var client = new KeenClient(SettingsEnv, httpClientProvider);

            client.DeleteDataset("datasetName");
        }
        public void Definition_Success()
        {
            var apiResponse = File.ReadAllText($"{GetApiResponsesPath()}/GetDatasetDefinition.json");
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForGetAsync(apiResponse);
            }

            var client  = new KeenClient(SettingsEnv, httpClientProvider);
            var dataset = client.GetDatasetDefinition(_datasetName);

            AssertDatasetIsPopulated(dataset);
        }
        public void Results_Success()
        {
            var apiResponse = File.ReadAllText($"{GetApiResponsesPath()}/GetDatasetResults.json");
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForGetAsync(apiResponse);
            }

            var client  = new KeenClient(SettingsEnv, httpClientProvider);
            var dataset = client.QueryDataset(_datasetName, _indexBy, _timeframe);

            Assert.IsNotNull(dataset);
            Assert.IsNotNull(dataset["result"]);
        }
        public void Results_Throws_ServerError()
        {
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForGetAsync("{}", HttpStatusCode.InternalServerError);
            }

            var client = new KeenClient(SettingsEnv, httpClientProvider);

            Assert.Throws <KeenException>(() => client.QueryDataset(null, _indexBy, _timeframe));
            Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, null, _timeframe));
            Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, _indexBy, null));
            Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, _indexBy, _timeframe));
        }
        public void DeleteDataset_Throws_WrongKey()
        {
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForDeleteAsync(string.Empty);
            }

            var brokenClient = new KeenClient(new ProjectSettingsProvider("5011efa95f546f2ce2000000",
                                                                          null,
                                                                          Environment.GetEnvironmentVariable(KeenConstants.KeenWriteKey) ?? "",
                                                                          Environment.GetEnvironmentVariable(KeenConstants.KeenReadKey) ?? "",
                                                                          GetServerUrl()),
                                              httpClientProvider);

            Assert.Throws <KeenException>(() => brokenClient.DeleteDataset(_datasetName));
        }
        public void ListDefinitions_Throws_WrongKey()
        {
            var apiResponse = File.ReadAllText($"{GetApiResponsesPath()}/ListDatasetDefinitions.json");
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForGetAsync(apiResponse);
            }

            var brokenClient = new KeenClient(new ProjectSettingsProvider("5011efa95f546f2ce2000000",
                                                                          Environment.GetEnvironmentVariable(KeenConstants.KeenMasterKey) ?? "",
                                                                          Environment.GetEnvironmentVariable(KeenConstants.KeenWriteKey) ?? "",
                                                                          null,
                                                                          GetServerUrl()),
                                              httpClientProvider);

            Assert.Throws <KeenException>(() => brokenClient.ListDatasetDefinitions());
        }
Exemplo n.º 12
0
        private KeenClient(IProjectSettings prjSettings,
                           IEventCache eventCache,
                           IKeenHttpClientProvider keenHttpClientProvider)
        {
            // Preconditions
            if (null == prjSettings)
            {
                throw new KeenException("An IProjectSettings instance is required.");
            }
            if (string.IsNullOrWhiteSpace(prjSettings.ProjectId))
            {
                throw new KeenException("A Project ID is required.");
            }
            if ((string.IsNullOrWhiteSpace(prjSettings.MasterKey) &&
                 string.IsNullOrWhiteSpace(prjSettings.WriteKey) &&
                 string.IsNullOrWhiteSpace(prjSettings.ReadKey)))
            {
                throw new KeenException("An API key is required.");
            }
            if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl))
            {
                throw new KeenException("A URL for the server address is required.");
            }

            _prjSettings = prjSettings;

            if (null != eventCache)
            {
                EventCache = eventCache;
            }

            // Use the default provider if none was passed in.
            keenHttpClientProvider = (keenHttpClientProvider ?? new KeenHttpClientProvider());

            // These interfaces normally should not need to be set by client code, so the default
            // implementation is set up here. These may be overridden by injecting an
            // implementation via their respective properties.
            EventCollection = new EventCollection(_prjSettings, keenHttpClientProvider);
            Event           = new Event(_prjSettings, keenHttpClientProvider);
            Queries         = new Queries(_prjSettings, keenHttpClientProvider);
        }
        public void ListAllDefinitions_Success()
        {
            var apiResponse = File.ReadAllText($"{GetApiResponsesPath()}/ListDatasetDefinitions.json");
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForGetAsync(apiResponse);
            }

            var client            = new KeenClient(SettingsEnv, httpClientProvider);
            var datasetCollection = client.ListAllDatasetDefinitions();

            Assert.IsNotNull(datasetCollection);
            Assert.IsTrue(datasetCollection.Any());

            foreach (var item in datasetCollection)
            {
                AssertDatasetIsPopulated(item);
            }
        }
Exemplo n.º 14
0
        internal EventCollection(IProjectSettings prjSettings,
                                 IKeenHttpClientProvider keenHttpClientProvider)
        {
            if (null == prjSettings)
            {
                throw new ArgumentNullException(nameof(prjSettings),
                                                "Project Settings must be provided.");
            }

            if (null == keenHttpClientProvider)
            {
                throw new ArgumentNullException(nameof(keenHttpClientProvider),
                                                "A KeenHttpClient provider must be provided.");
            }

            if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl) ||
                !Uri.IsWellFormedUriString(prjSettings.KeenUrl, UriKind.Absolute))
            {
                throw new KeenException(
                          "A properly formatted KeenUrl must be provided via Project Settings.");
            }

            var serverBaseUrl = new Uri(prjSettings.KeenUrl);

            _keenHttpClient    = keenHttpClientProvider.GetForUrl(serverBaseUrl);
            _eventsRelativeUrl = KeenHttpClient.GetRelativeUrl(prjSettings.ProjectId,
                                                               KeenConstants.EventsResource);

            // TODO : It's possible we may want to change back to dynamically grabbing the keys
            // from a stored IProjectSettings so client code can lazily assign keys. It creates a
            // minor potential race condition, but will allow for scenarios like creating a
            // KeenClient instance with only a master key in order to generate/acquire access keys
            // to then set as the other keys. Otherwise a new KeenClient must be created or at
            // least a new instance of the IEventCollection/IEvent/IQueries implementations.

            _readKey   = prjSettings.ReadKey;
            _writeKey  = prjSettings.WriteKey;
            _masterKey = prjSettings.MasterKey;
        }
Exemplo n.º 15
0
        public void CreateDataset_Throws()
        {
            IKeenHttpClientProvider httpClientProvider = null;

            if (UseMocks)
            {
                httpClientProvider = GetMockHttpClientProviderForDeleteAsync("{}", HttpStatusCode.InternalServerError);
            }

            var client = new KeenClient(SettingsEnv, httpClientProvider);

            Assert.Throws <KeenException>(() => client.CreateDataset(null));

            var brokenClient = new KeenClient(new ProjectSettingsProvider("5011efa95f546f2ce2000000",
                                                                          null,
                                                                          Environment.GetEnvironmentVariable("KEEN_WRITE_KEY") ?? "",
                                                                          Environment.GetEnvironmentVariable("KEEN_READ_KEY") ?? "",
                                                                          Environment.GetEnvironmentVariable("KEEN_SERVER_URL") ?? KeenConstants.ServerAddress + "/" + KeenConstants.ApiVersion + "/"),
                                              httpClientProvider);

            Assert.Throws <KeenException>(() => brokenClient.CreateDataset(CreateDatasetDefinition()));
        }
Exemplo n.º 16
0
 public KeenClient(IProjectSettings prjSettings,
                   IKeenHttpClientProvider keenHttpClientProvider)
     : this(prjSettings, null, keenHttpClientProvider)
 {
 }