public FrmConnectToRemoteServer(SenseConnectDto connectDto, ILogger logger)
 {
     InitializeComponent();
     ConnectDto   = connectDto;
     _logger      = logger;
     AcceptButton = cmdConnect;
 }
        private void cmdConnect_Click(object sender, EventArgs e)
        {
            txtAddress.Text = txtAddress.Text.Trim();

            if (txtAddress.Text.StartsWith("http://"))
            {
                lblErrorMessage.Text = @"Sorry only https is accepted.";
                return;
            }

            if (txtAddress.Text.StartsWith("https://"))
            {
                txtAddress.Text = txtAddress.Text.Substring(8);
            }

            lblErrorMessage.Text = @"Trying to connect to server.";
            if (string.IsNullOrEmpty(txtAddress.Text))
            {
                txtAddress.BackColor = Color.FromArgb(255, 255, 69, 0);
                return;
            }

            Application.DoEvents();
            ConnectDto.SenseHostName = txtAddress.Text;
            ConnectDto = new ConnectToSenseHelper(_logger).TryAccessSenseApi(ConnectDto);
            if (ConnectDto.SenseServerLocationFinderStatus == SenseServerLocationFinderStatus.Success)
            {
                Close();
                DialogResult = DialogResult.OK;
            }

            lblErrorMessage.Text = ConnectDto.SenseServerLocationFinderStatus.GetDescription() + @"!";
        }
예제 #3
0
        private List <Task> GetTasksForDeadInstallation(SenseConnectDto dto)
        {
            var taskList = new List <Task>();

            if (!ServiceVariables.AllowArchivedLogs)
            {
                return(taskList);
            }

            try
            {
                var readerTaskHelper = new SenseLogReaderTasks(_logger, LogDirectorDone, _notify);
                dto = PathToSenseLogFolderDlg(dto);
                if (string.IsNullOrEmpty(dto.PathToLocalSenseLogFolder))
                {
                    _logger.Add("No Sense log folder selected. Tool has to run again. Ending.");
                    _notify("No Sense Log folder. Please run tool again.", MessageLevels.Error, null);
                    _onFinished(null, null, this);
                    return(null);
                }
                taskList.Add(readerTaskHelper.ReadArchivedLogs(dto.PathToLocalSenseLogFolder, ServiceVariables));
            }
            catch (Exception ex)
            {
                _logger.Add("Failed retreiving Archived folder location from user. " + ex);
            }
            return(taskList);
        }
예제 #4
0
        private SenseConnectDto ShowConnectionFailuresDialogue(SenseConnectDto dto)
        {
            var dlg = new FrmConnectionIssues(dto, _logger);

            ShowDialogue(dlg);

            if (dlg.DialogResult == DialogResult.Abort)
            {
                dlg.ConnectDto.AbortAndExit = true;
            }
            dto = dlg.ConnectDto;
            return(dto);
        }
        private void ShowConnToRemoteHost()
        {
            _logger.Add($"Conn issue form is showing the Connect to remote server form");
            var dlg = new FrmConnectToRemoteServer(ConnectDto, _logger);

            dlg.ShowDialogueCenterParent(this);
            ConnectDto = dlg.ConnectDto;
            if (ConnectDto.SenseServerLocationFinderStatus != SenseServerLocationFinderStatus.Success)
            {
                _logger.Add($"Conn issue form is trying to access the location {ConnectDto.SenseHostName} and failing");
                return;
            }
            _logger.Add($"Conn issue form successfully accessed the new server {ConnectDto.SenseHostName}");
            Close();
            DialogResult = DialogResult.OK;
        }
예제 #6
0
        public FrmConnectionIssuesInfo(SenseConnectDto dto)
        {
            InitializeComponent();
            switch (dto.SenseServerLocationFinderStatus)
            {
            case SenseServerLocationFinderStatus.NoSertificateFound:
                _detailedConnErrMsg = "We haven't found any Qlik Sense certificate on this machine. Please run this on the Qlik Sense server that has the issue, or the central node.";
                break;

            case SenseServerLocationFinderStatus.Forbidden:
                _detailedConnErrMsg = "We can't access Qlik Sense. You should run this application with the service account that is running Qlik Sense.";
                break;

            default:
                _detailedConnErrMsg = "We can't access Qlik Sense. Please run this on the Qlik Sense server that has the issue. We have no further details.";
                break;
            }
        }
