Exemple #1
0
        /// <summary>
        /// Method called when a process token executes the step.
        /// </summary>
        public ExitType Execute(IStepExecutionContext context)
        {
            IState _timenow  = _propTimenow.GetState(context);
            double timenow   = Convert.ToDouble(_timenow.StateValue);
            IState _salida   = _propSalida.GetState(context);
            double salida    = Convert.ToDouble(_salida.StateValue);
            IState _aux      = _propAux.GetState(context);
            double aux       = Convert.ToDouble(_aux.StateValue);
            IState _idcamion = _propIdcamion.GetState(context);
            double idcamion  = Convert.ToDouble(_idcamion.StateValue);

            SerializarElement sr = new SerializarElement();

            if (File.Exists(sr.SerializationFile))
            {
                Vect v = sr.deserializa();
                vectores = sr.deserializa();

                vectores.MipYc = v.MipYc;
                vectores.MipYv = v.MipYv;
                vectores.MipTc = v.MipTc;
                vectores.MipTv = v.MipTv;

                //Dinamico
                vectores.Din1   = v.Din1;
                vectores.DesCam = v.DesCam;
                vectores.Fila   = v.Fila;

                //LP
                vectores.TCV           = v.TCV;
                vectores.TCC           = v.TCC;
                vectores.TCj           = v.TCj;
                vectores.TDi           = v.TDi;
                vectores.Destij        = v.Destij;
                vectores.Dj            = v.Dj;
                vectores.Uj            = v.Uj;
                vectores.Ui            = v.Ui;
                vectores.RLi           = v.RLi;
                vectores.RUi           = v.RUi;
                vectores.PlYc          = v.PlYc;
                vectores.PlYv          = v.PlYv;
                vectores.PlTc          = v.PlTc;
                vectores.PlTv          = v.PlTv;
                vectores.PlTcmalo      = v.PlTcmalo;
                vectores.Mine          = v.Mine;
                vectores.Mineralocado  = v.Mineralocado;
                vectores.Lastrealocado = v.Lastrealocado;
            }


            /*
             *              vectores.PlTc[30, 0]; #flujo pala 1
             *              vectores.PlTc[30, 1]; #flujo pala 2
             *              etc etc
             *
             *              vectores.Din1[x, 4] = pala1; #Ultimo tiempo que pala 1 tuvo una asignacion
             *              vectores.Din1[x + 30, 4] = pala2; #Ultimo tiempo que pala 2 tuvo una asignacion
             *              vectores.Din1[x + 60, 4] = pala3; etc
             *              vectores.Din1[x + 90, 4] = pala4;
             *              vectores.Din1[x + 120, 4] = pala5;
             *              vectores.Din1[x + 150, 4] = pala6;
             *              vectores.Din1[x + 180, 4] = pala7;
             *              vectores.Din1[x + 210, 4] = pala8;
             *              vectores.Din1[x + 240, 4] = pala9;
             *              vectores.Din1[x + 270, 4] = pala10;
             *              vectores.Din1[x + 300, 4] = pala11;
             *              vectores.Din1[x + 330, 4] = pala12;
             *              vectores.Din1[x + 360, 4] = pala13;
             *              vectores.Din1[x + 390, 4] = pala14;
             *              vectores.Din1[x + 420, 4] = pala15;
             *              vectores.Din1[x + 450, 4] = pala16;
             *              vectores.Din1[x + 480, 4] = pala17;
             *              vectores.Din1[x + 510, 4] = pala18;
             *              vectores.Din1[x + 540, 4] = pala19;
             *              vectores.Din1[x + 570, 4] = pala20;
             *
             *              timenow; #tiempo actual
             *
             *
             *
             */
            int Npalas  = 20;
            int NSitios = 30;

            double[] tij_op   = new double[Npalas];
            double[] desv_tij = new double[Npalas];
            double[] Puntaje  = new double[Npalas];
            double   Pmax     = -10000000000;
            double   Destino  = 0;

            int[]  Candidata = new int[Npalas];
            double botadero;

            for (int j = 0; j < Npalas; j++)
            {
                Candidata[j] = 0;
                if (vectores.PlYv[Convert.ToInt32(vectores.DesCam[Convert.ToInt32(idcamion) - 1, 2] - 1), j] > 0 && vectores.Uj[j] > 0)
                {
                    Candidata[j] = 1;
                }
            }
            for (int j = 0; j < Npalas; j++)
            {
                if (Candidata[j] > 0)
                {
                    double FlujoCamionesCargadoTotal = 0;
                    for (int i = 0; i < NSitios; i++)
                    {
                        FlujoCamionesCargadoTotal = FlujoCamionesCargadoTotal + vectores.PlYv[i, j];
                    }
                    tij_op[j]   = 1 / FlujoCamionesCargadoTotal;
                    desv_tij[j] = (timenow - vectores.Din1[30 * j, 4]) - tij_op[j];
                    Puntaje[j]  = desv_tij[j] / tij_op[j];
                    if (Puntaje[j] > Pmax)
                    {
                        Pmax    = Puntaje[j];
                        Destino = j + 1;
                    }
                }
            }

            if (Destino == 4 || Destino == 5 || Destino == 6 || Destino == 10 || Destino == 17 || Destino == 18)
            {
                botadero = 1;
            }

            else if (Destino == 7 || Destino == 8 || Destino == 12)
            {
                botadero = 4;
            }

            else if (Destino == 1 || Destino == 2 || Destino == 3 || Destino == 11)
            {
                botadero = 8;
            }

            else
            {
                Destino  = 0;
                botadero = 3;
            }
            _salida.StateValue = Destino;
            _aux.StateValue    = botadero;

            sr.serializa(vectores);

            sr.closeStream();
            return(ExitType.FirstExit);
        }
