コード例 #1
0
        private async Task <List <Metric> > ReadQueueMetrics()
        {
            var    metrics = new List <Metric>();
            string token   = null;

            do
            {
                var request = new ListMetricsRequest
                {
                    MetricName = "ApproximateAgeOfOldestMessage",
                    NextToken  = token
                };
                var response = await _amazonCloudWatch.ListMetricsAsync(request);

                if (response != null)
                {
                    token = response.NextToken;
                    metrics.AddRange(response.Metrics);
                }
                else
                {
                    token = null;
                }
            } while (token != null);

            return(metrics);
        }
コード例 #2
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonCloudWatchConfig config = new AmazonCloudWatchConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonCloudWatchClient client = new AmazonCloudWatchClient(creds, config);

            ListMetricsResponse resp = new ListMetricsResponse();

            do
            {
                ListMetricsRequest req = new ListMetricsRequest
                {
                    NextToken = resp.NextToken
                };

                resp = client.ListMetrics(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.Metrics)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
コード例 #3
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            ListMetricsRequest request;

            try
            {
                request = new ListMetricsRequest
                {
                    CompartmentId      = CompartmentId,
                    ListMetricsDetails = ListMetricsDetails,
                    OpcRequestId       = OpcRequestId,
                    Page  = Page,
                    Limit = Limit,
                    CompartmentIdInSubtree = CompartmentIdInSubtree
                };
                IEnumerable <ListMetricsResponse> responses = GetRequestDelegate().Invoke(request);
                foreach (var item in responses)
                {
                    response = item;
                    WriteOutput(response, response.Items, true);
                }
                if (!ParameterSetName.Equals(AllPageSet) && !ParameterSetName.Equals(LimitSet) && response.OpcNextPage != null)
                {
                    WriteWarning("This operation supports pagination and not all resources were returned. Re-run using the -All option to auto paginate and list all resources.");
                }
                FinishProcessing(response);
            }
            catch (Exception ex)
            {
                TerminatingErrorDuringExecution(ex);
            }
        }
コード例 #4
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            ListMetricsRequest request;

            try
            {
                request = new ListMetricsRequest
                {
                    CompartmentId      = CompartmentId,
                    ListMetricsDetails = ListMetricsDetails,
                    OpcRequestId       = OpcRequestId,
                    Page  = Page,
                    Limit = Limit,
                    CompartmentIdInSubtree = CompartmentIdInSubtree
                };
                IEnumerable <ListMetricsResponse> responses = GetRequestDelegate().Invoke(request);
                foreach (var item in responses)
                {
                    response = item;
                    WriteOutput(response, response.Items, true);
                }
                FinishProcessing(response);
            }
            catch (Exception ex)
            {
                TerminatingErrorDuringExecution(ex);
            }
        }
コード例 #5
0
        public async Task <List <Metric> > GetMetrics(string region, string nameSpace, string metric, List <string> dimensions)
        {
            cloudWatchRepository.Region = region;
            var dimensionFilter = new List <DimensionFilter>();

            dimensions.ForEach(x => {
                dimensionFilter.Add(new DimensionFilter()
                {
                    Name  = MonitoringConstants.nameSpaceIdentifiers[nameSpace],
                    Value = x
                });
            });
            var request = new ListMetricsRequest()
            {
                Namespace = nameSpace, MetricName = metric, Dimensions = dimensionFilter
            };
            var response = new ListMetricsResponse();

            do
            {
                response = await cloudWatchRepository.ListMetrics(request);

                request.NextToken = response.NextToken;
            } while (!string.IsNullOrEmpty(request.NextToken));

            return(response.Metrics);
        }
コード例 #6
0
        private async Task <List <Metric> > ReadStreamMetrics()
        {
            var    metrics = new List <Metric>();
            string token   = null;

            do
            {
                var request = new ListMetricsRequest
                {
                    MetricName = "GetRecords.IteratorAgeMilliseconds",
                    NextToken  = token
                };
                var response = await _amazonCloudWatch.ListMetricsAsync(request);

                if (response != null)
                {
                    token = response.NextToken;
                    metrics.AddRange(response.Metrics);
                }
                else
                {
                    token = null;
                }
            }while (token != null);

            return(metrics);
        }
