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; } }
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); }
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); }
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()); }