コード例 #1
0
		public SnapshotRequestTests()
		{
			var request = new SnapshotRequest("repos", "snap")
			{
				IgnoreUnavailable = true,
				IncludeGlobalState = true,
				WaitForCompletion = true,
				Partial = true,
			};
			var response = this._client.Snapshot(request);
			this._status = response.ConnectionStatus;
		}
コード例 #2
0
 /// <summary>
 /// Snapshot sends a snapshot of the entire backend from a member over a stream to a client.
 /// </summary>
 /// <param name="request">The request to send to the server.</param>
 /// <param name="method"></param>
 /// <param name="cancellationToken"></param>
 /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
 /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
 public async Task Snapshot(SnapshotRequest request, Action <SnapshotResponse> method,
                            CancellationToken cancellationToken, Grpc.Core.Metadata headers = null, DateTime?deadline = null) => await CallEtcdAsync(async (connection) =>
 {
     using (AsyncServerStreamingCall <SnapshotResponse> snapshotter = connection
                                                                      ._maintenanceClient.Snapshot(request, headers, deadline, cancellationToken))
     {
         while (await snapshotter.ResponseStream.MoveNext(cancellationToken).ConfigureAwait(false))
         {
             SnapshotResponse update = snapshotter.ResponseStream.Current;
             method(update);
         }
     }
 }).ConfigureAwait(false);
コード例 #3
0
ファイル: SnapshotRequestTests.cs プロジェクト: GopiKand/NEST
        public SnapshotRequestTests()
        {
            var request = new SnapshotRequest("repos", "snap")
            {
                IgnoreUnavailable  = true,
                IncludeGlobalState = true,
                WaitForCompletion  = true,
                Partial            = true,
            };
            var response = this._client.Snapshot(request);

            this._status = response.ConnectionStatus;
        }
コード例 #4
0
        public void TestSnapshotRequest()
        {
            var request = new SnapshotRequest(new MetricsRecordBuilderTestImpl(), true);

            Assert.NotNull(request.Builder);
            Assert.Equal(request.FullSnapshot, true);

            request = new SnapshotRequest(new MetricsRecordBuilderTestImpl(), false);
            Assert.NotNull(request.Builder);
            Assert.Equal(request.FullSnapshot, false);

            request = new SnapshotRequest(new MetricsRecordBuilderTestImpl());
            Assert.NotNull(request.Builder);
            Assert.Equal(request.FullSnapshot, false);
        }
コード例 #5
0
        /// <summary>
        /// Snapshot sends a snapshot of the entire backend from a member over a stream to a client.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="method"></param>
        /// <param name="token"></param>
        public async void Snapshot(SnapshotRequest request, Action <SnapshotResponse> method, CancellationToken token, Metadata headers = null)
        {
            using (AsyncServerStreamingCall <SnapshotResponse> snapshotter = _balancer.GetConnection().maintenanceClient.Snapshot(request, headers))
            {
                Task snapshotTask = Task.Run(async() =>
                {
                    while (await snapshotter.ResponseStream.MoveNext(token))
                    {
                        SnapshotResponse update = snapshotter.ResponseStream.Current;
                        method(update);
                    }
                });

                await snapshotTask;
            }
        }
