Example #1
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            ListWorkRequestsRequest request;

            try
            {
                request = new ListWorkRequestsRequest
                {
                    CompartmentId      = CompartmentId,
                    ResourceIdentifier = ResourceIdentifier,
                    OpcRequestId       = OpcRequestId,
                    SortOrder          = SortOrder,
                    SortBy             = SortBy,
                    Page  = Page,
                    Limit = Limit
                };
                IEnumerable <ListWorkRequestsResponse> responses = GetRequestDelegate().Invoke(request);
                foreach (var item in responses)
                {
                    response = item;
                    WriteOutput(response, response.WorkRequestCollection, 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);
            }
        }
Example #2
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            ListWorkRequestsRequest request;

            try
            {
                request = new ListWorkRequestsRequest
                {
                    CompartmentId = CompartmentId,
                    Id            = Id,
                    OperationType = OperationType,
                    Status        = Status,
                    Limit         = Limit,
                    Page          = Page,
                    SortOrder     = SortOrder,
                    SortBy        = SortBy,
                    OpcRequestId  = OpcRequestId
                };
                IEnumerable <ListWorkRequestsResponse> responses = GetRequestDelegate().Invoke(request);
                foreach (var item in responses)
                {
                    response = item;
                    WriteOutput(response, response.Items, true);
                }
                FinishProcessing(response);
            }
            catch (Exception ex)
            {
                TerminatingErrorDuringExecution(ex);
            }
        }
Example #3
0
        /// <summary>
        /// Lists the work requests in a compartment.
        ///
        /// </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/integration/ListWorkRequests.cs.html">here</a> to see an example of how to use ListWorkRequests API.</example>
        public async Task <ListWorkRequestsResponse> ListWorkRequests(ListWorkRequestsRequest request, RetryConfiguration retryConfiguration = null, CancellationToken cancellationToken = default)
        {
            logger.Trace("Called listWorkRequests");
            Uri                uri            = new Uri(this.restClient.GetEndpoint(), System.IO.Path.Combine(basePathWithoutHost, "/workRequests".Trim('/')));
            HttpMethod         method         = new HttpMethod("GET");
            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 <ListWorkRequestsResponse>(responseMessage));
            }
            catch (Exception e)
            {
                logger.Error($"ListWorkRequests failed with error: {e.Message}");
                throw;
            }
        }