コード例 #7
0
        /// <summary>
        /// Returns metric definitions that match the criteria specified in the request. Compartment OCID required.
        /// For information about metrics, see [Metrics Overview](https://docs.cloud.oracle.com/iaas/Content/Monitoring/Concepts/monitoringoverview.htm#MetricsOverview).
        /// For important limits information, see [Limits on Monitoring](https://docs.cloud.oracle.com/iaas/Content/Monitoring/Concepts/monitoringoverview.htm#Limits).
        /// &lt;br/&gt;
        /// Transactions Per Second (TPS) per-tenancy limit for this operation: 10.
        ///
        /// </summary>
        /// <param name="request">The request object containing the details to send. Required.</param>
        /// <param name="retryConfiguration">The retry configuration that will be used by to send this request. Optional.</param>
        /// <param name="cancellationToken">The cancellation token to cancel this operation. Optional.</param>
        /// <returns>A response object containing details about the completed operation</returns>
        /// <example>Click <a href="https://docs.cloud.oracle.com/en-us/iaas/tools/dot-net-examples/latest/monitoring/ListMetrics.cs.html">here</a> to see an example of how to use ListMetrics API.</example>
        public async Task <ListMetricsResponse> ListMetrics(ListMetricsRequest request, RetryConfiguration retryConfiguration = null, CancellationToken cancellationToken = default)
        {
            logger.Trace("Called listMetrics");
            Uri                uri            = new Uri(this.restClient.GetEndpoint(), System.IO.Path.Combine(basePathWithoutHost, "/metrics/actions/listMetrics".Trim('/')));
            HttpMethod         method         = new HttpMethod("POST");
            HttpRequestMessage requestMessage = Converter.ToHttpRequestMessage(uri, method, request);

            requestMessage.Headers.Add("Accept", "application/json");
            GenericRetrier      retryingClient = Retrier.GetPreferredRetrier(retryConfiguration, this.retryConfiguration);
            HttpResponseMessage responseMessage;

            try
            {
                if (retryingClient != null)
                {
                    responseMessage = await retryingClient.MakeRetryingCall(this.restClient.HttpSend, requestMessage, cancellationToken).ConfigureAwait(false);
                }
                else
                {
                    responseMessage = await this.restClient.HttpSend(requestMessage).ConfigureAwait(false);
                }
                this.restClient.CheckHttpResponseMessage(requestMessage, responseMessage);

                return(Converter.FromHttpResponseMessage <ListMetricsResponse>(responseMessage));
            }
            catch (Exception e)
            {
                logger.Error($"ListMetrics failed with error: {e.Message}");
                throw;
            }
        }
コード例 #8
0
        /// <summary>
        /// 查询指标列表
        /// </summary>
        public async Task <ListMetricsResponse> ListMetricsAsync(ListMetricsRequest listMetricsRequest)
        {
            Dictionary <string, string> urlParam = new Dictionary <string, string>();
            string              urlPath          = HttpUtils.AddUrlPath("/V1.0/{project_id}/metrics", urlParam);
            SdkRequest          request          = HttpUtils.InitSdkRequest(urlPath, listMetricsRequest);
            HttpResponseMessage response         = await DoHttpRequestAsync("GET", request);

            return(JsonUtils.DeSerialize <ListMetricsResponse>(response));
        }
コード例 #9
0
        public async Task <ListMetricsResponse> ListMetrics(ListMetricsRequest listMetricsRequest)
        {
            using (var amazonCloudWatchClient = new AmazonCloudWatchClient(awsCredentials, RegionEndpoint.GetBySystemName(Region)))
            {
                var response = await amazonCloudWatchClient.ListMetricsAsync(listMetricsRequest);

                return(response);
            }
        }
