public static void RegisterActivity(IAmazonSimpleWorkflow swfClient, string domainName, string name, string tasklistName)
        {
            // Register activities if it is not already registered
            var listActivityRequest = new ListActivityTypesRequest()
            {
                Domain             = domainName,
                Name               = name,
                RegistrationStatus = RegistrationStatus.REGISTERED
            };

            if (swfClient.ListActivityTypes(listActivityRequest).ActivityTypeInfos.TypeInfos.FirstOrDefault(
                    x => x.ActivityType.Version == "2.0") == null)
            {
                RegisterActivityTypeRequest request = new RegisterActivityTypeRequest()
                {
                    Name            = name,
                    Domain          = domainName,
                    Description     = "Hello World Activities",
                    Version         = "2.0",
                    DefaultTaskList = new TaskList()
                    {
                        Name = tasklistName
                    },                                                       //Worker poll based on this
                    DefaultTaskScheduleToCloseTimeout = "300",
                    DefaultTaskScheduleToStartTimeout = "150",
                    DefaultTaskStartToCloseTimeout    = "450",
                    DefaultTaskHeartbeatTimeout       = "NONE",
                };
                swfClient.RegisterActivityType(request);
                Console.WriteLine("Setup: Created Activity Name - " + request.Name);
            }
        }
示例#2
0
        /// <summary>
        /// Registers activity type for a specific version.
        /// </summary>
        /// <param name="domainName">Domain where the activity type should be registered.</param>
        /// <param name="client">Interface for accessing Amazon Simple Workflow Service.</param>
        void IRegistrable.Register(string domainName, IAmazonSimpleWorkflow client)
        {
            var listActivityRequest = new ListActivityTypesRequest
            {
                Domain             = domainName,
                Name               = Options.Name,
                RegistrationStatus = RegistrationStatus.REGISTERED
            };


            if (
                client.ListActivityTypesAsync(listActivityRequest).Result
                .ActivityTypeInfos.TypeInfos.FirstOrDefault(x => x.ActivityType.Version == Options.Version) == null)
            {
                Logger.Trace("New Activity Type.");

                RegisterActivityTypeRequest request = new RegisterActivityTypeRequest
                {
                    Name            = Options.Name,
                    Domain          = domainName,
                    Description     = Options.Description,
                    Version         = Options.Version,
                    DefaultTaskList = TaskList,                     //Worker poll based on this
                    DefaultTaskScheduleToCloseTimeout = Options.ScheduleToCloseTimeout.ToStringOrNone(),
                    DefaultTaskScheduleToStartTimeout = Options.ScheduleToStartTimeout.ToStringOrNone(),
                    DefaultTaskStartToCloseTimeout    = Options.StartToCloseTimeout.ToStringOrNone(),
                    DefaultTaskHeartbeatTimeout       = Options.HeartbeatTimeout.ToStringOrNone()
                };

                client.RegisterActivityTypeAsync(request).Wait();
            }

            Logger.Trace("Activity. Name: {0}, Version: {1}", Options.Name, Options.Version);
        }
示例#3
0
        public void RegisterActivity(string name, string taskListName)
        {
            var listActivityRequest = new ListActivityTypesRequest()
            {
                Domain             = domainName,
                Name               = name,
                RegistrationStatus = RegistrationStatus.REGISTERED
            };
            var results = swfClient.ListActivityTypesAsync(listActivityRequest).Result;

            if (results.ActivityTypeInfos.TypeInfos.FirstOrDefault(x => x.ActivityType.Name == name) == null)
            {
                RegisterActivityTypeRequest request = new RegisterActivityTypeRequest()
                {
                    Name            = name,
                    Domain          = domainName,
                    Description     = "Custom Description Here",
                    Version         = "1.0",
                    DefaultTaskList = new TaskList()
                    {
                        Name = taskListName
                    },                                                       //Worker poll based on this
                    DefaultTaskScheduleToStartTimeout = "150",
                    DefaultTaskStartToCloseTimeout    = "450",
                    DefaultTaskHeartbeatTimeout       = "NONE",
                    DefaultTaskScheduleToCloseTimeout = "350"
                };
                swfClient.RegisterActivityTypeAsync(request);
                Console.WriteLine("Created Activity: " + request.Name);
            }
        }
