Exemple #1
0
            public override void Run()
            {
                // get first job
                PipelineJob job = Receive <PipelineJob>();

                PipelineJob nextJob = null;

                int receivedChunks = 1;


                while (receivedChunks <= numChunks)
                {
                    if (receivedChunks < numChunks)
                    {
                        // process all but last line
                        ImageProcessing.Process(filter, job.srcImage, job.resultImage, job.width, job.height, job.yStart, job.yEnd - 1);

                        // receive next job
                        nextJob = Receive <PipelineJob>();

                        // process last line
                        ImageProcessing.Process(filter, job.srcImage, job.resultImage, job.width, job.height, job.yEnd - 1, job.yEnd);
                    }
                    else // this is the last iteration
                    {
                        // process entire chunk
                        ImageProcessing.Process(filter, job.srcImage, job.resultImage, job.width, job.height, job.yStart, job.yEnd);
                    }

                    receivedChunks++;
                    // send result for this iteration to next stage
                    Send(job.Copy(), nextStage);
                    job = nextJob;
                }
            }
Exemple #2
0
        protected override IJob Build()
        {
            var job = new PipelineJob(Logger, "DiskJobs");

            job.RaiseJobExceptionEvent += Job_RaiseJobExceptionEvent;

            job.Use((_) =>
            {
                var diskFreeSpaceCheck = new DiskFreeSpaceHealthCheck(
                    new DiskFreeSpaceHealthCheckParams("C:\\"
                                                       , (fs) => fs < 10000 ? HealthCheckStatus.Healthy : HealthCheckStatus.Unhealthy
                                                       , (m, r) => Console.WriteLine(m)));

                return(diskFreeSpaceCheck.Beat());
            })
            .Use((_) =>
            {
                var fileSystemHealthCheck = new FileSystemHealthCheck(
                    new FileSystemHealthCheckParams("C:\\fileToCheck.txt"
                                                    , (exists) => exists ? HealthCheckStatus.Healthy : HealthCheckStatus.Unhealthy
                                                    , (m, r) => Console.WriteLine(m)));

                return(fileSystemHealthCheck.Beat());
            });

            return(job);
        }
        protected override IJob Build()
        {
            var job = new PipelineJob(Logger, "pipeline");

            job.RaiseJobExceptionEvent += Job_RaiseJobExceptionEvent;

            var jobContext = new JobContext();

            jobContext["param1"] = 1;

            job.Use((context) =>
            {
                var param1           = jobContext["param1"];
                jobContext["param2"] = "Hello Next Middleware!";

                return(Task.CompletedTask);
            })
            .Use((context) =>
            {
                var param2 = context["param2"];

                return(Task.CompletedTask);
            });

            return(job);
        }
Exemple #4
0
        public override Bitmap Run()
        {
            int width  = image.Width;
            int height = image.Height;

            int stripHeight     = height / strips;
            int lastStripHeight = stripHeight + height % strips;

            Async[] stages = new PipelineStage[filters.Length];

            Address next = Address;

            for (int i = filters.Length - 1; i >= 0; i--)
            {
                Async stage = new PipelineStage(filters[i], strips, next).Start();
                stages[i] = stage;
                next      = stage.Address;
            }

            Address first = stages[0].Address;

            int[] pixels       = ImageProcessing.GetPixels(image);
            int[] resultPixels = new int[width * height];

            for (int i = 0; i < strips - 1; i++)
            {
                int yStart = i * stripHeight;
                int yEnd   = yStart + stripHeight;
                Send(new PipelineJob(pixels, resultPixels, width, height, yStart, yEnd), first);
            }

            int yStartLast = (strips - 1) * stripHeight;
            int yEndLast   = yStartLast + lastStripHeight;

            Send(new PipelineJob(pixels, resultPixels, width, height, yStartLast, yEndLast), first);

            PipelineJob job = null;

            for (int i = 0; i < strips; i++)
            {
                job = Receive <PipelineJob>();
            }

            Bitmap result = new Bitmap(width, height);

            ImageProcessing.SetPixels(result, job.srcImage);
            return(result);
        }
