public async Task <ActionResult> CreateInstance([FromBody] CreateInstanceRequest request) { var resp = await(await factory.GetInstanceServiceClient()) .CreateInstanceAsync(new AcademyCloud.ResourceManagement.Protos.Instance.CreateInstanceRequest { Name = request.Name, ImageName = request.ImageName, FlavorName = request.FlavorName, Volume = request.Volume }); // add the resources usage to expenses await(await factory.GetExpensesInteropClientAsync()) .ChangeProjectUserResourcesAsync(new AcademyCloud.Expenses.Protos.Interop.ChangeProjectUserResourcesRequest { ResourcesDelta = new AcademyCloud.Expenses.Protos.Common.Resources { Cpu = resp.Flavor.Cpu, Memory = resp.Flavor.Memory, Storage = request.Volume, } }); return(Created(resp.InstanceId, resp.InstanceId)); }
public async Task <ActionResult <GetDomainsResponse> > GetDomains() { var resp = await(await factory.GetDomainsClientAsync()) .GetDomainsAsync(new AcademyCloud.Identity.Protos.Domains.GetDomainsRequest { }); var subjects = resp.Domains.Select(x => new AcademyCloud.Expenses.Protos.Interop.Subject { Id = x.Id, Type = AcademyCloud.Expenses.Protos.Common.SubjectType.Domain, }); // get pay users var payUsers = await(await factory.GetExpensesInteropClientAsync()) .GetPayUserAsync(new AcademyCloud.Expenses.Protos.Interop.GetPayUserRequest { Subjects = { subjects } }); // get pay user's names var payUserNames = await(await factory.GetIdentityInteropClientAsync()) .GetNamesAsync(new AcademyCloud.Identity.Protos.Interop.GetNamesRequest { Subjects = { payUsers.PayUsers.Values.Select(x => new AcademyCloud.Identity.Protos.Interop.GetNamesRequest.Types.Subject { Id = x, Type = AcademyCloud.Identity.Protos.Interop.GetNamesRequest.Types.SubjectType.User, }) } }); // get resources var quotas = await(await factory.GetExpensesInteropClientAsync()) .GetQuotaAsync(new AcademyCloud.Expenses.Protos.Interop.GetQuotaRequest { Subjects = { subjects } }); return(new GetDomainsResponse { Domains = resp.Domains.Select(x => new Domain { Id = x.Id, Name = x.Name, Active = true, Admins = x.Admins.Select(FromGrpc), PayUser = new User { Id = payUsers.PayUsers[x.Id], Name = payUserNames.IdNameMap[payUsers.PayUsers[x.Id]] }, Quota = quotas.Quotas[x.Id], }) }); }
private async Task <(bool, bool)> GetUserAndScopeActivity(string userId, Scope scope) { (AcademyCloud.Expenses.Protos.Common.SubjectType, string)subject; if (scope.System) { subject = (AcademyCloud.Expenses.Protos.Common.SubjectType.System, ""); } else if (string.IsNullOrEmpty(scope.ProjectId)) { subject = (AcademyCloud.Expenses.Protos.Common.SubjectType.Domain, scope.DomainId); } else { subject = (AcademyCloud.Expenses.Protos.Common.SubjectType.Project, scope.ProjectId); } // get activity var activityResp = await(await factory.GetExpensesInteropClientAsync()) .GetActivityAsync(new AcademyCloud.Expenses.Protos.Interop.GetActivityRequest { Subjects = { new AcademyCloud.Expenses.Protos.Interop.Subject { Type = AcademyCloud.Expenses.Protos.Common.SubjectType.User, Id = userId }, new AcademyCloud.Expenses.Protos.Interop.Subject { Type = subject.Item1, Id = subject.Item2, } } }); return(activityResp.Activities[userId], activityResp.Activities[subject.Item2]); }
public async Task <ActionResult <GetAllUsersResponse> > GetAllUsers() { var resp = await(await factory.GetUsersClientAsync()) .GetAccessibleUsersAsync(new AcademyCloud.Identity.Protos.Users.GetAccessibleUsersRequest { }); // request to expenses to get user activity // Pick ids and types var subjects = resp.Users.Select(x => new AcademyCloud.Expenses.Protos.Interop.Subject { Id = x.Id, Type = AcademyCloud.Expenses.Protos.Common.SubjectType.User, }); // send the request var activitiesResp = await(await factory.GetExpensesInteropClientAsync()) .GetActivityAsync(new AcademyCloud.Expenses.Protos.Interop.GetActivityRequest { Subjects = { subjects } }); // merge back activities var fullUsers = resp.Users.Select(x => new UserForSystem { Id = x.Id, Active = activitiesResp.Activities[x.Id], Name = x.Name, }); return(new GetAllUsersResponse { Users = fullUsers, }); }
public async Task <GetQuotaStatusResponse> GetQuotaStatus([FromRoute] SubjectType subjectType, [FromRoute] string id = "") { var resp = await(await factory.GetExpensesInteropClientAsync()) .GetQuotaStatusAsync(new AcademyCloud.Expenses.Protos.Interop.GetQuotaStatusRequest { Subject = new AcademyCloud.Expenses.Protos.Interop.Subject { Id = id, Type = subjectType } }); return(new GetQuotaStatusResponse { Total = resp.Total, Used = resp.Used, }); }
public async Task <GetResourcesLimitResponse> GetLimit() { var resp = await(await factory.GetExpensesInteropClientAsync()) .GetQuotaStatusOfCurrentProjectUserAsync(new AcademyCloud.Expenses.Protos.Interop.GetQuotaStatusOfCurrentProjectUserRequest { }); return(new GetResourcesLimitResponse { Used = resp.Used, Allocated = resp.Total, }); }
public async Task <GetAccessibleProjectsResponse> GetAccessibleProjects() { var resp = await(await factory.GetProjectsClientAsync()) .GetAccessibleProjectsAsync(new AcademyCloud.Identity.Protos.Projects.GetAccessibleProjectsRequest { }); var subjects = resp.Projects .Select(x => new AcademyCloud.Expenses.Protos.Interop.Subject { Id = x.Id, Type = AcademyCloud.Expenses.Protos.Common.SubjectType.Project, }); // get pay users var payUsers = await(await factory.GetExpensesInteropClientAsync()) .GetPayUserAsync(new AcademyCloud.Expenses.Protos.Interop.GetPayUserRequest { Subjects = { subjects } }); // get pay user's names var payUserNames = await(await factory.GetIdentityInteropClientAsync()) .GetNamesAsync(new AcademyCloud.Identity.Protos.Interop.GetNamesRequest { Subjects = { payUsers.PayUsers.Values.Select(x => new AcademyCloud.Identity.Protos.Interop.GetNamesRequest.Types.Subject { Id = x, Type = AcademyCloud.Identity.Protos.Interop.GetNamesRequest.Types.SubjectType.User, }) } }); var quotaSubjects = subjects .Concat( resp.Projects .Select(x => x.Admins) .Concat(resp.Projects.Select(x => x.Members)) .SelectMany(x => x) .Select(x => new AcademyCloud.Expenses.Protos.Interop.Subject { Id = x.UserProjectAssignmentId.ToString(), Type = AcademyCloud.Expenses.Protos.Common.SubjectType.UserProjectAssignment } )); // get quotas var quotas = await(await factory.GetExpensesInteropClientAsync()) .GetQuotaAsync(new AcademyCloud.Expenses.Protos.Interop.GetQuotaRequest { Subjects = { quotaSubjects } }); return(new GetAccessibleProjectsResponse() { Projects = resp.Projects.Select(x => new Project() { Id = x.Id, Name = x.Name, Active = true, Admins = x.Admins.Select(x => FromGrpc(x.User)), Members = x.Members.Select(x => FromGrpc(x.User)), PayUser = new Models.Identity.Common.User { Id = payUsers.PayUsers[x.Id], Name = payUserNames.IdNameMap[payUsers.PayUsers[x.Id]], }, Quota = quotas.Quotas[x.Id], UserQuotas = x.Admins.Concat(x.Members).ToDictionary(user => user.User.Id, user => (Resources)quotas.Quotas[user.UserProjectAssignmentId]) }) }); }