Exemplo n.º 1
0
        //---------------------------------------------------------------------
        // Commands.
        //---------------------------------------------------------------------

        private async void GenerateCredentials(IProjectExplorerNode node)
        {
            try
            {
                if (node is IProjectExplorerVmInstanceNode vmNode)
                {
                    await this.serviceProvider.GetService <ICredentialsService>()
                    .GenerateCredentialsAsync(
                        this.window,
                        vmNode.Reference,
                        vmNode.SettingsEditor)
                    .ConfigureAwait(true);
                }
            }
            catch (Exception e) when(e.IsCancellation())
            {
                // Ignore.
            }
            catch (Exception e)
            {
                this.serviceProvider
                .GetService <IExceptionDialog>()
                .Show(this.window, "Generating credentials failed", e);
            }
        }
Exemplo n.º 2
0
        private void CreateReport(IProjectExplorerNode contextNode)
        {
            var dialog = this.serviceProvider.GetService <CreateReportDialog>();

            if (contextNode is IProjectExplorerProjectNode projectNode)
            {
                dialog.SelectProjectId(projectNode.ProjectId);
            }

            var mainForm = this.serviceProvider.GetService <IMainForm>();

            if (dialog.ShowDialog(mainForm.Window) == DialogResult.Cancel ||
                !dialog.SelectedProjectIds.Any())
            {
                return;
            }

            var projectIds = dialog.SelectedProjectIds;

            var builder = new AuditLogReportBuilder(
                this.serviceProvider.GetService <IAuditLogAdapter>(),
                this.serviceProvider.GetService <IComputeEngineAdapter>(),
                projectIds,
                dialog.SelectedStartDate);

            var view = new ReportPaneView(
                ReportViewModel.CreateReportName(projectIds),
                builder,
                serviceProvider);

            view.ShowOrActivate(
                mainForm.MainPanel,
                WeifenLuo.WinFormsUI.Docking.DockState.Document);
        }
Exemplo n.º 3
0
        private void CreateReport(IProjectExplorerNode contextNode)
        {
            var dialog = this.serviceProvider.GetService <CreateReportDialog>();

            if (contextNode is IProjectExplorerProjectNode projectNode)
            {
                dialog.SelectProjectId(projectNode.ProjectId);
            }

            var mainForm = this.serviceProvider.GetService <IMainForm>();

            if (dialog.ShowDialog(mainForm.Window) == DialogResult.Cancel ||
                !dialog.SelectedProjectIds.Any())
            {
                return;
            }

            var projectIds = dialog.SelectedProjectIds;

            var builder = new ReportBuilder(
                this.serviceProvider.GetService <IAuditLogAdapter>(),
                this.serviceProvider.GetService <IAuditLogStorageSinkAdapter>(),
                this.serviceProvider.GetService <IComputeEngineAdapter>(),
                AuditLogSources.Api | AuditLogSources.StorageExport,
                projectIds,
                dialog.SelectedStartDate);

            var view = new ReportPaneView(
                ReportViewModel.CreateReportName(projectIds),
                builder,
                serviceProvider);

            view.ShowWindow();
        }
Exemplo n.º 4
0
 private static CommandState GetToolbarCommandStateWhenRunningInstanceRequired(
     IProjectExplorerNode node)
 {
     return(node is IProjectExplorerVmInstanceNode vmNode && vmNode.IsRunning
         ? CommandState.Enabled
         : CommandState.Disabled);
 }