コード例 #10
0
        public static void CWListMetrics()
        {
            #region CWListMetrics
            var client = new AmazonCloudWatchClient();

            var filter = new DimensionFilter
            {
                Name  = "InstanceType",
                Value = "t1.micro"
            };

            var request = new ListMetricsRequest
            {
                Dimensions = new List <DimensionFilter>()
                {
                    filter
                },
                MetricName = "CPUUtilization",
                Namespace  = "AWS/EC2"
            };

            var response = new ListMetricsResponse();

            do
            {
                response = client.ListMetrics(request);

                if (response.Metrics.Count > 0)
                {
                    foreach (var metric in response.Metrics)
                    {
                        Console.WriteLine(metric.MetricName +
                                          " (" + metric.Namespace + ")");

                        foreach (var dimension in metric.Dimensions)
                        {
                            Console.WriteLine("  " + dimension.Name + ": "
                                              + dimension.Value);
                        }
                    }
                }
                else
                {
                    Console.WriteLine("No metrics found.");
                }

                request.NextToken = response.NextToken;
            } while (!string.IsNullOrEmpty(response.NextToken));
            #endregion

            Console.ReadLine();
        }
コード例 #11
0
        public override AsyncUnaryCall <ListMetricsResponse> ListMetricsAsync(ListMetricsRequest request, Metadata headers = null, DateTime?deadline = null, CancellationToken cancellationToken = default)
        {
            DateTimeOffset endDateTime;

            if (string.IsNullOrEmpty(request.PageToken))
            {
                endDateTime = request.EndTime?.ToDateTimeOffset() ?? DateTimeOffset.UtcNow;
            }
            else
            {
                endDateTime = DateTimeOffset.Parse(request.PageToken, CultureInfo.InvariantCulture);
            }

            endDateTime = endDateTime.ToUniversalTime();
            var startDateTime = request.StartTime?.ToDateTime();

            var metrics = new List <Metric>(request.PageSize);

            for (int i = 0; i < request.PageSize; i++)
            {
                endDateTime = endDateTime.Subtract(TimeSpan.FromSeconds(5));
                if (startDateTime.HasValue && startDateTime > endDateTime)
                {
                    break;
                }

                metrics.Add(new Metric
                {
                    CreateTime = Timestamp.FromDateTimeOffset(endDateTime),
                    InputWaterCelsiusDegree            = RandomUtils.NextFloat(10, 20),
                    OutputWaterCelsiusDegree           = RandomUtils.NextFloat(10, 20),
                    HeaterOutputWaterCelsiusDegree     = RandomUtils.NextFloat(10, 20),
                    EnvironmentCelsiusDegree           = RandomUtils.NextFloat(10, 20),
                    HeaterPowerKilowatt                = RandomUtils.NextFloat(0, 12),
                    WaterPumpFlowRateCubicMeterPerHour = RandomUtils.NextFloat(1, 3),
                });
            }

            var response = new ListMetricsResponse
            {
                NextPageToken = endDateTime.ToUniversalTime().ToString(CultureInfo.InvariantCulture),
            };

            response.Metrics.AddRange(metrics);

            return(TestCalls.AsyncUnaryCall(
                       Task.FromResult(response),
                       Task.FromResult(new Metadata()),
                       () => Status.DefaultSuccess,
                       () => new Metadata(),
                       () => { }));
        }
コード例 #12
0
 /// <summary>
 /// Creates a new enumerable which will iterate over the responses received from the ListMetrics operation. This enumerable
 /// will fetch more data from the server as needed.
 /// </summary>
 /// <param name="request">The request object containing the details to send</param>
 /// <param name="retryConfiguration">The configuration for retrying, may be null</param>
 /// <param name="cancellationToken">The cancellation token object</param>
 /// <returns>The enumerator, which supports a simple iteration over a collection of a specified type</returns>
 public IEnumerable <ListMetricsResponse> ListMetricsResponseEnumerator(ListMetricsRequest request, Common.Retry.RetryConfiguration retryConfiguration = null, CancellationToken cancellationToken = default)
 {
     return(new Common.Utils.ResponseEnumerable <ListMetricsRequest, ListMetricsResponse>(
                response => response.OpcNextPage,
                input =>
     {
         if (!string.IsNullOrEmpty(input))
         {
             request.Page = input;
         }
         return request;
     },
                request => client.ListMetrics(request, retryConfiguration, cancellationToken)
                ));
 }