示例#4
0
        public static void SetupWorkflowTypes(TestContext testContext)
        {
            var registerDomainRequest = new RegisterDomainRequest()
            {
                Name        = DOMAIN,
                Description = "A Description",
                WorkflowExecutionRetentionPeriodInDays = "5"
            };

            Client.RegisterDomain(registerDomainRequest);

            var registerWorkflowRequest = new RegisterWorkflowTypeRequest()
            {
                Name            = WORKFLOW_TYPE.Name,
                Domain          = DOMAIN,
                Description     = "Another Description",
                Version         = WORKFLOW_TYPE.Version,
                DefaultTaskList = TASKLIST,
                DefaultExecutionStartToCloseTimeout = FIVE_HOUR_DURATION,
                DefaultTaskStartToCloseTimeout      = FOUR_HOUR_DURATION
            };

            Client.RegisterWorkflowType(registerWorkflowRequest);

            var registerActivityRequest = new RegisterActivityTypeRequest()
            {
                Name                              = ACTIVITY_TYPE.Name,
                Domain                            = DOMAIN,
                Description                       = "My Description Activity",
                Version                           = ACTIVITY_TYPE.Version,
                DefaultTaskList                   = TASKLIST,
                DefaultTaskHeartbeatTimeout       = ONE_HOUR_DURATION,
                DefaultTaskScheduleToCloseTimeout = TWO_HOUR_DURATION,
                DefaultTaskScheduleToStartTimeout = THREE_HOUR_DURATION,
                DefaultTaskStartToCloseTimeout    = FOUR_HOUR_DURATION
            };

            var registerActivityResponse =
                Client.RegisterActivityType(registerActivityRequest);
        }
示例#5
0
        static void RegisterActivity(string name, string tasklistName)
        {
            // Register activities if it is not already registered
            var listActivityRequest = new ListActivityTypesRequest()
            {
                Domain             = domainName,
                Name               = name,
                RegistrationStatus = RegistrationStatus.REGISTERED
            };

            if (SwfClient.ListActivityTypes(listActivityRequest).ActivityTypeInfos.TypeInfos.FirstOrDefault(
                    x => x.ActivityType.Version == "2.0") == null)
            {
                var request = new RegisterActivityTypeRequest()
                {
                    Name            = name,
                    Domain          = domainName,
                    Description     = "Swf Demo Activities",
                    Version         = "2.0",
                    DefaultTaskList = new TaskList()
                    {
                        Name = tasklistName
                    },                                                       //Worker poll based on this
                    DefaultTaskScheduleToCloseTimeout = "300",
                    DefaultTaskScheduleToStartTimeout = "150",
                    DefaultTaskStartToCloseTimeout    = "450",
                    DefaultTaskHeartbeatTimeout       = "NONE",
                };
                try
                {
                }
                catch (TypeAlreadyExistsException tex)
                {
                    SwfClient.RegisterActivityType(request);
                }
                Console.WriteLine($"INITIATOR: Created Activity Name - {request.Name}");
            }
        }
示例#6
0
        private async Task CreateActivity()
        {
            //Get the list of activities for the specified domain
            ListActivityTypesRequest listActivityRequest = new ListActivityTypesRequest()
            {
                Domain             = this.SwfConfiguration.DomainName,
                Name               = this.SwfConfiguration.ActivityName,
                RegistrationStatus = RegistrationStatus.REGISTERED
            };
            ListActivityTypesResponse listActivityTypesResponse = await this.SwfClient.ListActivityTypesAsync(listActivityRequest);

            //Check if our activity exists
            if (listActivityTypesResponse.ActivityTypeInfos.TypeInfos.Count > 0)
            {
                return;
            }

            //If doesn't exist -> create
            RegisterActivityTypeRequest registerActivityTypeRequest = new RegisterActivityTypeRequest()
            {
                Domain          = this.SwfConfiguration.DomainName,
                Name            = this.SwfConfiguration.ActivityName,
                Description     = this.SwfConfiguration.ActivityDescription,
                Version         = this.SwfConfiguration.ActivityVersion,
                DefaultTaskList = new TaskList()
                {
                    Name = this.SwfConfiguration.ActivityTasksList
                },
                DefaultTaskScheduleToCloseTimeout = this.SwfConfiguration.ScheduleToCloseTimeout,
                DefaultTaskScheduleToStartTimeout = this.SwfConfiguration.ScheduleToStartTimeout,
                DefaultTaskStartToCloseTimeout    = this.SwfConfiguration.StartToCloseTimeout,
                DefaultTaskHeartbeatTimeout       = this.SwfConfiguration.HeartbeatTimeout,
            };

            await this.SwfClient.RegisterActivityTypeAsync(registerActivityTypeRequest);
        }
