コード例 #1
0
        private void UpdateByVM(VM _vm, VM _azureVm)
        {
            VM vm = new VM();

            using (var context = new CADContext())
            {
                try
                {
                    _vm.PowerState        = _azureVm.PowerState;
                    _vm.ProvisioningState = _azureVm.ProvisioningState;
                    _vm.ResourceGroupName = _azureVm.ResourceGroupName;
                    _vm.SubscriptionId    = _azureVm.SubscriptionId;
                    _vm.Tags   = _azureVm.Tags;
                    _vm.VMId   = _azureVm.VMId;
                    _vm.VMName = _azureVm.VMName;
                    _vm.VMSize = _azureVm.VMSize;

                    context.VMs.Update(_vm);
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }
        }
コード例 #2
0
        public List <VM> GetVMs(int _dashboardId)
        {
            List <VM> list = new List <VM>();

            using (var context = new CADContext())
            {
                Dashboard dashboard = context.Dashboards.Include(d => d.DashboardApplications).AsNoTracking().FirstOrDefault(d => d.DashboardId == _dashboardId);
                switch (dashboard.DisplayType)
                {
                case DisplayType.ShowAll:
                {
                    list = GetVMsByDash(dashboard);
                    break;
                }

                case DisplayType.ExcludeType:
                {
                    list = GetVMsByDash(dashboard, true);
                    break;
                }

                case DisplayType.SelectType:
                {
                    list = GetActiveVMs(dashboard.DashboardId);
                    break;
                }
                }
            }
            return(list);
        }
コード例 #3
0
        public static void Initialize(CADContext context)
        {
            Application app = new Application();

            app.ClientId       = "912fabb6-a061-4286-a476-aba6e7edb0e3";
            app.ClientSecret   = "6LGURivA4/gRNUzjRGuvWPZxKnwmESxOgdx1G+5EZgY=";
            app.SubscriptionId = "1d52c7db-0f59-4b3e-artd-de3df0624ab1";
            app.TenantId       = "test.com";
            app.Description    = "test subscription";
            context.Applications.Add(app);
            context.SaveChanges();

            Dashboard dashBoard = new Dashboard();

            dashBoard.DashboardName           = "DemoTestDashboard";
            dashBoard.DashboardAnonAccessCode = "testtesttest";
            dashBoard.DashboardLogoUrl        = "https://ciellospublic.z21.web.core.windows.net/Ciellos Logo_Standard.png";

            context.Dashboards.Add(dashBoard);
            context.SaveChanges();

            User user = new User();

            user.UserName    = "******";
            user.IsSuperUser = false;
            context.Users.Add(user);
            context.SaveChanges();

            Setting setting = new Setting();

            setting.MaxNumEventsLogStorePerVM = 1;
            context.Settings.Add(setting);
            context.SaveChanges();
        }
コード例 #4
0
 public void UpdateVMList(IEnumerable <IVirtualMachine> _list, int _appId)
 {
     using (var context = new CADContext())
     {
         try
         {
             foreach (var _vm in _list)
             {
                 VM vm = new VM();
                 vm = azureHelper.createLocalVMFromAzureVM(_vm, _appId);
                 FindOrCreateVM(vm);
                 vm = null;
             }
             context.SaveChanges();
         }
         catch (Exception ex)
         {
             Log log = new Log();
             log.name      = ex.ToString();
             log.timestamp = DateTime.UtcNow;
             context.Logs.Add(log);
             context.SaveChanges();
         }
     }
 }
コード例 #5
0
        /// <summary>
        /// GetVirtualMachinesByUser
        /// </summary>
        /// <param name="_currentUser"></param>
        /// <returns></returns>
        public JsonResult GetVirtualMachinesByUser(ClaimsPrincipal _currentUser)
        {
            List <VM> vMashines = new List <VM>();

            using (var context = new CADContext())
            {
                try
                {
                    User currentUser = context.Users
                                       .Include(u => u.Dashboard)
                                       .ThenInclude(d => d.DashboardApplications)
                                       .FirstOrDefault(u => u.UserName == _currentUser.Identity.Name);
                    if (currentUser?.Dashboard == null)
                    {
                        return(new JsonResult(new { data = "" }));
                    }

                    var dashboard = context.Dashboards.Include(d => d.DashboardApplications).FirstOrDefault(d => d.DashboardId == currentUser.Dashboard.DashboardId);
                    if (currentUser.Dashboard.DashboardId != 0)
                    {
                        vMashines = VirtualMashinesList.GetVMs(currentUser.Dashboard.DashboardId);
                    }
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }
            return(new JsonResult(new { data = vMashines }));
        }
コード例 #6
0
        public IVirtualMachine GetVMFromAzure(string _vmId)
        {
            IVirtualMachine machine = null;

            using (CADContext context = new CADContext())
            {
                try
                {
                    IAzure      azure;
                    VM          vm   = context.VMs.FirstOrDefault(v => v.VMId == _vmId);
                    Application apps = context.Applications.FirstOrDefault(app => app.AppId == vm.ApplicationId);
                    azure   = GetAzureConnection(apps);
                    machine = azure.VirtualMachines.List().FirstOrDefault(v => v.VMId == _vmId);
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }
            return(machine);
        }
コード例 #7
0
        /// <summary>
        /// GetJOVirtualMachine
        /// </summary>
        /// <param name="jobject"></param>
        /// <returns></returns>
        public JsonResult GetJOVirtualMachine(JObject jobject)
        {
            VM vm = new VM();

            using (CADContext context = new CADContext())
            {
                try
                {
                    IVirtualMachine virtualMachine = GetVMFromAzure(jobject["vmid"].ToString());
                    if (virtualMachine != null)
                    {
                        vm = VirtualMashinesList.FindOrCreateVM(createLocalVMFromAzureVM(virtualMachine));
                    }
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }
            return(new JsonResult(new { data = vm }));
        }
コード例 #8
0
        public async Task StopVirtualMashinesAsync()
        {
            while (true)
            {
                await Task.Delay(30000);

                IsDBLocked = true;
                using (CADContext context = new CADContext())
                {
                    TimeSpan         timeNow = System.DateTime.Now.TimeOfDay;
                    TimeSpan         time    = new TimeSpan(timeNow.Hours, timeNow.Minutes, 0);
                    List <Schedules> VMs     = context.Schedules.Include(s => s.ScheduleVMsList).Where(s => s.StopTime == time).ToList();
                    foreach (var res in VMs)
                    {
                        foreach (var vm in res.ScheduleVMsList)
                        {
                            VM virt = context.VMs.Find(vm.VMId);
                            this.StopVM(virt.VMId.ToString());
                        }
                    }
                }
                IsDBLocked = false;
                GC.Collect();
            }
        }
コード例 #9
0
 public void OnGet()
 {
     Model.User user = new Model.User();
     using (var context = new CADContext())
     {
         if (context.Users.Where(u => u.IsSuperUser == true).Count() == 0)
         {
             user.UserName    = this.User.Identity.Name;
             user.IsSuperUser = true;
             context.Users.Add(user);
             context.SaveChanges();
         }
         if (context.Users.FirstOrDefault(u => u.UserName == this.User.Identity.Name) == null)
         {
             user.UserName    = this.User.Identity.Name;
             user.IsSuperUser = false;
             context.Users.Add(user);
             context.SaveChanges();
         }
         user = context.Users.Include(u => u.Dashboard).FirstOrDefault(u => u.UserName == this.User.Identity.Name);
         if (user.Dashboard != null)
         {
             Title       = user.Dashboard.DashboardName;
             Logo        = user.Dashboard.DashboardLogoUrl;
             DashboardId = user.Dashboard.DashboardId;
         }
     }
 }
コード例 #10
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            using (var ctx = new CADContext())
            {
                Schedules schedules = ctx.Schedules.Find(id);
                schedules.ScheduleVMsList.Clear();
                schedules.Name      = Schedule.Name;
                schedules.StartTime = Schedule.StartTime;
                schedules.StopTime  = Schedule.StopTime;

                var sceduleVMs = ctx.ScheduleVM.Where(s => s.ScheduleId == Schedule.Id).ToList();
                foreach (var res in sceduleVMs)
                {
                    ctx.ScheduleVM.Remove(res);
                }

                foreach (var res in SelectedVmsId)
                {
                    var        vm         = ctx.VMs.Find(res);
                    ScheduleVM scheduleVM = new ScheduleVM();
                    scheduleVM.ScheduleId = 1;
                    scheduleVM.Schedules  = Schedule;
                    scheduleVM.VMId       = vm.Id;
                    scheduleVM.VM         = vm;
                    ctx.ScheduleVM.Add(scheduleVM);
                    Schedule.ScheduleVMsList.Add(scheduleVM);
                }

                ctx.SaveChanges();
            }

            return(RedirectToPage("./Index"));
        }
コード例 #11
0
 public void RemoveActiveVM(int _dashboardId, int _vmId)
 {
     using (var context = new CADContext())
     {
         VM vm = context.VMs.FirstOrDefault(v => v.Id == _vmId);
         if (vm != null)
         {
             RemoveActiveVM(_dashboardId, vm.VMId);
         }
     }
 }
コード例 #12
0
 public void RemoveActiveVM(int _dashboardId, string _vmId)
 {
     using (var context = new CADContext())
     {
         ActiveVM vm = context.ActiveVMs.FirstOrDefault(iv => iv.DashboardId == _dashboardId && iv.VMId == _vmId);
         if (vm != null)
         {
             context.ActiveVMs.Remove(vm);
             context.SaveChanges();
         }
     }
 }
コード例 #13
0
        public async Task <IActionResult> OnPostCleanupLocalVMCacheAsync()
        {
            using (CADContext context = new CADContext())
            {
                var vmList = context.VMs.AsNoTracking().ToList();
                context.VMs.RemoveRange(vmList);
                await context.SaveChangesAsync();
            }

            CleanupResult = "Cleanup successed";
            return(Page());
        }
コード例 #14
0
 public IndexModel(IAzureHelper _azureHelper, CADContext _context, IHostingEnvironment hostingEnvironment)
 {
     _hostingEnvironment = hostingEnvironment;
     azureHelper         = _azureHelper as AzureHelper;
     context             = _context;
     if (context.Settings.FirstOrDefault() == null)
     {
         Setting set = new Setting();
         context.Settings.Add(set);
         context.SaveChanges();
     }
     Message = "Dashboard settings";
 }
コード例 #15
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            switch (SelectedDashboardType)
            {
            case DisplayType.ShowAll:
            {
                azureHelper.GetVirtualMashinesList().UpdateActiveVMs((int)id, new int[0]);
                break;
            }

            case DisplayType.ExcludeType:
            {
                azureHelper.GetVirtualMashinesList().UpdateActiveVMs((int)id, ExcludedVMs);
                break;
            }

            case DisplayType.SelectType:
            {
                azureHelper.GetVirtualMashinesList().UpdateActiveVMs((int)id, SelectedVMs);
                break;
            }
            }

            using (var ctx = new CADContext())
            {
                if (Dashboard.DashboardAnonAccessCode == null)
                {
                    Dashboard.DashboardAnonAccessCode = DashboardHelper.CalculateHash(Dashboard.DashboardName);
                }

                var dash = await ctx.Dashboards.Include(d => d.DashboardApplications).Include(l => l.Links).FirstOrDefaultAsync(d => d.DashboardId == Dashboard.DashboardId);

                dash.DashboardApplications.Clear();
                foreach (var sa in SelectedApplications)
                {
                    DashboardApplication app = new DashboardApplication();
                    app.Dashboard   = Dashboard;
                    app.Application = ctx.Applications.First(a => a.AppId == sa);
                    dash.DashboardApplications.Add(app);
                }
                dash.Links.Clear();
                dash.Links = Dashboard.Links;
                dash.DashboardAnonAccessCode = Dashboard.DashboardAnonAccessCode;
                dash.DashboardName           = Dashboard.DashboardName;
                dash.DashboardLogoUrl        = Dashboard.DashboardLogoUrl;
                dash.DisplayType             = SelectedDashboardType;
                ctx.SaveChanges();
            }
            return(RedirectToPage("./Index"));
        }
コード例 #16
0
        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
                                                       SuperUserRequirement requirement)
        {
            CADContext dbContext = new CADContext();
            var        user      = dbContext.Users.FirstOrDefault(U => U.UserName == context.User.Identity.Name);

            if (user != null)
            {
                if (user.IsSuperUser)
                {
                    context.Succeed(requirement);
                }
            }
            return(Task.CompletedTask);
        }
コード例 #17
0
 public void AddActiveVM(int _dashboardId, string _vmId)
 {
     using (var context = new CADContext())
     {
         ActiveVM vm = context.ActiveVMs.FirstOrDefault(iv => iv.DashboardId == _dashboardId && iv.VMId == _vmId);
         if (vm == null)
         {
             vm             = new ActiveVM();
             vm.DashboardId = _dashboardId;
             vm.VMId        = _vmId;
             context.ActiveVMs.Add(vm);
             context.SaveChanges();
             vm = null;
         }
     }
 }
コード例 #18
0
        public List <VM> GetActiveVMs(int _dashboardId)
        {
            List <VM> list = new List <VM>();

            using (var context = new CADContext())
            {
                foreach (var activeVM in context.ActiveVMs.Where(iv => iv.DashboardId == _dashboardId))
                {
                    var vm = context.VMs.FirstOrDefault(v => v.VMId == activeVM.VMId);
                    if (vm != null)
                    {
                        list.Add(vm);
                    }
                }
            }
            return(list);
        }
コード例 #19
0
        public void UpdateActiveVMs(int _dashboardId, int[] _VMList)
        {
            using (var context = new CADContext())
            {
                var activeList = context.ActiveVMs.Where(v => v.DashboardId == _dashboardId);

                foreach (var vm in activeList)
                {
                    context.ActiveVMs.Remove(vm);
                    context.SaveChanges();
                }

                foreach (int vmId in _VMList)
                {
                    AddActiveVM(_dashboardId, vmId);
                }
                activeList = null;
            }
        }
コード例 #20
0
        /// <summary>
        /// GetDashboardByAccessCode
        /// </summary>
        /// <param name="_accessCode"> _accessCode</param>
        /// <returns></returns>
        public Dashboard GetDashboardByAccessCode(string _accessCode)
        {
            Dashboard dashboard = new Dashboard();

            using (var context = new CADContext())
            {
                try
                {
                    dashboard = context.Dashboards.Include(d => d.DashboardApplications).FirstOrDefault(d => d.DashboardAnonAccessCode == _accessCode);
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }
            return(dashboard);
        }
コード例 #21
0
        private VM SelectVMByVmId(string _vmId)
        {
            VM vm = new VM();

            using (var context = new CADContext())
            {
                try
                {
                    vm = context.VMs.FirstOrDefault(v => v.VMId == _vmId);
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }
            return(vm);
        }
コード例 #22
0
        public List <VM> GetByDashboardId(int _dashboardId, bool _exceptInactive = false)
        {
            List <VM> list      = new List <VM>();
            Dashboard dashboard = new Dashboard();

            using (var context = new CADContext())
            {
                try
                {
                    dashboard = context.Dashboards.Include(vm => vm.DashboardApplications).FirstOrDefault(d => d.DashboardId == _dashboardId);

                    foreach (var app in dashboard.DashboardApplications)
                    {
                        list.AddRange(GetVMsByAppID(app.ApplicationId));
                    }
                    if (_exceptInactive)
                    {
                        List <VM> excludeInactiveList = new List <VM>();
                        foreach (VM vm in list)
                        {
                            if (GetVMs(_dashboardId).Find(v => v.VMId == vm.VMId) == null)
                            {
                                excludeInactiveList.Add(vm);
                            }
                        }
                        list = excludeInactiveList;
                    }
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }
            return(list);
        }
コード例 #23
0
        public List <VM> GetVMsByAppID(int _appId)
        {
            List <VM> list = new List <VM>();

            using (var context = new CADContext())
            {
                try
                {
                    list = context.VMs.Where(vms => vms.ApplicationId == _appId).ToList();
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }

            return(list);
        }
コード例 #24
0
 public void UpdateAllVirtualMashines()
 {
     using (CADContext context = new CADContext())
     {
         var vmList = context.VMs.AsNoTracking().ToList();
         context.VMs.RemoveRange(vmList);
         context.SaveChanges();
     }
     using (CADContext context = new CADContext())
     {
         try
         {
             IAzure azure;
             foreach (var apps in context.Applications)
             {
                 try
                 {
                     azure = GetAzureConnection(apps);
                     var curVMList = azure.VirtualMachines.List();
                     VirtualMashinesList.UpdateVMList(curVMList, apps.AppId);
                     azure = null;
                 }
                 catch
                 {
                     continue;
                 }
             }
         }
         catch (Exception ex)
         {
             Log log = new Log();
             log.name      = ex.ToString();
             log.timestamp = DateTime.UtcNow;
             context.Logs.Add(log);
             context.SaveChanges();
         }
     }
 }
コード例 #25
0
        public static void CleanLogs(CADContext _context)
        {
            var settings = _context.Settings.FirstOrDefault();

            var vmInLogTable = _context.Logs.GroupBy(l => new { l.vmname, l.resourcegroup }).ToList();

            foreach (var vm in vmInLogTable)
            {
                var logs_count = _context.Logs.Where(l => l.vmname == vm.Key.vmname && l.resourcegroup == vm.Key.resourcegroup).Count();
                if (logs_count > settings.MaxNumEventsLogStorePerVM)
                {
                    var vmLastLogRecord = _context.Logs.Where(l => l.vmname == vm.Key.vmname && l.resourcegroup == vm.Key.resourcegroup).OrderByDescending(u => u.timestamp).Take(settings.MaxNumEventsLogStorePerVM).Last();
                    var logsForRemove   = _context.Logs.Where(l => l.vmname == vm.Key.vmname && l.resourcegroup == vm.Key.resourcegroup && l.timestamp < vmLastLogRecord.timestamp).ToList();
                    _context.Logs.RemoveRange(logsForRemove);
                }
            }
            _context.SaveChanges();

            var errorLogsToRemove = _context.Logs.Where(l => string.IsNullOrEmpty(l.vmname)).ToList();

            _context.Logs.RemoveRange(errorLogsToRemove);
            _context.SaveChanges();
        }
コード例 #26
0
        /// <summary>
        /// GetVirtualMachinesByAccessCode
        /// </summary>
        /// <param name="_accessCode"></param>
        /// <returns></returns>
        public List <VM> GetVirtualMachinesByAccessCode(string _accessCode)
        {
            Dashboard dashboard;
            List <VM> vMashines = new List <VM>();

            using (var context = new CADContext())
            {
                try
                {
                    dashboard = context.Dashboards.Include(d => d.DashboardApplications).FirstOrDefault(d => d.DashboardAnonAccessCode == _accessCode);
                    vMashines = VirtualMashinesList.GetVMs(dashboard.DashboardId);
                }
                catch (Exception ex)
                {
                    Log log = new Log();
                    log.name      = ex.ToString();
                    log.timestamp = DateTime.UtcNow;
                    context.Logs.Add(log);
                    context.SaveChanges();
                }
            }
            return(vMashines);
        }
コード例 #27
0
        public IActionResult OnPost()
        {
            if (Dashboard.DashboardAnonAccessCode == null)
            {
                Dashboard.DashboardAnonAccessCode = DashboardHelper.CalculateHash(Dashboard.DashboardName);
            }
            _context.Dashboards.Add(Dashboard);
            _context.SaveChanges();

            using (var ctx = new CADContext())
            {
                var dash = ctx.Dashboards.Include(d => d.DashboardApplications).First(d => d.DashboardId == Dashboard.DashboardId);
                foreach (var sa in SelectedApplications)
                {
                    DashboardApplication app = new DashboardApplication();
                    app.Dashboard   = Dashboard;
                    app.Application = ctx.Applications.First(a => a.AppId == sa);
                    dash.DashboardApplications.Add(app);
                }
                ctx.SaveChanges();
            }
            return(RedirectToPage("./Index"));
        }
コード例 #28
0
 public RepositorioAtualizavel(CADContext contexto) : base(contexto)
 {
 }
コード例 #29
0
 public Repositorio(CADContext contexto)
 {
     Context = contexto;
     Set     = Context.Set <TEntidade>();
 }
コード例 #30
0
 public Repositorio()
 {
     Context = new CADContext();
     Set     = Context.Set <TEntidade>();
 }