Exemple #2
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Console.WriteLine(Message);
     return(ExecutionResult.Next());
 }
Exemple #3
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Console.WriteLine("Doing Task 2");
     throw new Exception();
 }
Exemple #4
0
 public Task <ExecutionResult> RunAsync(IStepExecutionContext context)
 {
     return(Task.FromResult(Run(context)));
 }
Exemple #5
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Console.WriteLine("Hello world");
     return(ExecutionResult.Next());
 }
Exemple #6
0
 public override ExecutionResult Run(IStepExecutionContext context) => context.PersistenceData == null
                                                                           ? ExecutionResult.Sleep(Period,
                                                                                                   new object())
                                                                           : ExecutionResult.Next();
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Console.WriteLine($"Doing {nameof(TaskA)}");
     return(ExecutionResult.Next());
 }
Exemple #8
0
 public override async Task <ExecutionResult> RunAsync(IStepExecutionContext context)
 {
     Output = (Input1 + Input2);
     return(ExecutionResult.Next());
 }
        public override async Task Invoke(IStepExecutionContext context = null)
        {
            var messageRepository  = ResolverFactory.Resolve <MessageRepository>();
            var reporterRepository = ResolverFactory.Resolve <ReporterRepository>();
            var messageDeliveryChannelRepository = ResolverFactory.Resolve <MessageDeliveryChannelRepository>();
            var logger      = ResolverFactory.Resolve <ILogger>("SyncService");
            var errorLogger = ResolverFactory.Resolve <ILogger>("Error");

            try
            {
                var undeliverMessages      = messageRepository.GetUndeliveredMessages(100, 0);
                var linkedReportModels     = messageRepository.GetLinkedReports(undeliverMessages.Select(m => m.Id));
                var reportModels           = reporterRepository.GetByIds(linkedReportModels.Select(r => r.ReporterId.ToString()).Distinct());
                var linkedDeliveryChannels = reporterRepository.GetLinkedDeliveryChannels(reportModels.Select(r => r.Id.ToString()));
                var deliveryChannelModels  = messageDeliveryChannelRepository.GetByIds(linkedDeliveryChannels.Select(c => c.DeliveryChannelId.ToString()).Distinct());
                // Order same same channels, these one should be run in sequence, e.g: slack cannot be send in parallel
                var channelDict = new Dictionary <string, List <MessageDeliveryChannelModel> >();
                foreach (var channel in deliveryChannelModels)
                {
                    if (!channelDict.ContainsKey(channel.ChannelId))
                    {
                        channelDict.Add(channel.ChannelId, new List <MessageDeliveryChannelModel> {
                        });
                    }

                    channelDict[channel.ChannelId].Add(channel);
                }

                await Task.Run(() => Parallel.ForEach(channelDict, async(c, i) =>
                {
                    foreach (var channel in c.Value)
                    {
                        var relatedReports  = reportModels.Where(rp => linkedDeliveryChannels.Any(dc => dc.DeliveryChannelId == channel.Id));
                        var relatedMessages = undeliverMessages.Where(m => linkedReportModels.Any(rm => rm.MessageId == m.Id && relatedReports.Any(r => r.Id == rm.ReporterId)));
                        var messageDic      = new Dictionary <MessageType, List <MessageModel> >();
                        foreach (var relatedMessage in relatedMessages)
                        {
                            if (!messageDic.ContainsKey(relatedMessage.MessageType))
                            {
                                messageDic.Add(relatedMessage.MessageType, new List <MessageModel>());
                            }

                            messageDic[relatedMessage.MessageType].Add(relatedMessage);
                        }
                        var options          = messageDeliveryChannelRepository.LoadOptions(channel.Id.ToString(), channel.EntityType);
                        var delieveryChannel = channels.FirstOrDefault(cc => cc.Id == channel.ChannelId);
                        delieveryChannel.SetOptions(options.Select(o => new OptionItem {
                            Name = o.Key, Value = o.Value
                        }));
                        delieveryChannel.OnReport(s => logger.Information(s));
                        foreach (var dict in messageDic)
                        {
                            if (dict.Value == null || dict.Value.Count == 0)
                            {
                                continue;
                            }
                            try
                            {
                                // send bulk messages in sequence because of MessageType is different
                                await delieveryChannel.DeliverMessage(string.Join("\n", dict.Value.Select(v => v.Message)), dict.Key);
                            }
                            finally
                            {
                                // Update the message as repotered no matter what
                                messageRepository.SetMessagesAsReported(dict.Value.Select(v => v.Id));
                            }
                        }
                    }
                }));
            }
            catch (Exception ex)
            {
                errorLogger.Error(ex, ex.Message);
                throw;
            }
            finally
            {
                ResolverFactory.Release(logger);
                ResolverFactory.Release(errorLogger);
                logger      = null;
                errorLogger = null;
            }
        }