示例#7
0
        public void CRUDTest()
        {
            var domainName = "sdk-dotnet-crud-" + DateTime.Now.Ticks;
            var regRequest = new RegisterDomainRequest()
            {
                Name        = domainName,
                Description = "A Description",
                WorkflowExecutionRetentionPeriodInDays = "3"
            };

            var regResponse = Client.RegisterDomain(regRequest);

            try
            {
                Sleep(); // Sleep for the eventual consistency
                Assert.IsNotNull(regResponse.ResponseMetadata.RequestId);
                var descRequest = new DescribeDomainRequest()
                {
                    Name = domainName
                };
                var descResponse = Client.DescribeDomain(descRequest);

                Assert.AreEqual(domainName, descResponse.DomainDetail.DomainInfo.Name);
                Assert.AreEqual("A Description", descResponse.DomainDetail.DomainInfo.Description);
                Assert.AreEqual("3", descResponse.DomainDetail.Configuration.WorkflowExecutionRetentionPeriodInDays);
                Assert.IsNotNull(descResponse.DomainDetail.DomainInfo.Status);


                DomainInfo info = null;
                for (int i = 0; i < MaxRetries; i++)
                {
                    Sleep(); // Sleep for the eventual consistency
                    var listDomainResponse = Client.ListDomains(
                        new ListDomainsRequest()
                    {
                        RegistrationStatus = descResponse.DomainDetail.DomainInfo.Status
                    });

                    Assert.IsTrue(listDomainResponse.DomainInfos.Infos.Count > 0);
                    info = listDomainResponse.DomainInfos.Infos.FirstOrDefault(x => string.Equals(x.Name, domainName));
                    if (info != null)
                    {
                        break;
                    }
                }
                Assert.IsNotNull(info);
                Assert.IsNotNull(info.Status);


                var activityDescription = "My Description Activity" + DateTime.Now.Ticks;
                var regActivityRequest  = new RegisterActivityTypeRequest()
                {
                    Name            = "My Activity",
                    Domain          = domainName,
                    Description     = activityDescription,
                    Version         = "1.0",
                    DefaultTaskList = new TaskList()
                    {
                        Name = "ImportantTasks"
                    },
                    DefaultTaskHeartbeatTimeout       = ONE_HOUR_DURATION,
                    DefaultTaskScheduleToCloseTimeout = TWO_HOUR_DURATION,
                    DefaultTaskScheduleToStartTimeout = THREE_HOUR_DURATION,
                    DefaultTaskStartToCloseTimeout    = FOUR_HOUR_DURATION
                };

                var regActivityResponse = Client.RegisterActivityType(regActivityRequest);
                Assert.IsNotNull(regActivityResponse.ResponseMetadata.RequestId);
                try
                {
                    Sleep(); // Sleep for the eventual consistency
                    var descActivityTypeRequest = new DescribeActivityTypeRequest()
                    {
                        Domain       = domainName,
                        ActivityType = new ActivityType()
                        {
                            Name    = "My Activity",
                            Version = "1.0"
                        }
                    };

                    var descActivityTypeResponse = Client.DescribeActivityType(descActivityTypeRequest);

                    Assert.AreEqual(ONE_HOUR_DURATION, descActivityTypeResponse.ActivityTypeDetail.Configuration.DefaultTaskHeartbeatTimeout);
                    Assert.AreEqual(TWO_HOUR_DURATION, descActivityTypeResponse.ActivityTypeDetail.Configuration.DefaultTaskScheduleToCloseTimeout);
                    Assert.AreEqual(THREE_HOUR_DURATION, descActivityTypeResponse.ActivityTypeDetail.Configuration.DefaultTaskScheduleToStartTimeout);
                    Assert.AreEqual(FOUR_HOUR_DURATION, descActivityTypeResponse.ActivityTypeDetail.Configuration.DefaultTaskStartToCloseTimeout);

                    ListActivityTypesResponse listActivityResponse = null;
                    for (int i = 0; i < MaxRetries; i++)
                    {
                        Sleep(); // Sleep for the eventual consistency
                        listActivityResponse = Client.ListActivityTypes(
                            new ListActivityTypesRequest()
                        {
                            Domain             = domainName,
                            RegistrationStatus = descActivityTypeResponse.ActivityTypeDetail.TypeInfo.Status
                        });
                        if (listActivityResponse.ActivityTypeInfos.TypeInfos.Count > 0)
                        {
                            break;
                        }
                    }
                    Assert.IsNotNull(listActivityResponse);
                    Assert.IsTrue(listActivityResponse.ActivityTypeInfos.TypeInfos.Count > 0);
                    var acInfo = listActivityResponse.ActivityTypeInfos.TypeInfos.FirstOrDefault(x => x.Description == activityDescription);
                    Assert.IsNotNull(acInfo);
                }
                finally
                {
                    var depActivityRequest = new DeprecateActivityTypeRequest()
                    {
                        Domain       = domainName,
                        ActivityType = new ActivityType()
                        {
                            Name    = "My Activity",
                            Version = "1.0"
                        }
                    };

                    var depActivityTypeResponse = Client.DeprecateActivityType(depActivityRequest);
                }

                var workflowDescription = "My Workflow Description" + DateTime.Now.Ticks;
                var regWorkflowRequest  = new RegisterWorkflowTypeRequest()
                {
                    Name            = "My Workflow",
                    Domain          = domainName,
                    Description     = workflowDescription,
                    Version         = "1.0",
                    DefaultTaskList = new TaskList()
                    {
                        Name = "ImportantTasks"
                    },
                    DefaultExecutionStartToCloseTimeout = THREE_HOUR_DURATION,
                    DefaultTaskStartToCloseTimeout      = FOUR_HOUR_DURATION
                };

                var regWorkflowResponse = Client.RegisterWorkflowType(regWorkflowRequest);
                try
                {
                    Sleep(); // Sleep for the eventual consistency
                    var descWorkFlowRequest = new DescribeWorkflowTypeRequest()
                    {
                        Domain       = domainName,
                        WorkflowType = new WorkflowType()
                        {
                            Name    = "My Workflow",
                            Version = "1.0"
                        }
                    };
                    var descWorkflowResponse = Client.DescribeWorkflowType(descWorkFlowRequest);

                    Assert.AreEqual("My Workflow", descWorkflowResponse.WorkflowTypeDetail.TypeInfo.WorkflowType.Name);
                    Assert.AreEqual("1.0", descWorkflowResponse.WorkflowTypeDetail.TypeInfo.WorkflowType.Version);
                    Assert.AreEqual(THREE_HOUR_DURATION, descWorkflowResponse.WorkflowTypeDetail.Configuration.DefaultExecutionStartToCloseTimeout);
                    Assert.AreEqual(FOUR_HOUR_DURATION, descWorkflowResponse.WorkflowTypeDetail.Configuration.DefaultTaskStartToCloseTimeout);
                    Assert.AreEqual("ImportantTasks", descWorkflowResponse.WorkflowTypeDetail.Configuration.DefaultTaskList.Name);

                    ListWorkflowTypesResponse listWorkflowResponse = null;
                    for (int retries = 0; retries < 5; retries++)
                    {
                        Thread.Sleep(1000 * retries);
                        listWorkflowResponse = Client.ListWorkflowTypes(
                            new ListWorkflowTypesRequest()
                        {
                            Domain             = domainName,
                            RegistrationStatus = descWorkflowResponse.WorkflowTypeDetail.TypeInfo.Status
                        });

                        if (listWorkflowResponse.WorkflowTypeInfos.TypeInfos.Count > 0)
                        {
                            break;
                        }
                    }

                    Assert.IsTrue(listWorkflowResponse.WorkflowTypeInfos.TypeInfos.Count > 0);
                    var wfInfo = listWorkflowResponse.WorkflowTypeInfos.TypeInfos.FirstOrDefault(x => x.Description == workflowDescription);
                    Assert.IsNotNull(wfInfo);
                }
                finally
                {
                    var depWorkflowRequest = new DeprecateWorkflowTypeRequest()
                    {
                        Domain       = domainName,
                        WorkflowType = new WorkflowType()
                        {
                            Name    = "My Workflow",
                            Version = "1.0"
                        }
                    };
                    var depWorkflowTypeResponse = Client.DeprecateWorkflowType(depWorkflowRequest);
                    Assert.IsNotNull(depWorkflowTypeResponse.ResponseMetadata.RequestId);
                }
            }
            finally
            {
                var depRequest = new DeprecateDomainRequest()
                {
                    Name = domainName
                };
                var depResponse = Client.DeprecateDomain(depRequest);
                Assert.IsNotNull(depResponse.ResponseMetadata.RequestId);
            }
        }