예제 #7
0
        //todo: brake out to fancy winforms broker
        private SenseConnectDto ShowSenseLogFolderDialogue(SenseConnectDto dto)
        {
            string       pathToFolder = string.Empty;
            string       previousPath = @"C:\ProgramData\Qlik\Sense\Log";
            DialogResult dlgRes       = DialogResult.OK;

            while (string.IsNullOrEmpty(pathToFolder) && dlgRes == DialogResult.OK)
            {
                string invalidPathString = string.Empty;


                _owner.Invoke(new Action(() =>
                {
                    var a = new SuperInputDialogue(
                        title: "Path to Qlik Sense Log Folder",
                        text: invalidPathString + "Please write the correct path to the Qlik Sense logs.",
                        defaultValue: previousPath
                        )
                    {
                        StartPosition = FormStartPosition.CenterParent
                    };
                    a.ShowDialog(_owner);
                    previousPath = a.InputTextValue;
                    dlgRes       = a.DialogResult;
                    if (dlgRes == DialogResult.OK)
                    {
                        if (Directory.Exists(a.InputTextValue))
                        {
                            pathToFolder = a.InputTextValue;
                        }
                    }

                    invalidPathString = "Invalid Path. ";
                }));
            }
            dto.PathToLocalSenseLogFolder = pathToFolder;
            return(dto);
        }
예제 #8
0
        private async Task <bool> RunCollectionFlow()
        {
            List <Task> taskList;

            _logger.Add($"Setting up connection to Sense Server on {ServiceVariables.DnsHostName}");
            var dto = new SenseConnectDto {
                SenseHostName = ServiceVariables.DnsHostName, ConnectToSenseApiManuallyDlg = ConnectToSenseApiManuallyDlg
            };

            await Task.Run(() =>
            {
                var a = new ConnectToSenseHelper(_logger).ConnectToSenseApi(dto);
                dto   = a;
                _notify("Connected to Qlik Sense Installation", MessageLevels.Ok, "Connecting");
            }).ConfigureAwait(false);

            if (dto == null || dto.AbortAndExit)
            {
                AbortAndExit = true;
                _logger.Add("Aborting connection requested.");
                _notify("Aborting.", MessageLevels.Error, null);
                _onFinished(null, null, this);
                return(false);
            }


            if (dto.RunWithDeadInstallation)
            {
                _logger.Add("Running with local folders only");
                taskList = GetTasksForDeadInstallation(dto);
                if (taskList == null)
                {
                    return(false);
                }
                taskList.AddRange(GetTasksForWindows());
            }
            else
            {
                taskList = await GetTasksForFullRun(dto).ConfigureAwait(false);

                taskList.AddRange(GetTasksForWindows());
            }

            await Task.WhenAll(taskList).ContinueWith(p =>
            {
                _logger.Add("Finished collection part");
                _logger.Add(JsonConvert.SerializeObject(ServiceVariables));
                Log.Shutdown();

                Task.Delay(TimeSpan.FromSeconds(2)).ConfigureAwait(false);

                var pathToZip = _collectorHelper.CreateZipFile(ServiceVariables);
                ServiceVariables.CollectorOutput.ZipFile = pathToZip;
                _notify(pathToZip, MessageLevels.Ok, null);
                try
                {
                    Task.Delay(TimeSpan.FromSeconds(2)).ContinueWith(task =>
                    {    // give the system time to flush the filesystem.
                        FileSystem.Singleton.DeleteDirectory(ServiceVariables.OutputFolderPath);
                    });
                }
                catch (Exception e)
                {
                    Trace.WriteLine(e);    //nothing to log home about :( the log is already zipped.
                }

                //if (Settings.UseOnlineDelivery)
                //        var transport = new Sender(Settings.Key, Settings.SendId);
                //        transport.Transport(Settings.OnlineReccever, Settings.CollectorOutput.ZipFile);

                AbortAndExit = false;
                _onFinished(null, null, this);
            }
                                                      ).ConfigureAwait(false);

            return(true);
        }