Example #4
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            ListWorkRequestsRequest request;

            try
            {
                request = new ListWorkRequestsRequest
                {
                    NamespaceName = NamespaceName,
                    CompartmentId = CompartmentId,
                    OpcRequestId  = OpcRequestId,
                    Page          = Page,
                    Limit         = Limit
                };
                IEnumerable <ListWorkRequestsResponse> responses = GetRequestDelegate().Invoke(request);
                foreach (var item in responses)
                {
                    response = item;
                    WriteOutput(response, response.WorkRequestCollection, true);
                }
                FinishProcessing(response);
            }
            catch (Exception ex)
            {
                TerminatingErrorDuringExecution(ex);
            }
        }
 /// <summary>
 /// Creates a new enumerable which will iterate over the WorkRequestSummary objects
 /// contained in responses from the ListWorkRequests 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 <WorkRequestSummary> ListWorkRequestsRecordEnumerator(ListWorkRequestsRequest request, Common.Retry.RetryConfiguration retryConfiguration = null, CancellationToken cancellationToken = default)
 {
     return(new Common.Utils.ResponseRecordEnumerable <ListWorkRequestsRequest, ListWorkRequestsResponse, WorkRequestSummary>(
                response => response.OpcNextPage,
                input =>
     {
         if (!string.IsNullOrEmpty(input))
         {
             request.Page = input;
         }
         return request;
     },
                request => client.ListWorkRequests(request, retryConfiguration, cancellationToken),
                response => response.WorkRequestCollection.Items
                ));
 }
        /// <summary>
        /// Lists the work requests in a compartment or for a specified resource.
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public ListWorkRequestsResponse ListWorkRequests(ListWorkRequestsRequest param)
        {
            var uri = new Uri($"{GetEndPoint(CoreServices.WorkRequests, this.Region)}?{param.GetOptionQuery()}");

            using (var webResponse = this.RestClient.Get(uri, new HttpRequestHeaderParam {
                OpcRequestId = param.OpcRequestId
            }))
                using (var stream = webResponse.GetResponseStream())
                    using (var reader = new StreamReader(stream))
                    {
                        var response = reader.ReadToEnd();

                        return(new ListWorkRequestsResponse()
                        {
                            Items = JsonSerializer.Deserialize <List <WorkRequestSummary> >(response),
                            OpcRequestId = webResponse.Headers.Get("opc-request-id"),
                            OpcNextPage = webResponse.Headers.Get("opc-next-page")
                        });
                    }
        }
        public static void DisplayBucketAndObject(ClientConfig config, string namespaceName, ObjectStorageClient client, IdentityClient identityClient)
        {
            // Compartment required only to get a bucket
            var listCompartmentRequest = new ListCompartmentRequest()
            {
                CompartmentId          = config.TenancyId,
                CompartmentIdInSubtree = true,
                AccessLevel            = ListCompartmentRequest.AccessLevels.ACCESSIBLE
            };
            var compartments = identityClient.ListCompartment(listCompartmentRequest).Items;

            // root(tenant) add
            compartments.Add(new OCISDK.Core.Identity.Model.Compartment {
                Id = config.TenancyId, Name = "root"
            });

            foreach (var compartment in compartments)
            {
                Console.WriteLine($"## Compartment<{compartment.Name}>--------");

                // list bucket
                ListBucketsRequest listBucketsRequest = new ListBucketsRequest()
                {
                    NamespaceName = namespaceName,
                    CompartmentId = compartment.Id
                };
                var listBucket = client.ListBuckets(listBucketsRequest);
                Console.WriteLine($"* Bucket------------------------");
                Console.WriteLine($" namespace : {namespaceName}");
                Console.WriteLine($" comaprtment : {config.TenancyId}");

                listBucket.Items.ForEach(bucket =>
                {
                    HeadBucketRequest headBucketRequest = new HeadBucketRequest()
                    {
                        NamespaceName = bucket.Namespace,
                        BucketName    = bucket.Name
                    };
                    var buckethead = client.HeadBucket(headBucketRequest);

                    // get bucket details
                    GetBucketRequest getBucketRequest = new GetBucketRequest()
                    {
                        NamespaceName = bucket.Namespace,
                        BucketName    = bucket.Name,
                        IfMatch       = buckethead.ETag
                    };
                    var bucketDetail = client.GetBucket(getBucketRequest);
                    Console.WriteLine($"\t|- * name : {bucketDetail.Bucket.Name}");
                    Console.WriteLine($"\t|    timeCreated : {bucketDetail.Bucket.TimeCreated}");

                    // Bucket workrequests
                    ListWorkRequestsRequest listWorkRequestsRequest = new ListWorkRequestsRequest
                    {
                        CompartmentId = bucketDetail.Bucket.CompartmentId,
                        BucketName    = bucket.Name
                    };
                    var wrs = client.ListWorkRequests(listWorkRequestsRequest);
                    Console.WriteLine($"\t|* WorkRequest------------------------");
                    foreach (var wr in wrs.Items)
                    {
                        Console.WriteLine($"\t|\t|- name : {wr.OperationType}");
                        Console.WriteLine($"\t|\t|- status : {wr.Status}");
                        Console.WriteLine($"\t|\t|- start : {wr.TimeStarted}");
                        Console.WriteLine($"\t|\t|- finish : {wr.TimeFinished}");
                    }

                    // objects
                    Console.WriteLine($"\t|* Object------------------------");
                    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
                    {
                        NamespaceName = bucketDetail.Bucket.Namespace,
                        BucketName    = bucketDetail.Bucket.Name,
                        Fields        = new List <string> {
                            "size", "timeCreated", "md5"
                        }
                    };
                    var Objs = client.ListObjects(listObjectsRequest);
                    Objs.ListObjects.Objects.ForEach(obj =>
                    {
                        Console.WriteLine($"\t|\t|- name : {obj.Name}");

                        GetObjectRequest getObjectRequest = new GetObjectRequest()
                        {
                            NamespaceName = bucketDetail.Bucket.Namespace,
                            BucketName    = bucketDetail.Bucket.Name,
                            ObjectName    = obj.Name,
                        };
                        var ObjDetails = client.GetObject(getObjectRequest);
                        Console.WriteLine($"\t|\t|- contentLength : {ObjDetails.ContentLength}");

                        // download

                        /*if (!Directory.Exists("./ExampleDownload"))
                         * {
                         *  Directory.CreateDirectory("./ExampleDownload");
                         * }
                         * if (!File.Exists($"./ExampleDownload/{obj.Name.Replace('/', '_')}"))
                         * {
                         *  client.DownloadObject(getObjectRequest, "./ExampleDownload/", obj.Name.Replace('/', '_'));
                         * }*/
                    });
                });
            }
        }
        public static void ConsoleDisplay(ClientConfig config)
        {
            var identityClient = new IdentityClient(config)
            {
                Region = Regions.US_ASHBURN_1
            };

            var lbClient = new LoadBalancerClient(config);

            var listCompartmentRequest = new ListCompartmentRequest()
            {
                CompartmentId          = config.TenancyId,
                CompartmentIdInSubtree = true,
                AccessLevel            = ListCompartmentRequest.AccessLevels.ACCESSIBLE
            };
            var compartments = identityClient.ListCompartment(listCompartmentRequest).Items;

            Console.WriteLine("* LB Resources------------------------");
            foreach (var com in compartments)
            {
                if (com.LifecycleState != "ACTIVE")
                {
                    continue;
                }

                Console.WriteLine($" Compartment<{com.Name}>--------");

                var listLoadBalancersRequest = new ListLoadBalancersRequest()
                {
                    CompartmentId = com.Id,
                    SortBy        = ListLoadBalancersRequest.SortByParam.DISPLAYNAME
                };
                Console.WriteLine("   LoadBalancer------");
                var loadbalancers = lbClient.ListLoadBalancers(listLoadBalancersRequest).Items;
                foreach (var lb in loadbalancers)
                {
                    var getLoadBalancerRequest = new GetLoadBalancerRequest()
                    {
                        LoadBalancerId = lb.Id
                    };
                    var lbDetail = lbClient.GetLoadBalancer(getLoadBalancerRequest).LoadBalancer;
                    Console.WriteLine($"\t|- displayName: {lbDetail.DisplayName}");
                    Console.WriteLine($"\t|  state: {lbDetail.LifecycleState}");
                    Console.WriteLine($"\t|  shape: {lbDetail.ShapeName}");
                    Console.WriteLine($"\t|  timeCreated: {lbDetail.TimeCreated}");
                    Console.WriteLine($"\t|  ipAddresses: {lbDetail.IpAddresses}");
                    Console.WriteLine($"\t|  private: {lbDetail.IsPrivate}");
                    Console.WriteLine($"\t|  listeners:");
                    foreach (var key in lbDetail.Listeners.Keys)
                    {
                        Console.WriteLine($"\t|   |-{key} : {lbDetail.Listeners[key].DefaultBackendSetName}");
                    }
                    Console.WriteLine($"\t|  rules:");
                    foreach (var key in lbDetail.RuleSets.Keys)
                    {
                        Console.WriteLine($"\t|   |-{lbDetail.RuleSets[key].Name}");
                        foreach (var rule in lbDetail.RuleSets[key].Items)
                        {
                            Console.WriteLine($"\t|   |   |-{rule.Action}");
                        }
                    }

                    Console.WriteLine($"\t|  workRequest:");
                    var listWorkRequestsRequest = new ListWorkRequestsRequest()
                    {
                        LoadBalancerId = lb.Id
                    };
                    var works = lbClient.ListWorkRequests(listWorkRequestsRequest).Items;
                    foreach (var work in works)
                    {
                        Console.WriteLine($"\t|   |-{work.Type}");
                        Console.WriteLine($"\t|   | {work.LifecycleState}");
                    }
                }

                Console.WriteLine("   LoadBalancerHealth------");
                var listLoadBalancerHealthsRequest = new ListLoadBalancerHealthsRequest()
                {
                    CompartmentId = com.Id
                };
                var lbHealths = lbClient.ListLoadBalancerHealths(listLoadBalancerHealthsRequest).Items;
                foreach (var health in lbHealths)
                {
                    var getLoadBalancerHealthRequest = new GetLoadBalancerHealthRequest()
                    {
                        LoadBalancerId = health.LoadBalancerId
                    };
                    var healthDetail = lbClient.GetLoadBalancerHealth(getLoadBalancerHealthRequest).LoadBalancerHealth;
                    Console.WriteLine($"\t|- criticalStateBackendSetNames:");
                    foreach (var name in healthDetail.CriticalStateBackendSetNames)
                    {
                        Console.WriteLine($"\t|    |-{name}");
                    }
                    Console.WriteLine($"\t|- unknownStateBackendSetNames:");
                    foreach (var name in healthDetail.UnknownStateBackendSetNames)
                    {
                        Console.WriteLine($"\t|    |-{name}");
                    }
                    Console.WriteLine($"\t|- warningStateBackendSetNames:");
                    foreach (var name in healthDetail.WarningStateBackendSetNames)
                    {
                        Console.WriteLine($"\t|    |-{name}");
                    }
                }

                Console.WriteLine("   LoadBalancerPolicy------");
                var listLoadBalancerPoliciesRequest = new ListLoadBalancerPoliciesRequest()
                {
                    CompartmentId = com.Id
                };
                var lbPolicies = lbClient.ListLoadBalancerPolicies(listLoadBalancerPoliciesRequest).Items;
                foreach (var policy in lbPolicies)
                {
                    Console.WriteLine($"\t|- name: {policy.Name}");
                }

                Console.WriteLine("   LoadBalancerProtocol------");
                var listLoadBalancerProtocolsRequest = new ListLoadBalancerProtocolsRequest()
                {
                    CompartmentId = com.Id
                };
                var lbProtocols = lbClient.ListLoadBalancerProtocols(listLoadBalancerProtocolsRequest).Items;
                foreach (var protocol in lbProtocols)
                {
                    Console.WriteLine($"\t|- name: {protocol.Name}");
                }

                Console.WriteLine("   LoadBalancerShape------");
                var listLoadBalancerShapesRequest = new ListLoadBalancerShapesRequest()
                {
                    CompartmentId = com.Id
                };
                var lbShapes = lbClient.ListLoadBalancerShapes(listLoadBalancerShapesRequest).Items;
                foreach (var shape in lbShapes)
                {
                    Console.WriteLine($"\t|- name: {shape.Name}");
                }
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("+----------------------------------------+");
            Console.WriteLine("|                                        |");
            Console.WriteLine("|         OCISDK SessionExample          |");
            Console.WriteLine("|                                        |");
            Console.WriteLine("+----------------------------------------+");

            string configPath = ".oci/config";

            System.OperatingSystem os = System.Environment.OSVersion;
            // windows
            if (os.Platform == PlatformID.Win32NT)
            {
                string rootPath = Directory.GetDirectoryRoot(Directory.GetCurrentDirectory());
                configPath = $"{rootPath}/{configPath}";
                if (!Directory.Exists($"{rootPath}/.oci"))
                {
                    Directory.CreateDirectory($"{rootPath}/.oci");
                }
            }
            else
            {
                configPath = $"/home/user/{configPath}";
            }

            string     profile;
            ConfigFile configReader;

            if (File.Exists(configPath))
            {
                Console.Write("Connection ProfileName(Empty Input is DEFAULT): ");
                profile = Console.ReadLine();
                if (string.IsNullOrEmpty(profile))
                {
                    profile = "Cloudii";
                }

                // load connection file
                configReader = ConfigFileReader.Parse(configPath, profile);
            }
            else
            {
                profile = "DEFAULT";

                // create connection file
                Console.WriteLine("Create connection settings to Oracle Cloud Infrastructure");

                Console.Write("TenancyId (Required): ");
                string tenancyId = OCIDInput();

                Console.Write("UserId (Required): ");
                string userId = OCIDInput();

                Console.Write("Fingerprint (Required): ");
                string fingerprint = KeyInput();

                Console.Write("PrivateKeyPath (Required): ");
                string privateKeyPath = KeyInput();

                Console.Write("PrivateKeyPassphrase: ");
                string privateKeyPassphrase = InputPassword();

                string testFileContentsMyProfile = $"[{profile}]\n" +
                                                   $"tenancy={tenancyId}\n" +
                                                   $"user={userId}\n" +
                                                   $"fingerprint={fingerprint}\n" +
                                                   $"key_file={privateKeyPath}\n" +
                                                   $"pass_phrase={privateKeyPassphrase}\n";

                File.WriteAllText(configPath, testFileContentsMyProfile);

                configReader = ConfigFileReader.Parse(configPath, profile);
            }

            // ClientConfig settings
            var         configSt = new ClientConfigStream();
            IOciSession session;

            using (var st = File.OpenText(configReader.Get("key_file")))
            {
                configSt = new ClientConfigStream
                {
                    TenancyId            = configReader.Get("tenancy"),
                    UserId               = configReader.Get("user"),
                    Fingerprint          = configReader.Get("fingerprint"),
                    PrivateKey           = st,
                    PrivateKeyPassphrase = configReader.Get("pass_phrase"),
                    AccountId            = configReader.Get("accountId"),
                    DomainName           = configReader.Get("domain_name"),
                    IdentityDomain       = configReader.Get("identity_domain"),
                    UserName             = configReader.Get("user_name"),
                    Password             = configReader.Get("password"),
                    HomeRegion           = configReader.Get("home_region")
                };

                session = new OciSession(configSt);
            }

            var comClient = session.GetCommercialClient();
            var listPurchaseEntitlementsRequest = new ListPurchaseEntitlementsRequest
            {
                CompartmentId = configSt.TenancyId
            };
            var purchase = comClient.ListPurchaseEntitlements(listPurchaseEntitlementsRequest);

            var getServiceEntitlementRegistrationsRequest = new ListServiceEntitlementRegistrationsRequest()
            {
                CompartmentId = configSt.TenancyId
            };
            var services = comClient.ListServiceEntitlementRegistrations(getServiceEntitlementRegistrationsRequest);

            var costClient = session.GetUsageCostsClient();
            var getSubscriptionInfoRequest = new GetSubscriptionInfoRequest
            {
                TenancyId = configSt.TenancyId
            };
            var subsc = costClient.GetSubscriptionInfo(getSubscriptionInfoRequest);

            // get Client
            var identityClient = session.GetIdentityClient();

            var getTenancyRequest = new GetTenancyRequest()
            {
                TenancyId = configSt.TenancyId
            };
            var getTenacy = identityClient.GetTenancy(getTenancyRequest);

            Console.WriteLine($"tenantName: {getTenacy.Tenancy.Name}");

            // get compute
            var computeClient = session.GetComputeClient();

            IDictionary <string, IDictionary <string, string> > tags = new Dictionary <string, IDictionary <string, string> >();

            tags.Add("CostTracking", new Dictionary <string, string> {
                { "cost-trakcerA", "aaaa" }
            });

            var dbClient = session.GetDatabaseClient();
            GetDbSystemRequest getDbSystemRequest = new GetDbSystemRequest()
            {
                DbSystemId = "ocid1.dbsystem.oc1.iad.abuwcljrbukbjzlameegvsn3u7qb3qcqvtcdvl74jxfth7xjsya7cxkdpibq"
            };
            var dbSystem = dbClient.GetDbSystem(getDbSystemRequest);

            UpdateDbSystemRequest updateDbSystemRequest = new UpdateDbSystemRequest()
            {
                DbSystemId            = "ocid1.dbsystem.oc1.iad.abuwcljrbukbjzlameegvsn3u7qb3qcqvtcdvl74jxfth7xjsya7cxkdpibq",
                UpdateDbSystemDetails = new OCISDK.Core.Database.Model.UpdateDbSystemDetails()
                {
                    DefinedTags = tags
                }
            };

            dbClient.UpdateDbSystem(updateDbSystemRequest);

            var listCompartmentRequest = new ListCompartmentRequest()
            {
                CompartmentId          = getTenacy.Tenancy.Id,
                CompartmentIdInSubtree = true
            };
            var cmparts = identityClient.ListCompartment(listCompartmentRequest);

            foreach (var com in cmparts.Items)
            {
                Console.WriteLine($"compartmentName: {com.Name}");

                var listInstanceRequest = new ListInstancesRequest()
                {
                    CompartmentId = com.Id,
                    Limit         = 10,
                    SortOrder     = SortOrder.ASC
                };
                var instances = computeClient.ListInstances(listInstanceRequest);
                foreach (var ins in instances.Items)
                {
                    Console.WriteLine($"rootCompartmentInstanceName: {ins.DisplayName}");


                    var workReqestClient        = session.GetWorkRequestClient();
                    var listWorkRequestsRequest = new ListWorkRequestsRequest()
                    {
                        CompartmentId = ins.CompartmentId,
                        ResourceId    = ins.Id
                    };
                    var workreqs = workReqestClient.ListWorkRequests(listWorkRequestsRequest);
                    foreach (var wq in workreqs.Items)
                    {
                        Console.WriteLine($"\tWorkRequest: {wq.OperationType}, state:{wq.Status}");

                        var getWorkRequestRequest = new GetWorkRequestRequest()
                        {
                            WorkRequestId = wq.Id
                        };
                        var gw = workReqestClient.GetWorkRequest(getWorkRequestRequest);
                        Console.WriteLine($"\taccepted:{gw.WorkRequest.TimeAccepted}, finished:{gw.WorkRequest.TimeFinished}");

                        var listWorkRequestErrorsRequest = new ListWorkRequestErrorsRequest()
                        {
                            WorkRequestId = wq.Id,
                            Limit         = 100,
                            SortOrder     = SortOrder.ASC
                        };
                        var wqErrors = workReqestClient.ListWorkRequestErrors(listWorkRequestErrorsRequest);
                        foreach (var error in wqErrors.Items)
                        {
                            Console.WriteLine($"\tErrorCode: {error.Code}, ErrorMessage:{error.Message}, ErrorTimeStamp:{error.Timestamp}");
                        }

                        var listWorkRequestLogsRequest = new ListWorkRequestLogsRequest()
                        {
                            WorkRequestId = wq.Id,
                            Limit         = 100,
                            SortOrder     = SortOrder.ASC
                        };
                        var wqLogs = workReqestClient.ListWorkRequestLogs(listWorkRequestLogsRequest);
                        foreach (var log in wqLogs.Items)
                        {
                            Console.WriteLine($"\tLogMessage:{log.Message}, LogTimeStamp:{log.Timestamp}");
                        }
                    }
                }
            }

            Console.WriteLine("Exit with key press...");
            Console.ReadLine();
        }