Beispiel #1
0
        static void Main()
        {
            if (!VerifyConfiguration())
            {
                Console.ReadLine();
                return;
            }

            // Init.
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["AzureWebJobsStorage"].ConnectionString);

            Storage.Init(storageAccount);
            InputImageModel.Init(storageAccount);
            ImageProcessJobModel.Init(storageAccount);

            // App Serviceでは必要なくできる。d:\home参照
            // Utils.Storage.DownLoadContents(storageAccount);

            // example..
            // System.IO.Stream stream = Storage.DownloadFileToStream("hoge.jpg");
            // ImageProcessor.execute(stream);
            //
            // Console.WriteLine("Init queue");
            // Init(storageAccount);

            Console.WriteLine("Waiting queue. run and block..");
            JobHostConfiguration config = new JobHostConfiguration();

            config.Queues.MaxPollingInterval = TimeSpan.FromMilliseconds(500);
            JobHost host = new JobHost(config);

            host.RunAndBlock();
        }
Beispiel #2
0
        /// <summary>
        /// This function will be invoked when a message ends up in the poison queue
        /// </summary>
        public static void BindToPoisonQueue([QueueTrigger(QueueName.JOB_QUEUE_NAME)] Order order, TextWriter log)
        {
            // 1. read job
            ImageProcessJobEntity jobEntity = ImageProcessJobModel.Get(order.OrderId);

            if (jobEntity == null)
            {
                Console.WriteLine("order is null");
                return;
            }
            if (jobEntity.Status != "REQUEST")
            {
                Console.WriteLine("order is already process");
                return;
            }

            jobEntity.Status     = "PROCESSING";
            jobEntity.UpdateTime = DateTime.Now;
            ImageProcessJobModel.Update(jobEntity);

            // 2 download image
            System.IO.Stream stream = Storage.DownloadFileToStream(jobEntity.ImageId);

            // 3. execute and uplaod image
            Utils.ImageProcessor.execute(jobEntity.RowKey, stream);

            // 4. record job
            jobEntity.Status     = "DONE";
            jobEntity.UpdateTime = DateTime.Now;
            ImageProcessJobModel.Update(jobEntity);

            log.Write("This message couldn't be processed by the original function: " + order.OrderId);
        }
Beispiel #3
0
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Model init
            CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(CloudConfigurationManager.GetSetting("StorageConnectionString"));

            BlobModel.Init(storageAccount);
            QueueModel.Init(storageAccount);
            ImageProcessJobModel.Init(storageAccount);
            InputImageModel.Init(storageAccount);

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );
        }
Beispiel #4
0
        // POST api/processing
        public async Task <JobOrderDTO> Post([FromBody] ProcessOrderDTO processOrderDTO)
        {
            InputImageEntity imageEntity = InputImageModel.Get(processOrderDTO.ImageId);

            if (imageEntity == null)
            {
                // return this.Request.CreateResponse(HttpStatusCode.NotFound);
                return(null);
            }

            Guid   g       = System.Guid.NewGuid();
            string orderId = g.ToString("N").Substring(0, 15);

            ImageProcessJobModel.Crate(orderId, imageEntity.RowKey);

            // send job
            QueueModel.SendMessage(orderId, processOrderDTO.ImageId, "default");

            return(new JobOrderDTO()
            {
                OrderId = orderId
            });
        }
Beispiel #5
0
 // GET api/processing/{id}
 public ImageProcessJobEntity Get(string id)
 {
     // TODO check job status..
     return(ImageProcessJobModel.Get(id));
 }