Exemple #5
0
        public PipelineJob GetJobRegistrationDetails()
        {
            var c = new PipelineJob
            {
                Id        = this.GetType().FullName,
                Name      = this.GetType().Name,
                Group     = "System",
                Enabled   = true,
                Scheduler = new List <string> {
                    "*/30 * * * *"
                },
                NextExecution = DateTime.UtcNow,
                RootAction    = new ActionDetails
                {
                    Module = this.GetType().FullName,
                    Type   = ModuleTypes.SystemModule
                }
            };

            return(c);
        }
        protected override IJob Build()
        {
            var job = new PipelineJob(Logger, "SqlServerCheck");

            job.RaiseJobExceptionEvent += Job_RaiseJobExceptionEvent;
            var dbServerIP = IPAddress.Parse("127.0.0.1");

            var policy = Policy.Handle <HttpRequestException>().WaitAndRetryAsync(new[]
            {
                TimeSpan.FromSeconds(1),
                TimeSpan.FromSeconds(2),
                TimeSpan.FromSeconds(3)
            });

            job.Use((_) =>
            {
                var sqlQueryCheck = new SqlServerHealthCheck <int>(new DbHealthCheckParams <int>(
                                                                       connectionString: "Server=(localdb)\\mssqllocaldb;Database=WatusiHangfire;Trusted_Connection=True;"
                                                                       , query: "SELECT 1"
                                                                       , decideStatus: r => r == 1?HealthCheckStatus.Healthy:HealthCheckStatus.Unhealthy
                                                                       , notify: (m, r) => Console.WriteLine(m)));
                return(sqlQueryCheck.Beat());
            }, policy)
            .Use((_) =>
            {
                var telnetCheck = new TelnetHealthCheck(new TelnetHealthCheckParams(
                                                            ipAddress: dbServerIP
                                                            , dnsName: null
                                                            , port: 1433
                                                            , retryCount: 3
                                                            , notify: (m, r) => Console.WriteLine(m)));
                return(telnetCheck.Beat());
            }, policy);

            return(job);
        }
        public void PipelineJobLifeCycleTest()
        {
            using (MockContext context = this.StartMockContextAndInitializeClients(this.GetType()))
            {
                try
                {
                    CreateVideoAnalyzerAccount();

                    var topologyName = TestUtilities.GenerateName("pt");

                    VideoAnalyzerClient.PipelineTopologies.CreateOrUpdate(ResourceGroup, AccountName, topologyName, new PipelineTopology(
                                                                              name: topologyName,
                                                                              kind: Kind.Batch,
                                                                              sku: new Sku
                    {
                        Name = "Batch_S1",
                    },
                                                                              description: "The pipeline topology with video source, encoder processor and video sink.",
                                                                              parameters: new List <ParameterDeclaration>
                    {
                        new ParameterDeclaration
                        {
                            Name        = VideoNameParameter,
                            Type        = "String",
                            Description = "video name",
                        },
                        new ParameterDeclaration
                        {
                            Name        = VideoSourceTimeSequenceParameter,
                            Type        = "String",
                            Description = "video source time sequence parameter",
                        },
                        new ParameterDeclaration
                        {
                            Name        = VideoSourceVideoNameParameter,
                            Type        = "String",
                            Description = "video source video name parameter",
                        },
                    },
                                                                              sources: new List <SourceNodeBase>
                    {
                        new VideoSource
                        {
                            Name          = "videoSource",
                            VideoName     = "${" + VideoSourceVideoNameParameter + "}",
                            TimeSequences = new VideoSequenceAbsoluteTimeMarkers
                            {
                                Ranges = "${" + VideoSourceTimeSequenceParameter + "}",
                            },
                        },
                    },
                                                                              processors: new List <ProcessorNodeBase>
                    {
                        new EncoderProcessor
                        {
                            Name   = "encoderProcessor",
                            Preset = new EncoderSystemPreset
                            {
                                Name = EncoderSystemPresetType.SingleLayer1080pH264AAC,
                            },
                            Inputs = new List <NodeInput>
                            {
                                new NodeInput("videoSource"),
                            },
                        },
                    },
                                                                              sinks: new List <SinkNodeBase>
                    {
                        new VideoSink
                        {
                            Name      = "videoSink",
                            VideoName = "${" + VideoNameParameter + "}",
                            Inputs    = new List <NodeInput>
                            {
                                new NodeInput("encoderProcessor"),
                            },
                            VideoCreationProperties = new VideoCreationProperties
                            {
                                Title       = "Parking Lot (Camera 1)",
                                Description = "Parking lot south entrance",
                            },
                        },
                    }));


                    var topology = VideoAnalyzerClient.PipelineTopologies.Get(ResourceGroup, AccountName, topologyName);
                    Assert.NotNull(topology);

                    var pipelineJobName = TestUtilities.GenerateName("pj");

                    var pipeline = new PipelineJob(
                        name: pipelineJobName,
                        description: "test job description",
                        topologyName: topologyName,
                        parameters: new List <ParameterDefinition>
                    {
                        new ParameterDefinition(VideoSourceVideoNameParameter, VideoSourceVideoNameParameter),
                        new ParameterDefinition(VideoSourceTimeSequenceParameter, "[[\"2020-10-05T03:30:00Z\", \"2020-10-05T04:30:00Z\"]]"),
                        new ParameterDefinition(VideoNameParameter, TestUtilities.GenerateName("ve")),
                    });

                    var pipelineJobs = VideoAnalyzerClient.PipelineJobs.List(ResourceGroup, AccountName);
                    Assert.Empty(pipelineJobs);

                    VideoAnalyzerClient.PipelineJobs.CreateOrUpdate(ResourceGroup, AccountName, pipelineJobName, pipeline);

                    var pipelineJob = VideoAnalyzerClient.PipelineJobs.Get(ResourceGroup, AccountName, pipelineJobName);
                    Assert.NotNull(pipelineJob);
                    Assert.Equal(pipelineJobName, pipelineJob.Name);

                    pipelineJobs = VideoAnalyzerClient.PipelineJobs.List(ResourceGroup, AccountName);
                    Assert.NotNull(pipelineJobs);
                    Assert.Single(pipelineJobs);

                    VideoAnalyzerClient.PipelineJobs.Delete(ResourceGroup, AccountName, pipelineJobName);

                    pipelineJobs = VideoAnalyzerClient.PipelineJobs.List(ResourceGroup, AccountName);
                    Assert.Empty(pipelineJobs);

                    VideoAnalyzerClient.PipelineTopologies.Delete(ResourceGroup, AccountName, pipelineJobName);
                }
                finally
                {
                    DeleteVideoAnalyzerAccount();
                }
            }
        }
 /// <summary>
 /// Creates or updates a pipeline job.
 /// </summary>
 /// <remarks>
 /// Creates a new pipeline job or updates an existing one, with the given name.
 /// </remarks>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group. The name is case insensitive.
 /// </param>
 /// <param name='accountName'>
 /// The Azure Video Analyzer account name.
 /// </param>
 /// <param name='pipelineJobName'>
 /// The pipeline job name.
 /// </param>
 /// <param name='parameters'>
 /// The request parameters
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <PipelineJob> CreateOrUpdateAsync(this IPipelineJobsOperations operations, string resourceGroupName, string accountName, string pipelineJobName, PipelineJob parameters, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, accountName, pipelineJobName, parameters, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
 /// <summary>
 /// Creates or updates a pipeline job.
 /// </summary>
 /// <remarks>
 /// Creates a new pipeline job or updates an existing one, with the given name.
 /// </remarks>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The name of the resource group. The name is case insensitive.
 /// </param>
 /// <param name='accountName'>
 /// The Azure Video Analyzer account name.
 /// </param>
 /// <param name='pipelineJobName'>
 /// The pipeline job name.
 /// </param>
 /// <param name='parameters'>
 /// The request parameters
 /// </param>
 public static PipelineJob CreateOrUpdate(this IPipelineJobsOperations operations, string resourceGroupName, string accountName, string pipelineJobName, PipelineJob parameters)
 {
     return(operations.CreateOrUpdateAsync(resourceGroupName, accountName, pipelineJobName, parameters).GetAwaiter().GetResult());
 }