Exemple #10
0
 public override ExecutionPipelineDirective BeforeExecute(WorkflowExecutorResult executorResult, IStepExecutionContext context, ExecutionPointer executionPointer, IStepBody body)
 {
     if (executionPointer.EventPublished)
     {
         if (body is ISubscriptionBody)
         {
             (body as ISubscriptionBody).EventData = executionPointer.EventData;
         }
     }
     return(ExecutionPipelineDirective.Next);
 }
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Console.WriteLine("Goodbye World!");
     return(ExecutionResult.Next());
 }
Exemple #12
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Console.WriteLine("Doing Task 3");
     //throw new Exception();
     return(ExecutionResult.Next());
 }
        public override async Task Invoke(IStepExecutionContext context = null)
        {
            var executeAt       = DateTime.Now.ToUnixTimestamp();
            var firstQueuedItem = entityRepository.GetCurrentQueuedItems();

            if (firstQueuedItem == null)
            {
                return;
            }
            IIndexModel              indexModel = null;
            IndexItemModel           itemModel  = null;
            IIndexer                 indexer    = null;
            IPusher                  pusher     = null;
            IEnumerable <OptionItem> options    = null;

            if (firstQueuedItem.TargetEntityType == EntityType.Entity)
            {
                indexModel = entityRepository.GetById(firstQueuedItem.TargetEntityId.ToString());
                options    = entityRepository.LoadOptions(indexModel.Id.ToString()).Select(o => new OptionItem {
                    Name = o.Key, Value = o.Value
                });
                var sourceConnection      = connectionRepository.GetById(indexModel.SourceConnectionId.ToString());
                var destinationConnection = connectionRepository.GetById(indexModel.DestinationConnectionId.ToString());
                indexer = entityIndexers.FirstOrDefault(i => i.IsImplemented(indexModel.SourceProcessorId, sourceConnection.ProviderId));
                pusher  = entityPushers.FirstOrDefault(p => p.IsImplemented(indexModel.DestinationProcessorId, destinationConnection.ProviderId));
            }
            else
            {
                var attributeModel = attributeRepository.GetById(firstQueuedItem.TargetEntityId.ToString());
                indexModel = attributeModel;
                var entityModel = entityRepository.GetById(attributeModel.EntityId.ToString());
                options = attributeRepository.LoadOptions(attributeModel.Id.ToString()).Select(o => new OptionItem {
                    Name = o.Key, Value = o.Value
                });
                var sourceConnection      = connectionRepository.GetById(attributeModel.SourceConnectionId.ToString());
                var destinationConnection = connectionRepository.GetById(attributeModel.DestinationConnectionId.ToString());
                indexer = attributeIndexers.FirstOrDefault(i => i.IsImplemented(attributeModel.SourceProcessorId, entityModel.SourceProcessorId, sourceConnection.ProviderId));
                pusher  = attributePushers.FirstOrDefault(p => p.IsImplemented(attributeModel.DestinationProcessorId, entityModel.DestinationProcessorId, destinationConnection.ProviderId));
            }

            indexer.SetIndex(indexModel);
            indexer.SetOptions(options);
            pusher.SetIndex(indexModel);
            pusher.SetOptions(options);
            pusherManager.SetIndex(indexModel);
            pusherManager.OnReport(s => Logger.Information(s));
            pusherManager.SetIndexer(indexer);
            pusherManager.SetPusher(pusher);

            try
            {
                itemModel = entityRepository.GetIndexedItemById(indexModel, firstQueuedItem.TargetItemId.ToString());
                var pushState = await pusherManager.PushItem(itemModel);

                var queueItemStatus = firstQueuedItem.Status == PushState.None ? PushState.Success : firstQueuedItem.Status;
                var messageId       = messageRepository.Create(new
                {
                    Message     = string.Join("\n", pusherManager.GetReportMessages()),
                    CreatedAt   = DateTime.Now.ToUnixTimestamp(),
                    MessageType = MessageType.Information,
                    Status      = MessageStatus.None
                });
                queueItemStatus = queueItemStatus & pushState;
                if ((pushState & PushState.Success) <= 0)
                {
                    queueItemStatus = (queueItemStatus | PushState.Success) ^ (PushState.Success);
                }
                queueItemRepository.Update(firstQueuedItem.Id.ToString(), new
                {
                    UpdatedAt  = DateTime.Now.ToUnixTimestamp(),
                    ExecuteAt  = executeAt,
                    ExecutedAt = DateTime.Now.ToUnixTimestamp(),
                    MessageId  = messageId,
                    Status     = queueItemStatus
                });
            }
            catch (Exception ex)
            {
                var messages  = $@"Queue item (Id: {firstQueuedItem.Id}) failed to run. 
Addtional information:
```{JsonConvert.SerializeObject(indexModel, Formatting.Indented)}```
Progress: 
```{string.Join("\n - ", pusherManager.GetReportMessages())}```
Exception: 
```{ex}```";
                var messageId = messageRepository.Create(new
                {
                    Message     = messages,
                    CreatedAt   = DateTime.Now.ToUnixTimestamp(),
                    MessageType = MessageType.Error,
                    Status      = MessageStatus.None
                });

                queueItemRepository.Update(firstQueuedItem.Id.ToString(), new
                {
                    UpdatedAt  = DateTime.Now.ToUnixTimestamp(),
                    ExecuteAt  = executeAt,
                    ExecutedAt = DateTime.Now.ToUnixTimestamp(),
                    MessageId  = messageId,
                    Status     = (firstQueuedItem.Status | PushState.UnexpectedError | PushState.Failed | PushState.Success) ^ PushState.Success, // remove success
                });
                throw;
            }
        }