コード例 #13
0
        public override Task <ListMetricsResponse> ListMetrics(ListMetricsRequest request, ServerCallContext context)
        {
            string id = BitConverter.ToString(request.DeviceId.ToByteArray());

            DateTimeOffset endDateTime;

            if (string.IsNullOrEmpty(request.PageToken))
            {
                endDateTime = request.EndTime?.ToDateTimeOffset() ?? DateTimeOffset.UtcNow;
            }
            else
            {
                endDateTime = DateTimeOffset.Parse(request.PageToken, CultureInfo.InvariantCulture);
            }

            endDateTime = endDateTime.ToUniversalTime();
            DateTimeOffset?startDateTime = request.StartTime?.ToDateTimeOffset().ToUniversalTime();

            var response = new ListMetricsResponse();

            using (BjdireContext db = this.serviceProvider.GetRequiredService <BjdireContext>())
            {
                var metrics = (from m in db.Metrics
                               where m.DeviceId == id &&
                               (startDateTime == null || startDateTime <= m.Timestamp) &&
                               m.Timestamp <= endDateTime
                               orderby m.Timestamp descending
                               select m)
                              .Take(request.PageSize)
                              .ToList();
                response.Metrics.AddRange(metrics.Select(metric =>
                {
                    var m = new GrpcMetric();
                    m.AssignFrom(metric);
                    return(m);
                }));

                if (metrics.Count == request.PageSize && metrics.Last().Timestamp > startDateTime)
                {
                    response.NextPageToken = metrics.Last().Timestamp
                                             .ToUniversalTime()
                                             .ToString(CultureInfo.InvariantCulture);
                }
            }

            return(Task.FromResult(response));
        }
コード例 #14
0
        public async Task <List <Metric> > GetMetrics(string region, string nameSpace, string metric)
        {
            cloudWatchRepository.Region = region;
            var request = new ListMetricsRequest()
            {
                Namespace = nameSpace, MetricName = metric
            };
            var response = new ListMetricsResponse();

            do
            {
                response = await cloudWatchRepository.ListMetrics(request);

                request.NextToken = response.NextToken;
            } while (!string.IsNullOrEmpty(request.NextToken));

            return(response.Metrics);
        }
コード例 #15
0
        /// <summary>
        /// Retrieve CloudWatch metrics using the supplied filter, metrics name,
        /// and namespace.
        /// </summary>
        /// <param name="client">An initialized CloudWatch client.</param>
        /// <param name="filter">The filter to apply in retrieving metrics.</param>
        /// <param name="metricName">The metric name for which to retrieve
        /// information.</param>
        /// <param name="nameSpaceName">The name of the namespace from which
        /// to retrieve metric information.</param>
        public static async Task ListMetricsAsync(
            IAmazonCloudWatch client,
            DimensionFilter filter,
            string metricName,
            string nameSpaceName)
        {
            var request = new ListMetricsRequest
            {
                Dimensions = new List <DimensionFilter>()
                {
                    filter
                },
                MetricName = metricName,
                Namespace  = nameSpaceName,
            };

            var response = new ListMetricsResponse();

            do
            {
                response = await client.ListMetricsAsync(request);

                if (response.Metrics.Count > 0)
                {
                    foreach (var metric in response.Metrics)
                    {
                        Console.WriteLine(metric.MetricName +
                                          " (" + metric.Namespace + ")");

                        foreach (var dimension in metric.Dimensions)
                        {
                            Console.WriteLine("  " + dimension.Name + ": "
                                              + dimension.Value);
                        }
                    }
                }
                else
                {
                    Console.WriteLine("No metrics found.");
                }

                request.NextToken = response.NextToken;
            } while (!string.IsNullOrEmpty(response.NextToken));
        }
コード例 #16
0
        /// <summary>
        /// Returns metric definitions that match the criteria specified in the request.
        /// Compartment OCID required. For information about metrics, see Metrics Overview.
        /// For important limits information, see Limits on Monitoring.
        /// Transactions Per Second (TPS) per-tenancy limit for this operation: 1.
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public async Task <ListMetricsResponse> ListMetrics(ListMetricsRequest param)
        {
            var uri = new Uri($"{GetEndPoint(MonitoringServices.Metrics, this.Region)}/actions/listMetrics?{param.GetOptionQuery()}");

            using (var webResponse = await this.RestClientAsync.Post(uri, param.ListMetricsDetails, new HttpRequestHeaderParam()
            {
                OpcRequestId = param.OpcRequestId
            }))
                using (var stream = webResponse.GetResponseStream())
                    using (var reader = new StreamReader(stream))
                    {
                        var response = await reader.ReadToEndAsync();

                        return(new ListMetricsResponse()
                        {
                            Items = JsonSerializer.Deserialize <List <MetricModel> >(response),
                            OpcNextPage = webResponse.Headers.Get("opc-next-page"),
                            OpcRequestId = webResponse.Headers.Get("opc-request-id")
                        });
                    }
        }
