Esempio n. 1
0
        public void Success()
        {
            // Update Job: Add Message
            Turbine.Consumer.Contract.Behaviors.IConsumerContext ctx = Turbine.Consumer.AppUtility.GetConsumerContext();
            JobStateChange msg = new JobStateChange();

            msg.JobId = job.Id;
            msg.State = "success";
            SimpleMessageConnect.Send(msg);
        }
Esempio n. 2
0
        public void Warning(string p)
        {
            // Update Job: Add Message
            Turbine.Consumer.Contract.Behaviors.IConsumerContext ctx = Turbine.Consumer.AppUtility.GetConsumerContext();
            JobStateChange msg = new JobStateChange();

            msg.JobId   = job.Id;
            msg.State   = "warning";
            msg.Message = p;
            SimpleMessageConnect.Send(msg);
        }
Esempio n. 3
0
        public void Message(string s)
        {
            // Update Job: Add Message
            Turbine.Consumer.Contract.Behaviors.IConsumerContext ctx = Turbine.Consumer.AppUtility.GetConsumerContext();
            var msg = new JobAddMessage();

            msg.Id        = Guid.NewGuid();
            msg.Message   = s;
            msg.Timestamp = DateTime.UtcNow;
            msg.JobId     = job.Id;

            SimpleMessageConnect.Send(msg);
        }
Esempio n. 4
0
        public Turbine.Data.Contract.Behaviors.IProcess Setup()
        {
            // Update Job: Add Message
            Turbine.Consumer.Contract.Behaviors.IConsumerContext ctx = Turbine.Consumer.AppUtility.GetConsumerContext();
            JobStateChange msg = new JobStateChange();

            msg.JobId = job.Id;
            msg.State = "setup";
            SimpleMessageConnect.Send(msg);
            // NOTE: Purpose is to delete message from submission queue after it's been 'claimed'
            setupCallbackCheck(setupCallback(setupCBRequest));

            return(new Process(job.Id));
        }
Esempio n. 5
0
 public void AddStdout(string data)
 {
     Turbine.Consumer.Contract.Behaviors.IConsumerContext ctx = Turbine.Consumer.AppUtility.GetConsumerContext();
     //var msg = AddStdoutMessage(jobid, ctx.Id, data);
 }
        /// <summary>
        /// ReceiveRegistration:  Response occurs on a dedicated queue so all messages not
        /// conforming to expected result are deleted and ignored.
        /// </summary>
        /// <param name="registerRequest"></param>
        /// <returns></returns>
        internal static RegistrationInfo ReceiveRegistration(RPCEnvelope registerRequest)
        {
            Turbine.Consumer.Contract.Behaviors.IConsumerContext ctx = Turbine.Consumer.AppUtility.GetConsumerContext();
            IAWSContext awsCtx = Turbine.Consumer.AWS.AppUtility.GetContext();

            var queue = Amazon.AWSClientFactory.CreateAmazonSQSClient(
                awsCtx.AccessKey, awsCtx.SecretKey,
                new Amazon.SQS.AmazonSQSConfig().WithServiceURL(awsCtx.Region)
                );

            Amazon.SQS.Model.ReceiveMessageResponse receiveMsgResponse;
            var entries = new List <Amazon.SQS.Model.DeleteMessageBatchRequestEntry>();

            // NOTE: Should only be 1 message on queue, but grab 'all' and delete 'all'.
            do
            {
                Debug.WriteLine(String.Format("Register: Poll Queue {0} for response", registerRequest.ResponseQueueUrl),
                                registerRequest.Operation);
                receiveMsgResponse = queue.ReceiveMessage(new Amazon.SQS.Model.ReceiveMessageRequest()
                                                          .WithWaitTimeSeconds(20)
                                                          .WithMaxNumberOfMessages(10)
                                                          .WithQueueUrl(registerRequest.ResponseQueueUrl));
            } while (receiveMsgResponse.IsSetReceiveMessageResult() == false || receiveMsgResponse.ReceiveMessageResult.IsSetMessage() == false);

            // Response Message Should Have ResponseQueue & SNS Topic
            List <Amazon.SQS.Model.Message> msgResultMsg = receiveMsgResponse.ReceiveMessageResult.Message;

            Debug.WriteLine(String.Format("Count {0} Messages found", msgResultMsg.Count), registerRequest.Operation);

            if (msgResultMsg.Count == 0)
            {
                return(null);
            }

            RegistrationInfo regInfo = null;

            //Dictionary<string, Object> d;

            // NOTE: Very inefficient, double parsing etc.
            // Consider typing at the RPCEnvelope level
            foreach (Amazon.SQS.Model.Message smsg in msgResultMsg)
            {
                Debug.WriteLine(String.Format("Messages found {0}", smsg.Body), registerRequest.Operation);
                entries.Add(new Amazon.SQS.Model.DeleteMessageBatchRequestEntry()
                            .WithId(smsg.MessageId)
                            .WithReceiptHandle(smsg.ReceiptHandle));
                RPCEnvelope registerResponse = null;
                JToken      token            = JObject.Parse(smsg.Body);
                JToken      jmsg             = token.SelectToken("Message");

                try
                {
                    registerResponse = JsonConvert.DeserializeObject <RPCEnvelope>(smsg.Body);
                    //d = JsonConvert.DeserializeObject<Dictionary<string, Object>>(jmsg.ToString());
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(String.Format("RPCEnvelope ignore exception deserializing: {0}", ex),
                                    registerRequest.Operation);
                    continue;
                }

                //ack = (Turbine.Orchestrator.AWS.Data.Contract.Messages.RegistrationInfo)rsp.Message;
                var serializer = new Newtonsoft.Json.JsonSerializer();
                Newtonsoft.Json.JsonReader reader = jmsg.CreateReader();
                //var content = d["Message"].ToString();
                var content = jmsg.ToString();
                try
                {
                    regInfo = JsonConvert.DeserializeObject <RegistrationInfo>(content);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(String.Format("RegistrationInfo ignore exception deserializing: {0}", ex),
                                    registerRequest.Operation);
                    continue;
                }

                //registerRequest.Message = regInfo;
                if (regInfo.RequestId != registerRequest.Message.Id)
                {
                    var s = String.Format("Mismatch Request-Response Id : {0} != {1}", regInfo.Id, registerRequest.Message.Id);
                    Debug.WriteLine(s, regInfo.GetType().Name);
                    continue;
                }
                break;
            }

            if (entries.Count > 0)
            {
                // Delete all messages found
                var delMsgBatchRsp = queue.DeleteMessageBatch(
                    new Amazon.SQS.Model.DeleteMessageBatchRequest()
                    .WithQueueUrl(registerRequest.ResponseQueueUrl)
                    .WithEntries(entries.ToArray <Amazon.SQS.Model.DeleteMessageBatchRequestEntry>()));
            }
            return(regInfo);
        }