Exemple #14
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     _myService.DoTheThings();
     return(ExecutionResult.Next());
 }
 public override ExecutionPipelineDirective BeforeExecute(WorkflowExecutorResult executorResult, IStepExecutionContext context, ExecutionPointer executionPointer, IStepBody body)
 {
     if (executionPointer.EventPublished)
     {
         if ((body is UserStep) && (executionPointer.EventData is UserAction))
         {
             (body as UserStep).UserAction = (executionPointer.EventData as UserAction);
             executionPointer.ExtensionAttributes["ActionUser"] = (executionPointer.EventData as UserAction).User;
         }
     }
     return(ExecutionPipelineDirective.Next);
 }
Exemple #16
0
 protected virtual void RunImpl(IStepExecutionContext context)
 {
 }
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Output = (Input1 + Input2);
     return(ExecutionResult.Next());
 }
Exemple #18
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     throw new NotImplementedException();
 }
Exemple #19
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Value2 = Value1 + 1;
     return(ExecutionResult.Next());
 }
Exemple #20
0
        private object GetSwitchOutcome(IStepExecutionContext context)
        {
            var switchPointer = context.Workflow.ExecutionPointers.First(x => x.Children.Contains(context.ExecutionPointer.Id));

            return(switchPointer.Outcome);
        }