コード例 #6
0
        /// <summary>
        /// Gets metrics from the source.
        /// </summary>
        /// <param name="collector">Collector that stores the resulting metrics snapshot as records.</param>
        /// <param name="all">If true, gets metric values even if they are unchanged.</param>
        public void GetMetrics(IMetricsCollector collector, bool all)
        {
            lock (_lock)
            {
                var rb = collector.CreateRecord(_recordName)
                         .SetContext(_sourceContext)
                         .AddTag("TaskOrContextName", _contextOrTaskName)
                         .AddTag("EvaluatorId", _evaluatorId)
                         .AddTag("SourceType", "DefaultSource");
                var request = new SnapshotRequest(rb, all);
                foreach (var entry in _observers)
                {
                    entry.OnNext(request);
                }

                foreach (var entry in _tags)
                {
                    rb.Add(entry.Value);
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// Snapshot sends a snapshot of the entire backend from a member over a stream to a client.
        /// </summary>
        /// <param name="request">The request to send to the server.</param>
        /// <param name="methods"></param>
        /// <param name="cancellationToken"></param>
        /// <param name="headers">The initial metadata to send with the call. This parameter is optional.</param>
        /// <param name="deadline">An optional deadline for the call. The call will be cancelled if deadline is hit.</param>
        public async void Snapshot(SnapshotRequest request, Action <SnapshotResponse>[] methods,
                                   CancellationToken cancellationToken, Grpc.Core.Metadata headers = null, DateTime?deadline = null)
        {
            bool success    = false;
            int  retryCount = 0;

            while (!success)
            {
                try
                {
                    using (AsyncServerStreamingCall <SnapshotResponse> snapshotter = _balancer.GetConnection()
                                                                                     .maintenanceClient.Snapshot(request, headers, deadline, cancellationToken))
                    {
                        Task snapshotTask = Task.Run(async() =>
                        {
                            while (await snapshotter.ResponseStream.MoveNext(cancellationToken))
                            {
                                SnapshotResponse update = snapshotter.ResponseStream.Current;
                                foreach (Action <SnapshotResponse> method in methods)
                                {
                                    method(update);
                                }
                            }
                        }, cancellationToken);

                        await snapshotTask;
                    }

                    success = true;
                }
                catch (RpcException ex) when(ex.StatusCode == StatusCode.Unavailable)
                {
                    retryCount++;
                    if (retryCount >= _balancer._numNodes)
                    {
                        throw;
                    }
                }
            }
        }
コード例 #8
0
        /// <summary>
        /// Backup existing indexes
        /// </summary>
        /// <param name="backUpName">The snapshot and backup repository name</param>
        /// <param name="path">Check elasticsearch.yml for setting this correctly. Path is declared in path.repo["backuppath"] and is located in path.data folder.</param>
        public static void BackUp(string backUpName, string path)
        {
            var esClient = Manager.EsClient;

            var rreq = new CreateRepositoryRequest(backUpName)
            {
                Repository = new FileSystemRepository(new FileSystemRepositorySettings(path))
            };

            var rr = esClient.Snapshot.CreateRepository(rreq);

            if (rr.ServerError != null)
            {
                throw new Exception(rr.ServerError.Error.ToString());
            }
            var sreq = new SnapshotRequest(backUpName, backUpName);
            var sr   = esClient.Snapshot.Snapshot(sreq);

            if (sr.ServerError != null)
            {
                throw new Exception(sr.ServerError.Error.ToString());
            }
        }
コード例 #9
0
ファイル: MutableStat.cs プロジェクト: QITIE/reef-master-yarn
        private void GiveSnapshot(SnapshotRequest request)
        {
            bool all           = request.FullSnapshot;
            var  recordBuilder = request.Builder;

            lock (_lock)
            {
                var lastStat = Changed ? _intervalStat : _prevStat;
                if (all || Changed)
                {
                    recordBuilder.AddCounter(_numSamplesInfo, _runningStat.NumSamples)
                    .AddGauge(_currentMeanInfo, lastStat.Mean);

                    if (_showExtendedStats)
                    {
                        recordBuilder.AddGauge(_currentMaxInfo, _intervalStat.MinMaxModule.Max)
                        .AddGauge(_currentMinInfo, _intervalStat.MinMaxModule.Min)
                        .AddGauge(_currentStdInfo, _intervalStat.Std)
                        .AddGauge(_runningMaxInfo, _runningStat.MinMaxModule.Max)
                        .AddGauge(_runningMinInfo, _runningStat.MinMaxModule.Min)
                        .AddGauge(_runningMeanInfo, _runningStat.Mean)
                        .AddGauge(_runningStdInfo, _runningStat.Std);
                    }

                    if (Changed)
                    {
                        if (_runningStat.NumSamples > 0)
                        {
                            _prevStat.CopyFrom(_intervalStat);
                            _intervalStat.Reset();
                        }
                        ClearChanged();
                    }
                }
            }
        }
コード例 #10
0
        public void TestGaugeMetrics()
        {
            const string    name    = "gaugetest";
            const string    desc    = "guagetestdesc";
            IMetricsFactory factory = TangFactory.GetTang().NewInjector().GetInstance <IMetricsFactory>();

            var doubleGauge = factory.CreateDoubleGauge(name, desc, 5);

            Assert.Equal(name, doubleGauge.Info.Name);
            Assert.Equal(desc, doubleGauge.Info.Description);

            MetricTestUtils.RecordBuilderForTests recordBuilder = new MetricTestUtils.RecordBuilderForTests();
            SnapshotRequest request = new SnapshotRequest(recordBuilder, false);

            doubleGauge.OnNext(request);
            recordBuilder.Validate(name, 5.0, 1e-10);
            recordBuilder.Reset();

            doubleGauge.Increment(2.2);
            doubleGauge.OnNext(request);
            recordBuilder.Validate(name, 7.2, 1e-10);
            recordBuilder.Reset();

            doubleGauge.Decrement(1);
            doubleGauge.OnNext(request);
            recordBuilder.Validate(name, 6.2, 1e-10);
            recordBuilder.Reset();

            doubleGauge.OnNext(request);
            Assert.False(recordBuilder.DoubleKeyPresent(name), "Metric is not supposed to be recorded.");

            request = new SnapshotRequest(recordBuilder, true);
            doubleGauge.OnNext(request);
            recordBuilder.Validate(name, 6.2, 1e-10);
            recordBuilder.Reset();

            request = new SnapshotRequest(recordBuilder, false);
            var longGauge = factory.CreateLongGauge(name, desc, 5);

            Assert.Equal(name, longGauge.Info.Name);
            Assert.Equal(desc, longGauge.Info.Description);

            longGauge.OnNext(request);
            recordBuilder.Validate(name, (long)5);
            recordBuilder.Reset();

            longGauge.Increment(2);
            longGauge.OnNext(request);
            recordBuilder.Validate(name, (long)7);
            recordBuilder.Reset();

            longGauge.Decrement(1);
            longGauge.OnNext(request);
            recordBuilder.Validate(name, (long)6);
            recordBuilder.Reset();

            longGauge.OnNext(request);
            Assert.False(recordBuilder.LongKeyPresent(name), "Metric is not supposed to be recorded.");

            request = new SnapshotRequest(recordBuilder, true);
            longGauge.OnNext(request);
            recordBuilder.Validate(name, (long)6);
            recordBuilder.Reset();
        }
コード例 #11
0
        public void TestStatMetrics()
        {
            const string    name      = "stattest";
            const string    desc      = "stattestdesc";
            const string    valueName = "statValName";
            const double    delta     = 1e-10;
            IMetricsFactory factory   = TangFactory.GetTang().NewInjector().GetInstance <IMetricsFactory>();

            double[] array1  = new double[3];
            double[] array2  = new double[3];
            Random   randGen = new Random();

            array1 = array1.Select(x => randGen.NextDouble()).ToArray();
            array2 = array2.Select(x => randGen.NextDouble()).ToArray();

            var stat = factory.CreateStatMetric(name, desc, valueName);

            MetricTestUtils.RecordBuilderForTests recordBuilder = new MetricTestUtils.RecordBuilderForTests();
            var request = new SnapshotRequest(recordBuilder, false);

            foreach (var entry in array1)
            {
                stat.Sample(entry);
            }

            double expectedMean = array1.Sum() / 3;
            double expectedStd  = Math.Sqrt(array1.Select(x => Math.Pow(x - expectedMean, 2)).Sum() / 2);

            stat.OnNext(request);
            recordBuilder.Validate(name + "-Num", (long)3);
            recordBuilder.Validate(name + "-RunningAvg", expectedMean, delta);
            recordBuilder.Validate(name + "-RunningStdev", expectedStd, delta);
            recordBuilder.Validate(name + "-IntervalAvg", expectedMean, delta);
            recordBuilder.Validate(name + "-IntervalStdev", expectedStd, delta);
            recordBuilder.Validate(name + "-RunningMin", array1.Min(), delta);
            recordBuilder.Validate(name + "-IntervalMin", array1.Min(), delta);
            recordBuilder.Validate(name + "-RunningMax", array1.Max(), delta);
            recordBuilder.Validate(name + "-IntervalMax", array1.Max(), delta);

            recordBuilder.Reset();
            foreach (var entry in array2)
            {
                stat.Sample(entry);
            }

            double expectedIntervalMean = array2.Sum() / 3;
            double expectedIntervalStd  = Math.Sqrt(array2.Select(x => Math.Pow(x - expectedIntervalMean, 2)).Sum() / 2);
            double expectedIntervalMin  = array2.Min();
            double expectedIntervalMax  = array2.Max();
            double expectedRunningMean  = (array1.Sum() + array2.Sum()) / 6;
            double expectedRunningStd   =
                Math.Sqrt((array1.Select(x => Math.Pow(x - expectedRunningMean, 2)).Sum() +
                           array2.Select(x => Math.Pow(x - expectedRunningMean, 2)).Sum()) / 5);
            double expectedRunningMin = Math.Min(array1.Min(), array2.Min());
            double expectedRunningMax = Math.Max(array1.Max(), array2.Max());

            stat.OnNext(request);
            recordBuilder.Validate(name + "-Num", (long)6);
            recordBuilder.Validate(name + "-RunningAvg", expectedRunningMean, delta);
            recordBuilder.Validate(name + "-RunningStdev", expectedRunningStd, delta);
            recordBuilder.Validate(name + "-IntervalAvg", expectedIntervalMean, delta);
            recordBuilder.Validate(name + "-IntervalStdev", expectedIntervalStd, delta);
            recordBuilder.Validate(name + "-RunningMin", expectedRunningMin, delta);
            recordBuilder.Validate(name + "-IntervalMin", expectedIntervalMin, delta);
            recordBuilder.Validate(name + "-RunningMax", expectedRunningMax, delta);
            recordBuilder.Validate(name + "-IntervalMax", expectedIntervalMax, delta);

            recordBuilder.Reset();
            stat.OnNext(request);
            Assert.False(recordBuilder.LongKeyPresent(name + "-Num"), "Metric is not supposed to be recorded.");

            request = new SnapshotRequest(recordBuilder, true);
            stat.OnNext(request);
            Assert.True(recordBuilder.LongKeyPresent(name + "-Num"), "Metric is supposed to be recorded.");
        }
コード例 #12
0
 /// <summary>
 /// Simply calls the OnNext() of registered observer.
 /// </summary>
 /// <param name="value">Snapshot request instance</param>
 public void OnNext(SnapshotRequest value)
 {
     _observer.OnNext(value);
 }