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; }
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; }
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; }