public DemoService(
     IOptionsSnapshot <LabSettings> settings,
     LabDbContext dbContext)
 {
     _settings  = settings.Value;
     _dbContext = dbContext;
 }
        public static async Task <IEnumerable <LabSettings> > UpdateLab(LabSettings lab, string instructor)
        {
            lab.State = LabState.QueuedToUpdate;
            await DocDBRepo.DB <LabSettings> .UpdateItemAsync(lab);

            return(await GetLabs(instructor));
        }
        public static async Task UpdateLabAssignments(LabSettings lab)
        {
            var currLab = await GetDomAssignments(lab.Id);

            var currCount = currLab.Count();
            var newCount  = lab.AttendeeCount;

            if (newCount > currCount)
            {
                //adding assignments
                await AddLabAssignments(lab, currCount);
            }
            else if (newCount < currCount)
            {
                //removing assignments
                await RemoveLabAssignments(lab, lab.AttendeeCount);
            }
            else
            {
                //sanity check - no change (shouldn't be here)
                //update lab
                lab.State = LabState.Ready;
                await DocDBRepo.DB <LabSettings> .UpdateItemAsync(lab);
            }
        }
예제 #4
0
        public async Task <IEnumerable <LabDTO> > UpdateLab(LabSettings lab)
        {
            var res = await LabRepo.UpdateLab(lab, User.Identity.Name);

            SetQueue(lab.Id);
            return(MapLabs(res));
        }
        /// <summary>
        /// called from the web job, removes assignments then deletes the lab
        /// </summary>
        /// <returns></returns>
        public static async Task RemoveLabAssignments(LabSettings lab, int endCount = 0)
        {
            var assignments = await GetDomAssignments(lab.Id);

            var counter = assignments.Count();

            try
            {
                var domGroup = (await DocDBRepo.DB <DomainResourceGroup> .GetItemsAsync(g => g.AzureSubscriptionId == lab.AzureSubscriptionId && g.DnsZoneRG == lab.DnsZoneRG)).SingleOrDefault();

                using (var dns = new DnsAdmin())
                {
                    await dns.InitAsync();

                    try
                    {
                        dns.SetClient(domGroup);
                    }
                    catch (Exception ex)
                    {
                        //we may have lost our auth
                        await Logging.WriteDebugInfoToErrorLog(string.Format("Error creating DNS client while deleting lab {0} - continuing.", lab.LabName), ex);
                    }
                    foreach (var item in assignments)
                    {
                        if (counter == endCount)
                        {
                            return;
                        }
                        try
                        {
                            await dns.RemoveChildZone(item.ParentZone, item.TeamName, item.DomainName);
                        }
                        catch (Exception ex)
                        {
                            //we may have lost our auth
                            await Logging.WriteDebugInfoToErrorLog(string.Format("Error deleting child zone {0} - continuing.", item.DomainName), ex);
                        }
                        await DocDBRepo.DB <DomAssignment> .DeleteItemAsync(item);

                        counter--;
                    }
                }

                //update lab
                lab.State = LabState.Ready;
                await DocDBRepo.DB <LabSettings> .UpdateItemAsync(lab);
            }
            catch (Exception ex)
            {
                await Logging.WriteDebugInfoToErrorLog(string.Format("Unable to remove domain assignments for labid {0}", lab.Id), ex);

                throw ex;
            }
        }
        public static async Task AddLabAssignments(LabSettings lab, int counter = 0)
        {
            var domGroup = (await DocDBRepo.DB <DomainResourceGroup> .GetItemsAsync(g => g.AzureSubscriptionId == lab.AzureSubscriptionId && g.DnsZoneRG == lab.DnsZoneRG)).SingleOrDefault();

            var    domains = domGroup.DomainList;
            string auth    = null;

            using (var dns = new DnsAdmin())
            {
                await dns.InitAsync();

                dns.SetClient(domGroup);
                var itemsPerDomain = (lab.AttendeeCount / domains.Count()) + 1;
                foreach (var dom in domains)
                {
                    if (counter == lab.AttendeeCount)
                    {
                        continue;
                    }

                    for (var x = 0; x < itemsPerDomain; x++)
                    {
                        if (counter == lab.AttendeeCount)
                        {
                            continue;
                        }

                        //create [itemsPerDomain] teams/child domains per parent domain name
                        var team = string.Format("{0}{1}", lab.LabName, (counter + 1));
                        auth = DomAssignment.GenAuthCode(team);
                        var newTeamItem = new DomAssignment
                        {
                            ParentZone    = dom,
                            TeamName      = team,
                            DomainName    = string.Format("{0}.{1}", team, dom),
                            TeamAuth      = auth,
                            LabCode       = lab.LabCode,
                            LabSettingsId = lab.Id
                        };
                        await DocDBRepo.DB <DomAssignment> .CreateItemAsync(newTeamItem);

                        await dns.CreateNewChildZone(newTeamItem.ParentZone, newTeamItem.TeamName, newTeamItem.DomainName);

                        counter++;
                    }
                }
            }

            //update lab
            lab.State = LabState.Ready;
            await DocDBRepo.DB <LabSettings> .UpdateItemAsync(lab);
        }
        public static async Task <LabSettings> SetLabSettingsAsync(LabSettings item)
        {
            try
            {
                var lab = await DocDBRepo.DB <LabSettings> .CreateItemAsync(item);

                return(lab);
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #8
0
 private void Lab_Click(object sender, EventArgs e)
 {
     if (LabBox.Enabled)
     {
         var ls   = new LabSettings((double)rp_x.Value, (double)rp_y.Value, (double)gp_x.Value, (double)gp_y.Value, (double)bp_x.Value, (double)bp_y.Value, (double)wp_x.Value, (double)wp_y.Value, (double)gamma.Value, "sRGB", "D65");
         var cm   = new Lab(InitBitmap, ls);
         var imgs = cm.Transform();
         Image1.Image   = imgs.Item1;
         Image2.Image   = imgs.Item2;
         Image3.Image   = imgs.Item3;
         LabBox.Enabled = false;
     }
     else
     {
         LabBox.Enabled = true;
     }
 }
        public static async Task <IEnumerable <LabSettings> > AddNewLab(LabSettings lab, string user)
        {
            try
            {
                lab.LabCode    = LabSettings.GenLabCode();
                lab.CreateDate = DateTime.UtcNow;
                lab.State      = LabState.Queued;

                //setting this in AdminController:Index
                var arr = lab.DnsZoneRG.Split(':');
                lab.AzureSubscriptionId = arr[0];
                lab.DnsZoneRG           = arr[1];
                var group = (await DocDBRepo.DB <DomainResourceGroup> .GetItemsAsync(g => g.DnsZoneRG == lab.DnsZoneRG)).SingleOrDefault();

                lab.AzureSubscriptionId = group.AzureSubscriptionId;
                LabSettings newLab = await SetLabSettingsAsync(lab);

                return(await GetLabs(user));
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #10
0
 public Lab(Bitmap InitBitmap, LabSettings ls) : base(InitBitmap)
 {
     this.ls = ls;
 }
예제 #11
0
 public KeyVaultController(IDemoService demoService, IOptionsSnapshot <LabSettings> labSettings)
 {
     _demoService = demoService;
     _settings    = labSettings.Value;
 }
 public static async Task <IEnumerable <LabSettings> > ResetLabCode(LabSettings lab, string instructor)
 {
     lab.LabCode = LabSettings.GenLabCode();
     return(await UpdateLab(lab, instructor));
 }
 /// <summary>
 /// Called from web job after assignments removed, deletes lab
 /// </summary>
 /// <param name="lab"></param>
 /// <returns></returns>
 public static async Task DeleteLab(LabSettings lab)
 {
     //all zones and teams deleted, remove lab
     await DocDBRepo.DB <LabSettings> .DeleteItemAsync(lab);
 }
예제 #14
0
        public async Task <IEnumerable <LabSettings> > ResetLabCode(LabSettings lab)
        {
            var res = await LabRepo.ResetLabCode(lab, User.Identity.Name);

            return(res);
        }