예제 #1
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;
        }
예제 #2
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;
        }
예제 #3
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;
        }