Con el fin de automatizar las unidades reservadas que estamos utilizando para el servicio de streaming, podemos hacer uso del siguiente código en C#:
[csharp]using Microsoft.WindowsAzure.MediaServices.Client;
using System;
using System.Configuration;
using System.Linq;
namespace StreamingReservedUnits
{
class Program
{
static void Main(string[] args)
{
//0.Nuget: Install-Package windowsazure.mediaservices
//1. Credentials
var AccountName = ConfigurationManager.AppSettings["AccountName"];
var AccountKey = ConfigurationManager.AppSettings["AccountKey"];
//2. Get Context
var context = new CloudMediaContext(AccountName, AccountKey);
//3. Create tasks
for (var index = 0; index < context.StreamingEndpoints.Count(); index++)
{
var endpoint = context.StreamingEndpoints.Skip(index).Take(1).FirstOrDefault();
Console.WriteLine("Endpoint {0} has {1} units", endpoint.Name, endpoint.ScaleUnits);
if (endpoint.State != StreamingEndpointState.Scaling)
endpoint.Scale(0);
}
Console.WriteLine("Streaming endpoint units off!");
Console.ReadLine();
}
}
}
[/csharp]
También está disponible el método asíncrono para esta acción, ScaleAsync, el cual podríamos usar de la siguiente manera:
[csharp]using Microsoft.WindowsAzure.MediaServices.Client;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Threading.Tasks;
namespace StreamingReservedUnits
{
class Program
{
static void Main(string[] args)
{
//0.Nuget: Install-Package windowsazure.mediaservices
//1. Credentials and constants
var AccountName = ConfigurationManager.AppSettings["AccountName"];
var AccountKey = ConfigurationManager.AppSettings["AccountKey"];
var ReservedUnits = 0;
//2. Get Context
var context = new CloudMediaContext(AccountName, AccountKey);
var task = new List<Task>();
//3. Create tasks
for (var index = 0; index < context.StreamingEndpoints.Count(); index++)
{
var endpoint = context.StreamingEndpoints.Skip(index).Take(1).FirstOrDefault();
Console.WriteLine("Endpoint {0} has {1} units", endpoint.Name, endpoint.ScaleUnits);
if (endpoint.State != StreamingEndpointState.Scaling)
{
task.Add(endpoint.ScaleAsync(ReservedUnits));
Console.WriteLine("From {0} units to {1}", endpoint.ScaleUnits, ReservedUnits);
}
}
Task.WaitAll(task.ToArray());
Console.WriteLine("All endpoints updated!");
Console.ReadLine();
}
}
}[/csharp]
Si además quisieramos que esta tarea se lanzara cada X tiempo podemos hacer uso de Azure WebJobs para facilitarnos el trabajo.
Gracias a Vito por pasarme la versión vintage del código. Sólo tuve que actualizarla 😉
¡Saludos!
