public Task Handle(FactoryProvisionedEvent evnt)
        {
            var factory = _state.GetFactory(evnt.EntityId);

            factory.State      = FactoryState.Starting;
            factory.ResourceId = evnt.ResourceId;
            return(Task.CompletedTask);
        }
Exemple #2
0
 public async Task OnEndReached(string topic, int partition, long offset)
 {
     foreach (var factory in _fakeFactories)
     {
         _logger.Information($"Factory created: {factory.Key} but not provisioned, provisioning fake resource in 3 seconds..");
         var response = new FactoryProvisionedEvent(factory.Key, factory.Value.Initiator.ToPlayer());
         await Task.Delay(3000).ContinueWith((_) => _producer.Produce(KafkaTopics.EVENTS, response));
     }
 }
Exemple #3
0
        public async Task <IEnumerable <IEvent> > Evaluate(State state)
        {
            var changeSet = new List <IEvent>();

            // For all factories in a creation state, we need to provision resources
            var factoriesToProvision = state.Factories
                                       .Where(f => f.State == FactoryState.Creating)
                                       .ToList();

            _logger.Information($"Provisioning {factoriesToProvision.Count()} factories..");
            foreach (var factory in factoriesToProvision)
            {
                try
                {
                    var result = await _provisioner.ProvisionFactory(factory);

                    var evnt = new FactoryProvisionedEvent(factory.FactoryId, null)
                    {
                        ResourceId = result.ResourceId,
                        Port       = result.Port,
                        Host       = result.Host,
                    };
                    factory.State = FactoryState.Starting;
                    _logger.Information($"Successfully provisioned resources for factory {factory.FactoryId}, producing event..");
                    changeSet.Add(evnt);
                }
                catch (Exception e)
                {
                    _logger.Error(e, $"Could not provision resources for factory {factory.FactoryId}!");
                }
            }

            // For all factories in a destroying state, we need to decommission resources
            var factoriesToDecommission = state.Factories
                                          .Where(f => f.State == FactoryState.Destroying)
                                          .ToList();

            _logger.Information($"Decommissioning {factoriesToDecommission.Count()} factories..");
            foreach (var factory in factoriesToDecommission)
            {
                try
                {
                    await _provisioner.DecommissionFactory(factory);

                    var evnt = new FactoryDecommissionedEvent(factory.FactoryId, null);
                    factory.State = FactoryState.Destroyed;
                    _logger.Information($"Successfully decommissioned resources for factory {factory.FactoryId}, producing event..");
                    changeSet.Add(evnt);
                }
                catch (Exception e)
                {
                    _logger.Error(e, $"Could not decommission resources for factory {factory.FactoryId}!");
                }
            }

            return(changeSet);
        }
        public Task Handle(FactoryProvisionedEvent evnt)
        {
            var factory = _dbContext.Factories.FirstOrDefault(f => f.FactoryId == evnt.EntityId);

            if (factory != null)
            {
                factory.State = FactoryState.Starting;
                factory.Port  = evnt.Port;
            }
            return(Task.CompletedTask);
        }