Exemplo n.º 5
0
 private static CommandState GetContextMenuCommandStateWhenRunningInstanceRequired(
     IProjectExplorerNode node)
 {
     if (node is IProjectExplorerVmInstanceNode vmNode && !vmNode.IsWindowsInstance)
     {
         return(vmNode.IsRunning
             ? CommandState.Enabled
             : CommandState.Disabled);
     }
Exemplo n.º 6
0
        public IPersistentSettingsCollection <ConnectionSettingsBase> GetConnectionSettings(
            IProjectExplorerNode node)
        {
            if (node is IProjectExplorerProjectNode projectNode)
            {
                return(this.repository.GetProjectSettings(projectNode.Project.ProjectId)
                       .ToPersistentSettingsCollection(s => this.repository.SetProjectSettings(s)));
            }
            else if (node is IProjectExplorerZoneNode zoneNode)
            {
                var projectSettings = this.repository.GetProjectSettings(
                    zoneNode.Zone.ProjectId);
                var zoneSettings = this.repository.GetZoneSettings(
                    zoneNode.Zone.ProjectId,
                    zoneNode.Zone.Name);

                // Apply overlay to get effective settings.
                return(projectSettings
                       .OverlayBy(zoneSettings)
                       .ToPersistentSettingsCollection(s => this.repository.SetZoneSettings(s)));
            }
            else if (node is IProjectExplorerInstanceNode vmNode)
            {
                var projectSettings = this.repository.GetProjectSettings(
                    vmNode.Instance.ProjectId);
                var zoneSettings = this.repository.GetZoneSettings(
                    vmNode.Instance.ProjectId,
                    vmNode.Instance.Zone);
                var instanceSettings = this.repository.GetVmInstanceSettings(
                    vmNode.Instance.ProjectId,
                    vmNode.Instance.Name);

                var supportsRdp = vmNode.IsRdpSupported();
                var supportsSsh = vmNode.IsSshSupported();

                // Apply overlay to get effective settings.
                return(projectSettings
                       .OverlayBy(zoneSettings)
                       .OverlayBy(instanceSettings)

                       // Save back to same repository.
                       .ToPersistentSettingsCollection(s => this.repository.SetVmInstanceSettings(s))

                       // Hide any settings that are not applicable to the operating system.
                       .ToFilteredSettingsCollection((coll, setting) => supportsRdp
                        ? coll.IsRdpSetting(setting)
                        : supportsSsh?coll.IsSshSetting(setting) : false));
            }
            else
            {
                throw new ArgumentException("Unsupported node type: " + node.GetType().Name);
            }
        }
Exemplo n.º 7
0
        //---------------------------------------------------------------------
        // ProjectExplorerTrackingToolWindow.
        //---------------------------------------------------------------------

        protected override Task SwitchToNodeAsync(IProjectExplorerNode node)
        {
            if (node is IProjectExplorerInstanceNode vmNode)
            {
                this.instanceNameLabel.Text = vmNode.Instance.Name;
            }
            else
            {
                // We cannot handle other types or node, so ignore.
            }

            return(Task.CompletedTask);
        }
        protected void OnProjectExplorerNodeSelected(IProjectExplorerNode node)
        {
            using (ApplicationTraceSources.Default.TraceMethod().WithParameters(node, this.IsUserVisible))
            {
                if (!this.IsUserVisible)
                {
                    // The window is currently not visible to the user, so
                    // do not bother updating it immediately.
                    this.ignoredNode = node;

                    ApplicationTraceSources.Default.TraceVerbose(
                        "Ignoring switch to {0} because window is not visible", node);

                    return;
                }
                else
                {
                    this.ignoredNode = null;
                }

                SwitchToNodeAsync(node)
                .ContinueWith(t =>
                {
                    try
                    {
                        t.Wait();
                    }
                    catch (Exception e)
                    {
                        this.exceptionDialog.Show(this, "Loading data failed", e);
                    }
                },
                              CancellationToken.None,
                              TaskContinuationOptions.None,

                              // Continue on UI thread.
                              // Note that there's a bug in the CLR that can cause
                              // TaskScheduler.FromCurrentSynchronizationContext() to become null.
                              // Therefore, use a task scheduler object captured previously.
                              // Cf. https://stackoverflow.com/questions/4659257/
                              this.taskScheduler);
            }
        }
        public ConnectionSettingsBase GetConnectionSettings(IProjectExplorerNode node)
        {
            if (node is IProjectExplorerProjectNode projectNode)
            {
                return(this.repository.GetProjectSettings(projectNode.ProjectId));
            }
            else if (node is IProjectExplorerZoneNode zoneNode)
            {
                var projectSettings = this.repository.GetProjectSettings(
                    zoneNode.ProjectId);
                var zoneSettings = this.repository.GetZoneSettings(
                    zoneNode.ProjectId,
                    zoneNode.ZoneId);

                // Apply overlay to get effective settings.
                return(projectSettings
                       .OverlayBy(zoneSettings));
            }
            else if (node is IProjectExplorerVmInstanceNode vmNode)
            {
                var projectSettings = this.repository.GetProjectSettings(
                    vmNode.ProjectId);
                var zoneSettings = this.repository.GetZoneSettings(
                    vmNode.ProjectId,
                    vmNode.ZoneId);
                var instanceSettings = this.repository.GetVmInstanceSettings(
                    vmNode.ProjectId,
                    vmNode.InstanceName);

                // Apply overlay to get effective settings.
                return(projectSettings
                       .OverlayBy(zoneSettings)
                       .OverlayBy(instanceSettings));
            }
            else
            {
                throw new ArgumentException("Unsupported node type: " + node.GetType().Name);
            }
        }
Exemplo n.º 10
0
 public ConnectionSettingsEditor GetConnectionSettingsEditor(IProjectExplorerNode node)
 {
     if (node is IProjectExplorerProjectNode projectNode)
     {
         return(GetProjectConnectionSettingsEditor(projectNode.ProjectId));
     }
     else if (node is IProjectExplorerZoneNode zoneNode)
     {
         return(GetZoneConnectionSettingsEditor(zoneNode.ProjectId, zoneNode.ZoneId));
     }
     else if (node is IProjectExplorerVmInstanceNode vmNode)
     {
         return(GetVmInstanceConnectionSettingsEditor(
                    vmNode.ProjectId,
                    vmNode.ZoneId,
                    vmNode.InstanceName));
     }
     else
     {
         throw new ArgumentException("Unsupported node type: " + node.GetType().Name);
     }
 }
Exemplo n.º 11
0
 private async void Connect(IProjectExplorerNode node)
 {
     try
     {
         if (node is IProjectExplorerVmInstanceNode vmNode)
         {
             await this.serviceProvider
             .GetService <IapRdpConnectionService>()
             .ActivateOrConnectInstanceAsync(vmNode)
             .ConfigureAwait(true);
         }
     }
     catch (Exception e) when(e.IsCancellation())
     {
         // Ignore.
     }
     catch (Exception e)
     {
         this.serviceProvider
         .GetService <IExceptionDialog>()
         .Show(this.window, "Connecting to VM instance failed", e);
     }
 }
Exemplo n.º 12
0
 public void OpenLogs(IProjectExplorerNode node)
 {
     if (node is IProjectExplorerVmInstanceNode vmNode)
     {
         OpenLogs(
             vmNode.ProjectId,
             "resource.type=\"gce_instance\"\n" +
             $"resource.labels.instance_id=\"{vmNode.InstanceId}\"");
     }
     else if (node is IProjectExplorerZoneNode zoneNode)
     {
         OpenLogs(
             zoneNode.ProjectId,
             "resource.type=\"gce_instance\"\n" +
             $"resource.labels.zone=\"{zoneNode.ZoneId}\"");
     }
     else if (node is IProjectExplorerProjectNode projectNode)
     {
         OpenLogs(
             projectNode.ProjectId,
             "resource.type=\"gce_instance\"");
     }
 }
        //---------------------------------------------------------------------
        // IConnectionSettingsService.
        //---------------------------------------------------------------------

        public bool IsConnectionSettingsAvailable(IProjectExplorerNode node)
        {
            return(node is IProjectExplorerProjectNode ||
                   node is IProjectExplorerZoneNode ||
                   (node is IProjectExplorerVmInstanceNode vmNode && vmNode.IsWindowsInstance));
        }
        //---------------------------------------------------------------------
        // Overridables.
        //
        // NB. These methods should be abstract, but the forms designer does not like
        // abstract base classes for forms.
        //---------------------------------------------------------------------

        protected virtual Task SwitchToNodeAsync(IProjectExplorerNode node)
        {
            throw new NotImplementedException();
        }
 public ProjectExplorerNodeSelectedEvent(IProjectExplorerNode selectedNode)
 {
     this.SelectedNode = selectedNode;
 }
Exemplo n.º 16
0
 internal ProjectExplorerNodeSelectedEvent(IProjectExplorerNode selectedNode)
 {
     this.SelectedNode = selectedNode;
 }
Exemplo n.º 17
0
        public static async Task <PackageInventoryModel> LoadAsync(
            IInventoryService inventoryService,
            PackageInventoryType inventoryType,
            IProjectExplorerNode node,
            CancellationToken token)
        {
            IEnumerable <GuestOsInfo> inventory;

            try
            {
                if (node is IProjectExplorerVmInstanceNode vmNode)
                {
                    var info = await inventoryService.GetInstanceInventoryAsync(
                        vmNode.Reference,
                        token)
                               .ConfigureAwait(false);

                    inventory = info != null
                        ? new GuestOsInfo[] { info }
                        : Enumerable.Empty <GuestOsInfo>();
                }
                else if (node is IProjectExplorerZoneNode zoneNode)
                {
                    inventory = await inventoryService.ListZoneInventoryAsync(
                        new ZoneLocator(zoneNode.ProjectId, zoneNode.ZoneId),
                        OperatingSystems.Windows,
                        token)
                                .ConfigureAwait(false);
                }
                else if (node is IProjectExplorerProjectNode projectNode)
                {
                    inventory = await inventoryService.ListProjectInventoryAsync(
                        projectNode.ProjectId,
                        OperatingSystems.Windows,
                        token)
                                .ConfigureAwait(false);
                }
                else
                {
                    // Unknown/unsupported node.
                    return(null);
                }
            }
            catch (Exception e) when(e.Unwrap() is GoogleApiException apiEx &&
                                     apiEx.IsConstraintViolation())
            {
                //
                // Reading OS inventory data can fail because of a
                // `compute.disableGuestAttributesAccess` constraint.
                //
                TraceSources.IapDesktop.TraceWarning(
                    "Failed to load OS inventory data: {0}", e);

                inventory = Enumerable.Empty <GuestOsInfo>();
            }

            return(PackageInventoryModel.FromInventory(
                       node.DisplayName,
                       inventoryType,
                       inventory));
        }
Exemplo n.º 18
0
        //---------------------------------------------------------------------
        // IConnectionSettingsService.
        //---------------------------------------------------------------------

        public bool IsConnectionSettingsAvailable(IProjectExplorerNode node)
        {
            return(node is IProjectExplorerProjectNode ||
                   node is IProjectExplorerZoneNode ||
                   node is IProjectExplorerInstanceNode);
        }
Exemplo n.º 19
0
        //---------------------------------------------------------------------
        // ProjectExplorerTrackingToolWindow.
        //---------------------------------------------------------------------

        protected override async Task SwitchToNodeAsync(IProjectExplorerNode node)
        {
            Debug.Assert(!InvokeRequired, "running on UI thread");
            await this.viewModel.SwitchToModelAsync(node)
            .ConfigureAwait(true);
        }
Exemplo n.º 20
0
 private static CommandState GetContextMenuCommandStateWhenRunningInstanceRequired(IProjectExplorerNode node)
 {
     if (node is IProjectExplorerInstanceNode vmNode)
     {
         return(vmNode.IsRunning
             ? CommandState.Enabled
             : CommandState.Disabled);
     }
     else
     {
         return(CommandState.Unavailable);
     }
 }