Exemple #21
0
        public sealed override async Task <ExecutionResult> RunAsync(IStepExecutionContext context)
        {
            ResponseObject <TResPayload> resObj;

            try
            {
                switch (MethodType)
                {
                case ERestMethodType.GET:
                    resObj = await GetAsync <TResPayload>(Method);

                    break;

                case ERestMethodType.POST:
                    var reqBody = RequestBodyObj.Serialize();
                    resObj = await PostAsync <TResPayload>(Method, reqBody);

                    break;

                case ERestMethodType.PUT:
                    // TODO: implement
                    // ..
                    throw new NotImplementedException("TODO");

                case ERestMethodType.DELETE:
                    // TODO: implement
                    // ..
                    throw new NotImplementedException("TODO");

                default:
                    throw new IndexOutOfRangeException($"Unknown {nameof(MethodType)}={MethodType}.");
                }
            }
            catch (Exception e)
            {
                string method;
                switch (MethodType)
                {
                case ERestMethodType.GET:
                    method = nameof(GetAsync);
                    break;

                case ERestMethodType.POST:
                    method = nameof(GetAsync);
                    break;

                case ERestMethodType.PUT:
                    // TODO: implement
                    // ..
                    throw new NotImplementedException("TODO");

                case ERestMethodType.DELETE:
                    // TODO: implement
                    // ..
                    throw new NotImplementedException("TODO");

                default:
                    throw new IndexOutOfRangeException($"Unknown {nameof(MethodType)}={MethodType}.");
                }

                throw new WorkflowAbortException($"Exception in {method} method.", e);
            }

            Debug.Assert(resObj != null);
            if (resObj.IsOk == false)
            {
                throw new WorkflowAbortException(resObj.ToString());
            }

            ResponsePayload = resObj.Payload;

            return(ExecutionResult.Next());
        }
 public virtual ExecutionPipelineDirective BeforeExecute(WorkflowExecutorResult executorResult, IStepExecutionContext context, ExecutionPointer executionPointer, IStepBody body)
 {
     return(ExecutionPipelineDirective.Next);
 }
Exemple #23
0
 public abstract ExecutionResult Run(IStepExecutionContext context);
 public virtual void AfterExecute(WorkflowExecutorResult executorResult, IStepExecutionContext context, ExecutionResult stepResult, ExecutionPointer executionPointer)
 {
 }
        private void ProcessInputs(WorkflowInstance workflow, WorkflowStep step, IStepBody body, IStepExecutionContext context)
        {
            //TODO: Move to own class
            foreach (var input in step.Inputs)
            {
                var    member        = (input.Target.Body as MemberExpression);
                object resolvedValue = null;

                switch (input.Source.Parameters.Count)
                {
                case 1:
                    resolvedValue = input.Source.Compile().DynamicInvoke(workflow.Data);
                    break;

                case 2:
                    resolvedValue = input.Source.Compile().DynamicInvoke(workflow.Data, context);
                    break;

                default:
                    throw new ArgumentException();
                }

                step.BodyType.GetProperty(member.Member.Name).SetValue(body, resolvedValue);
            }
        }
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     return(_body.Invoke(context));
 }
Exemple #27
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Console.WriteLine("Doing Task C");
     return(ExecutionResult.Next());
 }
Exemple #28
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     return(ExecutionResult.Next());
 }
Exemple #29
0
 private void Assign(object data, IStepBody step, IStepExecutionContext context)
 {
     _action.Invoke((TStepBody)step, (TData)data);
 }
Exemple #30
0
 public override ExecutionResult Run(IStepExecutionContext context)
 {
     Step2Ticker++;
     CheckSum += Convert.ToInt32(context.Item);
     return(ExecutionResult.Next());
 }