コード例 #17
0
        /// <summary>
        /// 查询系统当前可监控指标列表,可以指定指标命名空间、指标名称、维度、排序方式,起始记录和最大记录条数过滤查询结果。
        /// </summary>
        /// <param name="cesV1Client"></param>
        private static void ListMetrics(CesClient cesClient)
        {
            ListMetricsRequest listMetricsRequest = new ListMetricsRequest()
            {
                MetricName = "cpu_util",
                Namespace  = "SYS.ECS",
                // Dim0 = "",
                // Dim1 = "",
                // Dim2 = "",
                // Start = "",
                Limit = 100,
                Order = ListMetricsRequest.OrderEnum.ASC
            };

            try
            {
                ListMetricsResponse metricList = cesClient.ListMetrics(listMetricsRequest);
                foreach (var metric in metricList.Metrics)
                {
                    Console.WriteLine(metric.ToString());
                }
            }
            catch (RequestTimeoutException requestTimeoutException)
            {
                Console.WriteLine(requestTimeoutException.ErrorMessage);
            }
            catch (ServiceResponseException clientRequestException)
            {
                Console.WriteLine(clientRequestException.HttpStatusCode);
                Console.WriteLine(clientRequestException.ErrorCode);
                Console.WriteLine(clientRequestException.ErrorMsg);
            }
            catch (ConnectionException connectionException)
            {
                Console.WriteLine(connectionException.ErrorMessage);
            }
        }
