public async Task <IActionResult> Post(string tenantName) { //TODO validations ActorId actorId = new ActorId(tenantName); ITenantWorkflowActor actor = ActorProxy.Create <ITenantWorkflowActor>(actorId, TenantHelpers.GetWorkflowActorUri()); var status = await actor.Create(tenantName); return(Ok(status)); }
public async Task <Object> Get(string tenantName) { try { ActorId actorId = new ActorId(tenantName); ITenantWorkflowActor actor = ActorProxy.Create <ITenantWorkflowActor>(actorId, TenantHelpers.GetWorkflowActorUri()); var status = await actor.GetStatus(); return(Ok(status)); } catch (Exception e) { Console.WriteLine(e); throw; } }
public async Task <bool> TryDequeueAndProcessAsync(CancellationToken cancellationToken) { var queue = await this.StateManager.GetTenantDeloymentsQueue(); Stopwatch sw = Stopwatch.StartNew(); using (ITransaction tx = this.StateManager.CreateTransaction()) { ConditionalValue <TenantDeployment> workItem = await queue.TryDequeueAsync(tx, cancellationToken); if (!workItem.HasValue) { ServiceEventSource.Current.ServiceMessage(this.Context, "No new application deployment requests."); return(false); } TenantDeployment processedDeployment = await this.ProcessTenantDeploymentAsync(workItem.Value, cancellationToken); if (processedDeployment.CreationStatus == CreationStatus.Created) { //Trigger workflow ActorId actorId = new ActorId(processedDeployment.Name); ITenantWorkflowActor actor = ActorProxy.Create <ITenantWorkflowActor>(actorId, TenantHelpers.GetWorkflowActorUri()); await actor.InternalCreated(processedDeployment.InternalMineCraftEndpoint, processedDeployment.InternalRconEndpoint); ServiceEventSource.Current.ServiceMessage(this.Context, "Application Created"); } else { // The deployment hasn't completed or failed, so queue up the next stage of deployment await queue.EnqueueAsync(tx, workItem.Value, cancellationToken); ServiceEventSource.Current.ServiceMessage(this.Context, "Application enqueed again"); } await tx.CommitAsync(); } return(true); }
public async Task <Object> Get() { var applicationList = await fabricClient.QueryManager.GetApplicationPagedListAsync(new ApplicationQueryDescription() { ApplicationTypeNameFilter = "mcType" }); var tenants = applicationList .Select(x => new { Name = x.ApplicationName, Status = x.ApplicationStatus, Version = x.ApplicationTypeVersion, Health = x.HealthState, Endpoints = new Dictionary <string, string>(), Services = new List <Service>() }).ToList(); foreach (var tenant in tenants) { var tenantName = tenant.Name.ToString().GetName(); ActorId actorId = new ActorId(tenantName); ITenantWorkflowActor actor = ActorProxy.Create <ITenantWorkflowActor>(actorId, TenantHelpers.GetWorkflowActorUri()); var status = await actor.GetStatus(); if (!string.IsNullOrEmpty(status.InternalIp) && !String.IsNullOrEmpty(status.RconEndpoint)) { // ports on external ip will be same as the internal as it is configured now. var mcEndpoint = new Uri(status.InternalIp); var rconEndpoint = new Uri(status.RconEndpoint); tenant.Endpoints.Add("minecraft", $"{status.ExternalEndPoint}:{mcEndpoint.Port}"); tenant.Endpoints.Add("rcon", $"{status.ExternalEndPoint}:{rconEndpoint.Port}"); } } return(tenants); }