public async Task AppendAsync(string type, string key, DateTimeOffset at, CancellationToken token, params double[] values)
        {
            AssertInitialized();

            if (string.IsNullOrEmpty(type) || string.IsNullOrEmpty(key) || at < DateTimeOffset.MinValue || values == null || values.Length == 0)
            {
                throw new InvalidOperationException("Append data is invalid");
            }

            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            await ReplicationInformer.ExecuteWithReplicationAsync(Url, HttpMethods.Put, async (url, timeSeriesName) =>
            {
                var requestUriString = string.Format(CultureInfo.InvariantCulture, "{0}ts/{1}/append/{2}?key={3}",
                                                     url, timeSeriesName, type, Uri.EscapeDataString(key));
                using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Put))
                {
                    await request.WriteWithObjectAsync(new TimeSeriesFullPoint
                    {
                        Type   = type,
                        Key    = key,
                        At     = at,
                        Values = values
                    }).ConfigureAwait(false);
                    return(await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false));
                }
            }, token).ConfigureAwait(false);
        }
        public async Task DeleteRangeAsync(string type, string key, DateTimeOffset start, DateTimeOffset end, CancellationToken token = new CancellationToken())
        {
            AssertInitialized();

            if (string.IsNullOrEmpty(type) || string.IsNullOrEmpty(key))
            {
                throw new InvalidOperationException("Data is invalid");
            }

            if (start > end)
            {
                throw new InvalidOperationException("start cannot be greater than end");
            }

            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            await ReplicationInformer.ExecuteWithReplicationAsync(Url, HttpMethods.Post, async (url, timeSeriesName) =>
            {
                var requestUriString = string.Format(CultureInfo.InvariantCulture, "{0}ts/{1}/delete-range/{2}?key={3}",
                                                     url, timeSeriesName, type, Uri.EscapeDataString(key));
                using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Delete))
                {
                    await request.WriteWithObjectAsync(new TimeSeriesDeleteRange
                    {
                        Type = type, Key = key, Start = start, End = end
                    }).ConfigureAwait(false);
                    return(await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false));
                }
            }, token).ConfigureAwait(false);
        }
        public async Task CreateTypeAsync(string type, string[] fields, CancellationToken token = new CancellationToken())
        {
            AssertInitialized();

            if (string.IsNullOrEmpty(type))
            {
                throw new InvalidOperationException("Prefix cannot be empty");
            }

            if (fields.Length < 1)
            {
                throw new InvalidOperationException("Number of fields should be at least 1");
            }

            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            await ReplicationInformer.ExecuteWithReplicationAsync(Url, HttpMethods.Put, async (url, timeSeriesName) =>
            {
                var requestUriString = string.Format(CultureInfo.InvariantCulture, "{0}ts/{1}/types/{2}",
                                                     url, timeSeriesName, type);
                using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Put))
                {
                    await request.WriteWithObjectAsync(new TimeSeriesType {
                        Type = type, Fields = fields
                    }).ConfigureAwait(false);
                    return(await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false));
                }
            }, token).ConfigureAwait(false);
        }
Esempio n. 4
0
        public async Task DeleteAsync(string groupName, string counterName, CancellationToken token = new CancellationToken())
        {
            AssertInitialized();
            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().WithCancellation(token).ConfigureAwait(false);

            await ReplicationInformer.ExecuteWithReplicationAsync(Url, HttpMethods.Post, async (url, counterStoreName) =>
            {
                var requestUriString = $"{url}/cs/{counterStoreName}/delete/?groupName={groupName}&counterName={counterName}";
                using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Delete))
                    return(await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false));
            }, token).WithCancellation(token).ConfigureAwait(false);
        }
Esempio n. 5
0
        public async Task <List <TimeSeriesReplicationStats> > GetTimeSeriesReplicationStatsAsync(CancellationToken token = default(CancellationToken))
        {
            AssertInitialized();
            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            var requestUriString = String.Format("{0}ts/{1}/replications/stats", Url, Name);

            using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Get))
            {
                var response = await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false);

                return(response.ToObject <List <TimeSeriesReplicationStats> >(JsonSerializer));
            }
        }
Esempio n. 6
0
        public async Task <CountersStorageMetrics> GetCounterMetricsAsync(CancellationToken token = default(CancellationToken))
        {
            AssertInitialized();
            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            var requestUriString = $"{Url}/cs/{Name}/metrics";

            using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Get))
            {
                var response = await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false);

                return(response.ToObject <CountersStorageMetrics>(JsonSerializer));
            }
        }
Esempio n. 7
0
        public async Task <IReadOnlyList <CounterStorageReplicationStats> > GetCounterReplicationStatsAsync(
            CancellationToken token = default(CancellationToken),
            int skip = 0, int take = 1024)
        {
            AssertInitialized();
            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            var requestUriString = $"{Url}/cs/{Name}/replications/stats&skip={skip}&take={take}";

            using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Get))
            {
                var response = await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false);

                return(response.ToObject <List <CounterStorageReplicationStats> >(JsonSerializer));
            }
        }
        public async Task DeletePointsAsync(IEnumerable <TimeSeriesPointId> points, CancellationToken token = new CancellationToken())
        {
            AssertInitialized();

            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            await ReplicationInformer.ExecuteWithReplicationAsync(Url, HttpMethods.Post, async (url, timeSeriesName) =>
            {
                var requestUriString = string.Format(CultureInfo.InvariantCulture, "{0}ts/{1}/delete-points",
                                                     url, timeSeriesName);
                using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Delete))
                {
                    await request.WriteWithObjectAsync(points).ConfigureAwait(false);
                    return(await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false));
                }
            }, token).ConfigureAwait(false);
        }
        public async Task DeleteTypeAsync(string type, CancellationToken token = default(CancellationToken))
        {
            AssertInitialized();

            if (string.IsNullOrEmpty(type))
            {
                throw new InvalidOperationException("Prefix cannot be empty");
            }

            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            await ReplicationInformer.ExecuteWithReplicationAsync(Url, HttpMethods.Delete, async (url, timeSeriesName) =>
            {
                var requestUriString = string.Format(CultureInfo.InvariantCulture, "{0}ts/{1}/types/{2}",
                                                     url, timeSeriesName, type);
                using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Delete))
                {
                    return(await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false));
                }
            }, token).ConfigureAwait(false);
        }
Esempio n. 10
0
        public async Task DeleteKeyAsync(string type, string key, CancellationToken token = new CancellationToken())
        {
            AssertInitialized();

            if (string.IsNullOrEmpty(type) || string.IsNullOrEmpty(key))
            {
                throw new InvalidOperationException("Data is invalid");
            }

            await ReplicationInformer.UpdateReplicationInformationIfNeededAsync().ConfigureAwait(false);

            await ReplicationInformer.ExecuteWithReplicationAsync(Url, HttpMethods.Post, async (url, timeSeriesName) =>
            {
                var requestUriString = string.Format(CultureInfo.InvariantCulture, "{0}ts/{1}/delete-key/{2}?key={3}",
                                                     url, timeSeriesName, type, Uri.EscapeDataString(key));
                using (var request = CreateHttpJsonRequest(requestUriString, HttpMethods.Delete))
                {
                    return(await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false));
                }
            }, token).ConfigureAwait(false);
        }