コード例 #18
0
        public static void MonitoringResourceExample(ClientConfig config)
        {
            // create client
            var identityClient = new IdentityClient(config);

            var computeClient = new ComputeClient(config);

            var monitoringClient = new MonitoringClient(config);

            var listCompartmenRequest = new ListCompartmentRequest()
            {
                CompartmentId          = identityClient.Config.TenancyId,
                CompartmentIdInSubtree = true,
                AccessLevel            = ListCompartmentRequest.AccessLevels.ACCESSIBLE,
                Limit = 10
            };
            // get compartment
            var listCompartment = identityClient.ListCompartment(listCompartmenRequest).Items;

            Console.WriteLine("* List Instance Metrics------------------------");
            foreach (var compartment in listCompartment)
            {
                if (!compartment.IsAccessible.HasValue || !compartment.IsAccessible.Value)
                {
                    continue;
                }
                var listInstanceRequest = new ListInstancesRequest()
                {
                    CompartmentId  = compartment.Id,
                    Limit          = 50,
                    LifecycleState = ListInstancesRequest.LifecycleStates.RUNNING,
                    SortOrder      = SortOrder.ASC
                };

                var now     = DateTime.UtcNow.AddHours(-2);
                var endTime = DateTime.UtcNow;
                // get instance
                var listInstance = computeClient.ListInstances(listInstanceRequest).Items;
                foreach (var instance in listInstance)
                {
                    Console.WriteLine($" |-{instance.DisplayName}------------");

                    // get all computeagent
                    var listMetricsRequest = new ListMetricsRequest()
                    {
                        CompartmentId          = compartment.Id,
                        CompartmentIdInSubtree = compartment.CompartmentId == config.TenancyId,
                        ListMetricsDetails     = new ListMetricsDetails()
                        {
                            Namespace        = "oci_computeagent",
                            DimensionFilters = new DimensionFilter()
                            {
                                ResourceId = instance.Id
                            }
                        }
                    };
                    // get Metrics
                    try
                    {
                        var listMetrics = monitoringClient.ListMetrics(listMetricsRequest).Items;
                        foreach (var metrics in listMetrics)
                        {
                            Console.WriteLine($"\t| Mertics: {metrics.Name}");
                            Console.WriteLine($"\t| NameSpace: {metrics.Namespace}");
                            // metric dimensions
                            //Console.WriteLine($"\t| {metrics.Dimensions}".Replace("\n", ""));

                            var summarizeMetricsDataRequest = new SummarizeMetricsDataRequest()
                            {
                                CompartmentId               = compartment.Id,
                                CompartmentIdInSubtree      = compartment.CompartmentId == config.TenancyId,
                                SummarizeMetricsDataDetails = new SummarizeMetricsDataDetails()
                                {
                                    Namespace = metrics.Namespace,
                                    Query     = metrics.Name + "[1h]{resourceId = \"" + instance.Id + "\"}.mean()",
                                    StartTime = now.ToString("yyyy-MM-ddThh:MM:ssZ"),
                                    EndTime   = endTime.ToString("yyyy-MM-ddThh:MM:ssZ")
                                }
                            };

                            var SummarizeMetricsDatas = monitoringClient.SummarizeMetricsData(summarizeMetricsDataRequest).Items;
                            foreach (var summaryData in SummarizeMetricsDatas)
                            {
                                foreach (var aggregatedDatapoint in summaryData.AggregatedDatapoints)
                                {
                                    Console.WriteLine("\t| {");
                                    Console.WriteLine($"\t| \tTimeStamp: {aggregatedDatapoint.Timestamp}");
                                    Console.WriteLine($"\t| \tValue: {aggregatedDatapoint.Value}");
                                    Console.WriteLine("\t| }");
                                }
                            }
                        }
                    }
                    catch (WebException we)
                    {
                        Console.WriteLine($"notfund:{we.Message}");
                    }
                }
            }
            Console.WriteLine("* List compartment Alarms------------------------");
            foreach (var compartment in listCompartment)
            {
                Console.WriteLine("  Alarm status------------------------");
                var listAlarmsStatusRequest = new ListAlarmsStatusRequest()
                {
                    CompartmentId = compartment.Id,
                    Limit         = 1000
                };
                var alarmStatus = monitoringClient.ListAlarmsStatus(listAlarmsStatusRequest);
                if (alarmStatus.Items.Count > 0)
                {
                    Console.WriteLine($" |-{compartment.Name}------------");

                    foreach (var alarm in alarmStatus.Items)
                    {
                        Console.WriteLine($"\tid:{alarm.Id}");
                        Console.WriteLine($"\tname:{alarm.DisplayName}");
                        Console.WriteLine($"\tstatus:{alarm.Status}");
                        Console.WriteLine($"\tseverity:{alarm.Severity}");
                    }
                }

                var listAlarmsRequest = new ListAlarmsRequest()
                {
                    CompartmentId = compartment.Id,
                    Limit         = 10
                };

                Console.WriteLine("  Alarm logs------------------------");
                var listAlarms = monitoringClient.ListAlarms(listAlarmsRequest);
                if (listAlarms.Items.Count > 0)
                {
                    Console.WriteLine($" |-{compartment.Name}------------");

                    foreach (var alarm in listAlarms.Items)
                    {
                        Console.WriteLine($"\tid:{alarm.Id}");
                        Console.WriteLine($"\tname:{alarm.DisplayName}");
                        Console.WriteLine($"\tdestinations:{alarm.Destinations}");
                        Console.WriteLine($"\tenable:{alarm.IsEnabled}");
                        Console.WriteLine($"\tstate:{alarm.LifecycleState}");

                        var getAlarmHistoryRequest = new GetAlarmHistoryRequest()
                        {
                            AlarmId = alarm.Id,
                            TimestampGreaterThanOrEqualTo = DateTime.UtcNow.ToString()
                        };
                        var history = monitoringClient.GetAlarmHistory(getAlarmHistoryRequest);
                        foreach (var his in history.AlarmHistoryCollection.Entries)
                        {
                            Console.WriteLine($"\t\t|-summary:{his.Summary}");
                            Console.WriteLine($"\t\t| timestamp:{his.Timestamp}");
                            Console.WriteLine($"\t\t| timestampTriggered:{his.TimestampTriggered}");
                        }
                    }
                }

                // Transactions Per Second (TPS) per-tenancy limit for this operation: 1.
                System.Threading.Thread.Sleep(1000);
            }
        }