Example #1
0
        private IAsset CreateAndConfigureAsset(ZetronMstIncidents zetronMstIncidents, out ILocator originLocator)
        {
            //Create asset
            IAsset asset = null;

            try
            {
                asset = _mediaContext.Assets.Create("Asset_" + zetronMstIncidents.IncidentId.ToString(), AssetCreationOptions.None);

                // Create a 30 - day readonly access policy.
                IAccessPolicy accessPolicy = _mediaContext.AccessPolicies.Create("Streaming policy",
                                                                                 TimeSpan.FromDays(30),
                                                                                 AccessPermissions.Read);

                // Create a locator to the streaming content on an origin.
                originLocator = _mediaContext.Locators.CreateLocator(LocatorType.OnDemandOrigin, asset,
                                                                     accessPolicy,
                                                                     DateTime.UtcNow.AddMinutes(-5));
            }
            catch (Exception ex)
            {
                Log(ex.Message);
                throw;
            }

            return(asset);
        }
Example #2
0
        public async void StartAzureProcess(ZetronMstIncidents zetronMstIncidents)
        {
            try
            {
                await Task.Run(() =>
                {
                    StartChannel();

                    if (_channel != null)
                    {
                        ILocator originLocator;
                        //Create asset for storage
                        IAsset asset = CreateAndConfigureAsset(zetronMstIncidents, out originLocator);
                        if (asset != null)
                        {
                            //Create and start live program and configure storage for it
                            CreateAndStartProgram(asset, originLocator, zetronMstIncidents);
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                Log(ex.Message);
                throw;
            }
        }
        public IActionResult Index()
        {
            incidents = new ZetronMstIncidents();
            using (HttpClientHandler httpClientHandler = new HttpClientHandler())
            {
                httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return(true); };
                using (var client = new HttpClient(httpClientHandler))
                {
                    try
                    {
                        var response = client.GetAsync($"{_api}incidents/Active").Result;

                        if (!response.IsSuccessStatusCode)
                        {
                            return(View(incidents));
                        }
                        var allIncidents = JsonConvert.DeserializeObject <ZetronMstIncidents>(response.Content.ReadAsStringAsync().Result);
                        //var activeIncidents = allIncidents.Where(i => (i.Status != (int)IncidentStatus.Deactivated));
                        if (allIncidents != null)
                        {
                            incidents = allIncidents;
                        }
                    }
                    catch (Exception ex)
                    {
                        incidents.liveData = new Models.Live();
                        return(View(incidents));
                    }
                }
            }
            incidents.liveData = new Models.Live();

            return(View(incidents));
        }
        public async Task <IActionResult> PutZetronMstIncidents([FromRoute] int id, [FromBody] ZetronMstIncidents zetronMstIncidents)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != zetronMstIncidents.IncidentId)
            {
                return(BadRequest());
            }

            try
            {
                var recordtoUpdate = _context.ZetronMstIncidents.Single(i => i.IncidentId == id);
                if (recordtoUpdate.Status != zetronMstIncidents.Status)
                {
                    recordtoUpdate.Status = zetronMstIncidents.Status;
                    Task incidentUpdate = _context.SaveChangesAsync();

                    switch (zetronMstIncidents.Status)
                    {
                    case (int)IncidentStatus.Processing:
                        //trigger job
                        incidentUpdate.Wait();
                        _mediaContext.TriggerJob(id);
                        break;

                    case (int)IncidentStatus.Stopped:
                        _mediaContext.StopAzureProcess(id, IncidentStatus.Stopped);
                        break;

                    case (int)IncidentStatus.Deactivated:
                        _mediaContext.StopAzureProcess(id, IncidentStatus.Deactivated);
                        break;

                    default:
                        break;
                    }
                }
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ZetronMstIncidentsExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(CreatedAtAction("GetZetronMstIncidents", new { id = zetronMstIncidents.IncidentId }, zetronMstIncidents));
        }
Example #5
0
        private async Task UpdateStreamingUrl(IAsset asset, ILocator originLocator, ZetronMstIncidents zetronMstIncidents)
        {
            try
            {
                //Get manifest file to create streaming url
                IAssetFile manifestFile = asset.AssetFiles.Where(f => f.Name.ToLower().EndsWith(".ism")).FirstOrDefault();
                string     streamUrl    = originLocator.Path + manifestFile.Name + "/manifest(format=m3u8-aapl)";
                //var droneDetail = _drone.GetCurrentLocationDetail();
                ZetronTrnMediaDetails mediaDetails = new ZetronTrnMediaDetails()
                {
                    IncidentId = zetronMstIncidents.IncidentId,
                    MediaUrl   = streamUrl,
                    Name       = asset.Name,
                    MediaType  = 1,
                    PostedIon  = DateTime.Now.ToUniversalTime(),
                    PostedBy   = "Admin",
                    Status     = true
                };
                using (var _dbContext = new ZetronContext(options.Options))
                {
                    //var mediaId = _dbContext.ZetronTrnMediaDetails.Max(m => m.MediaId) + 1;
                    _dbContext.ZetronTrnMediaDetails.Add(mediaDetails);

                    ZetronMstIncidents recordtoUpdate = null;
                    if (zetronMstIncidents.Status == (int)IncidentStatus.Started)
                    {
                        recordtoUpdate        = _dbContext.ZetronMstIncidents.Single(i => i.IncidentId == zetronMstIncidents.IncidentId);
                        recordtoUpdate.Status = (int)IncidentStatus.Processing;
                    }

                    //_dbContext.ZetronTrnDroneLocations.Add(new ZetronTrnDroneLocations()
                    //{
                    //    MediaID = mediaId,
                    //    DewPoint = droneDetail.DewPoint,
                    //    Humidity = droneDetail.Humidity,
                    //    Temperature = droneDetail.Temperature,
                    //    WindSpeed = droneDetail.WindSpeed,
                    //    Summary = droneDetail.Summary,
                    //    WindDirection = droneDetail.WindDirection,
                    //    Longitude = droneDetail.Longitude,
                    //    Latitude = droneDetail.Latitude
                    //});

                    await _dbContext.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                Log(ex.Message);
                throw;
            }
        }
        public async Task <IActionResult> PostZetronMstIncidents([FromBody] ZetronMstIncidents zetronMstIncidents)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.ZetronMstIncidents.Add(zetronMstIncidents);
            await _context.SaveChangesAsync();

            _mediaContext.StartAzureProcess(zetronMstIncidents);

            return(CreatedAtAction("GetZetronMstIncidents", new { id = zetronMstIncidents.IncidentId }, zetronMstIncidents));
        }
Example #7
0
        private async void CreateAndStartProgram(IAsset asset, ILocator originLocator, ZetronMstIncidents zetronMstIncidents)
        {
            try
            {
                //Create a new program and allocate asset for it.
                //To Do: Check the amount of time the asset will be maintained
                IProgram program = await _channel.Programs.CreateAsync("Program-" + zetronMstIncidents.IncidentId.ToString(), TimeSpan.FromHours(8), asset.Id);

                if (channelstart != null)
                {
                    Task.WaitAll(channelstart);
                }

                if (_channel.State == ChannelState.Running)
                {
                    //Start the program
                    Task prog   = program.StartAsync();
                    Task stream = UpdateStreamingUrl(asset, originLocator, zetronMstIncidents);

                    Task.WaitAll(prog, stream);
                    if ((zetronMstIncidents.Status == (int)IncidentStatus.Started) || (zetronMstIncidents.Status == (int)IncidentStatus.Processing))
                    {
                        TriggerJob(zetronMstIncidents.IncidentId);
                    }
                }
            }
            catch (Exception ex)
            {
                Log(ex.Message);
                throw;
            }
        }