예제 #9
0
        private async Task <List <Task> > GetTasksForFullRun(SenseConnectDto dto)
        {
            var senseApi = new SenseApiCollector(_logger);
            var taskList = new List <Task>();

            _logger.Add("Sense api connected");
            SenseEnums statusEnums = null;

            QlikSenseMachineInfo[] qlikSenseMachineInfos = null;

            await Task.Run(() => { statusEnums = new SenseEnums(dto.SenseApiSupport); }).ConfigureAwait(false);

            _logger.Add("Sense Machine infos collected");

            var archivedLogsLocation = string.Empty;

            if (statusEnums == null)
            {
                throw new Exception("Failed accessing sense");
            }
            await Task.Run(() => qlikSenseMachineInfos = GetQlikSenseMachineInfos(senseApi, dto.SenseApiSupport, statusEnums)).ConfigureAwait(false);

            try
            {
                archivedLogsLocation = senseApi.GetQlikSenseArchivedFolderLocation(dto.SenseApiSupport);
                _logger.Add($"Accessing archived logs at {archivedLogsLocation}.");
                if (!_filesystem.DirectoryExists(archivedLogsLocation))
                {
                    archivedLogsLocation = PathToArchivedLogsDlg.Invoke(archivedLogsLocation);
                }
            }
            catch (Exception ex)
            {
                _logger.Add("Failed retreiving Archived folder location from API " + ex);
            }

            taskList.Add(Task.Run(async() =>
            {
                if (ServiceVariables.AllowSenseInfo)
                {
                    try
                    {
                        var nodeCount = qlikSenseMachineInfos?.Length ?? 0;
                        _notify($"Collecting Information from {nodeCount} Qlik Sense {(nodeCount > 1 ? "nodes" : "node")}.", MessageLevels.Animate, "SenseInfo");
                        _logger.Add($"Running CommandLineRemoteTasks.");
                        await RunCommandLineRemoteTasks(qlikSenseMachineInfos).ConfigureAwait(false);
                        _logger.Add($"Running GettingAllSettingsFiles.");
                        await RunGettingAllSettingsFiles(qlikSenseMachineInfos).ConfigureAwait(false);

                        _notify("Collecting Qlik Sense Information.", MessageLevels.Animate, "SenseInfo");
                        _logger.Add($"Running Get all api info.");
                        _collectorHelper.WriteContentToFile(qlikSenseMachineInfos, "qlikSenseMachineInfo");
                        _collectorHelper.RunAction(() => senseApi.GetQlikSenseServiceInfos(dto.SenseApiSupport, statusEnums).ToArray(), "qlikSenseServiceInfo");
                        _collectorHelper.RunAction(() => senseApi.GetQrsAbout(dto.SenseApiSupport, statusEnums), "QrsAbout");
                        _collectorHelper.RunAction(() => senseApi.ExecuteCalAgent(dto.SenseApiSupport, statusEnums), "CalInfo");
                        _collectorHelper.RunAction(() => senseApi.ExecuteLicenseAgent(dto.SenseApiSupport, statusEnums), "LicenseAgent");
                        _collectorHelper.RunAction(() => senseApi.GetAboutSystemInfo(dto.SenseApiSupport, statusEnums), "AboutSystemInfo");
                        _collectorHelper.RunAction(() => senseApi.GetAboutComponents(dto.SenseApiSupport, statusEnums), "AboutComponents");
                        _collectorHelper.RunAction(() => senseApi.GetQrsDataconnections(dto.SenseApiSupport, statusEnums), "DataConnections");
                        _collectorHelper.RunAction(() => senseApi.GetQrsServiceCluster(dto.SenseApiSupport, statusEnums), "ServiceCluster");
                        _collectorHelper.RunAction(() => senseApi.GetQrsProxyService(dto.SenseApiSupport, statusEnums), "ProxyService");
                        _collectorHelper.RunAction(() => senseApi.GetQrsAppList(dto.SenseApiSupport, statusEnums), "AppList");
                        _collectorHelper.RunAction(() => senseApi.GetQrsDataConnections(dto.SenseApiSupport, statusEnums), "dataconnectionList");

                        _logger.Add($"Finished senseInfo");
                        _notify("Collected Qlik Sense Information.", MessageLevels.Ok, "SenseInfo");
                    }
                    catch (Exception e)
                    {
                        _logger.Add("Failed getting sense info", e);
                        _notify("Failed collecting Qlik Sense Information.", MessageLevels.Error, "SenseInfo");
                    }
                }
            }));
            var readerTaskHelper = new SenseLogReaderTasks(_logger, LogDirectorDone, _notify);

            if (ServiceVariables.AllowRemoteLogs)
            {
                taskList.Add(readerTaskHelper.ReadRemoteLogs(qlikSenseMachineInfos, ServiceVariables));
            }

            if (ServiceVariables.AllowArchivedLogs)
            {
                taskList.Add(readerTaskHelper.ReadArchivedLogs(archivedLogsLocation, ServiceVariables));
            }

            return(taskList);
        }
 public FrmConnectionIssues(SenseConnectDto dto, ILogger logger)
 {
     InitializeComponent();
     ConnectDto = dto;
     _logger    = logger;
 }