Beispiel #1
0
        private void StartPluginInternal(CancellationToken token)
        {
            Status = StatusEnum.Connecting;
            while (Status != StatusEnum.Connected && !token.IsCancellationRequested)
            {
                try
                {
                    TfsApis    tfsApis    = ConnectionCreator.CreateTfsConnection(_connectionDetails);
                    OctaneApis octaneApis = ConnectionCreator.CreateOctaneConnection(_connectionDetails);

                    _taskManager = new OctaneTaskManager(tfsApis, octaneApis);
                    _taskManager.Start();
                    _queuesManager = new QueuesManager(tfsApis, octaneApis);
                    _queuesManager.Start();

                    _initFailCounter = 0;
                    Status           = StatusEnum.Connected;
                }
                catch (Exception ex)
                {
                    Log.Error($"Error in StartPlugin : {ex.Message}", ex);
                    if (_queuesManager != null)
                    {
                        _queuesManager.ShutDown();
                        _queuesManager = null;
                    }
                    if (_taskManager != null)
                    {
                        _taskManager.ShutDown();
                        _taskManager = null;
                    }
                }

                //Sleep till next retry
                if (Status != StatusEnum.Connected)
                {
                    int initTimeoutIndex   = Math.Min((_initFailCounter / 3), _initTimeoutInMinutesArr.Length - 1);
                    int initTimeoutMinutes = _initTimeoutInMinutesArr[initTimeoutIndex];
                    Log.Info($"Wait {initTimeoutMinutes} minute(s) till next initialization attempt...");
                    Thread.Sleep(initTimeoutMinutes * 1000 * 60);
                    _initFailCounter++;
                }
            }
        }
Beispiel #2
0
        private void TestConnectionButton_OnClick(object sender, RoutedEventArgs e)
        {
            NetworkSettings.EnableAllSecurityProtocols();
            NetworkSettings.IgnoreServerCertificateValidation();
            RestConnector.AwaitContinueOnCapturedContext = false;

            ReadFields();
            try
            {
                ConnectionCreator.CheckMissingValues(_conDetails);
                ConnectionCreator.CreateOctaneConnection(_conDetails);
                ConnectionCreator.CreateTfsConnection(_conDetails);
            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message, "ALM Octane", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
                ErrorMessageWindow.Show("ALM Octane", ex.Message);
                return;
            }

            Helper.CheckedConnection = true;

            MessageBox.Show("Connection successfull", "ALM Octane", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK);
        }
Beispiel #3
0
        public RestBase()
        {
            Get["/"] = _ =>
            {
                String view = GetView("console.html");
                return(view);
            };

            Get["/status"] = _ =>
            {
                Dictionary <string, object> map = new Dictionary <string, object>();
                map["pluginStatus"]       = PluginManager.GetInstance().Status.ToString();
                map["pluginVersion"]      = Helpers.GetPluginVersion();
                map["tfsVersion"]         = RunModeManager.GetInstance().TfsVersion.ToString();
                map["generalEventsQueue"] = PluginManager.GetInstance().GeneralEventsQueue.Count;
                map["scmEventsQueue"]     = PluginManager.GetInstance().ScmEventsQueue.Count;
                map["testResultsQueue"]   = PluginManager.GetInstance().TestResultsQueue.Count;

                map["isLocal"] = AllowConfigurationModifyAccess(Request);

                return(map);
            };

            Post["/build-event/"] = _ =>
            {
                RunModeManager runModeManager = RunModeManager.GetInstance();
                if (runModeManager.RunMode == PluginRunMode.ConsoleApp)
                {
                    HandleBuildEvent();
                }

                return("Received");
            };

            Get["/logs/{logType}/{logId}"] = parameters =>
            {
                return(HandleGetLogRequest(parameters.logType, parameters.logId));
            };

            Get["/logs"] = parameters =>
            {
                String view = GetView("logs.html");
                return(view);
                //return HandleGetLogListRequest();
            };

            Get["/logs/download/all"] = _ =>
            {
                string zipPath  = CreateZipFileFromLogFiles();
                string fileName = Path.GetFileName(zipPath);
                DeleteTempZipFileWithDelay(zipPath);

                var file     = new FileStream(zipPath, FileMode.Open);
                var response = new StreamResponse(() => file, MimeTypes.GetMimeType(fileName));
                return(response.AsAttachment(fileName));
            };

            Post["/config", AllowConfigurationModifyAccess] = _ =>
            {
                var configStr = Context.Request.Body.AsString();
                Log.Debug($"Received new configuration");//dont log received log configuration as it contains plain passwords
                var config = JsonHelper.DeserializeObject <ConnectionDetails>(configStr);
                try
                {
                    ConnectionCreator.CheckMissingValues(config);
                    ConfigurationManager.ResetSensitiveInfo(config);
                    ConfigurationManager.WriteConfig(config);
                }
                catch (Exception e)
                {
                    string msg = "Failed to save configuration" + e.Message;
                    Log.Error(msg, e);
                    return(new TextResponse(msg).WithStatusCode(HttpStatusCode.BadRequest));
                }

                return("Configuration changed");
            };

            Post["/config/test", AllowConfigurationModifyAccess] = _ =>
            {
                try
                {
                    var configStr = Context.Request.Body.AsString();
                    var config    = JsonHelper.DeserializeObject <ConnectionDetails>(configStr);

                    ConnectionCreator.CheckMissingValues(config);
                    ConfigurationManager.ResetSensitiveInfo(config);
                    ConnectionCreator.CheckProxySettings(config.TfsLocation);
                    ConnectionCreator.CheckProxySettings(config.ALMOctaneUrl);
                    ConnectionCreator.CreateTfsConnection(config);
                    ConnectionCreator.CreateOctaneConnection(config);
                }
                catch (Exception e)
                {
                    return(new TextResponse(e.Message).WithStatusCode(HttpStatusCode.BadRequest));
                }

                return("");
            };

            Get["/config"] = _ =>
            {
                if (AllowConfigurationModifyAccess(Request))
                {
                    String            view = GetView("config.html");
                    ConnectionDetails conf = null;
                    try
                    {
                        conf = ConfigurationManager.Read(false).GetInstanceWithoutSensitiveInfo();
                    }
                    catch (FileNotFoundException)
                    {
                        conf             = new ConnectionDetails();
                        conf.TfsLocation = ConnectionCreator.GetTfsLocationFromHostName();
                    }

                    string confJson = JsonHelper.SerializeObject(conf);
                    view = view.Replace("//{defaultConf}", "var defaultConf =" + confJson);

                    return(view);
                }
                else
                {
                    string prefix = "Configuration is read-only. To modify configuration, access http://localhost:4567/config on the TFS machine.";
                    string config = JsonHelper.SerializeObject(ConfigurationManager.Read(false).GetInstanceWithoutSensitiveInfo(), true);

                    return(new TextResponse(prefix + Environment.NewLine + config));
                }
            };

            Get["/proxy"] = _ =>
            {
                if (AllowConfigurationModifyAccess(Request))
                {
                    String       view = GetView("proxy.html");
                    ProxyDetails conf = null;
                    try
                    {
                        conf = ProxyManager.Read(false).GetInstanceWithoutSensitiveInfo();
                    }
                    catch (FileNotFoundException)
                    {
                        conf = new ProxyDetails();
                    }

                    string confJson = JsonHelper.SerializeObject(conf);
                    view = view.Replace("//{defaultConf}", "var defaultConf =" + confJson);

                    return(view);
                }
                else
                {
                    string prefix = "Proxy is read-only. To modify proxy, access http://localhost:4567/proxy on the TFS machine.";
                    string config = JsonHelper.SerializeObject(ProxyManager.Read(false).GetInstanceWithoutSensitiveInfo(), true);

                    return(new TextResponse(prefix + Environment.NewLine + config));
                }
            };

            Post["/proxy", AllowConfigurationModifyAccess] = _ =>
            {
                var configStr = Context.Request.Body.AsString();
                Log.Debug($"Received new proxy settings");//dont log received log configuration as it contains plain passwords
                try
                {
                    var proxyDetails = JsonHelper.DeserializeObject <ProxyDetails>(configStr);
                    ConnectionCreator.CheckMissingValues(proxyDetails);
                    ProxyManager.ResetSensitiveInfo(proxyDetails);
                    ProxyManager.WriteConfig(proxyDetails);
                }
                catch (Exception e)
                {
                    string msg = "Failed to save proxy settings: " + e.Message;
                    Log.Error(msg, e);
                    return(new TextResponse(msg).WithStatusCode(HttpStatusCode.BadRequest));
                }

                return("Configuration changed");
            };

            Get["/resources/{resourceName}"] = parameters =>
            {
                var    assembly     = Assembly.GetExecutingAssembly();
                var    resourceName = $"{PATH_TO_RESOURCE}.RestServer.Views.Resources.{parameters.resourceName}";
                Stream stream       = assembly.GetManifestResourceStream(resourceName);
                if (stream == null)
                {
                    return(new TextResponse("Resource not found").WithStatusCode(HttpStatusCode.NotFound));
                }

                var response = new StreamResponse(() => stream, MimeTypes.GetMimeType(resourceName));
                return(response);
            };

            Post["/start", AllowConfigurationModifyAccess] = _ =>
            {
                if (PluginManager.GetInstance().Status == PluginManager.StatusEnum.Connected)
                {
                    return("ALM Octane plugin is already running");
                }

                Log.Debug("Plugin start requested");

                PluginManager.GetInstance().StartPlugin();
                return("Starting ALM Octane plugin");
            };

            Post["/stop", AllowConfigurationModifyAccess] = _ =>
            {
                Log.Debug("Plugin stop requested");
                PluginManager.GetInstance().StopPlugin();
                return("Stopping ALM Octane plugin");
            };

            Post["/queues/clear", AllowConfigurationModifyAccess] = _ =>
            {
                Dictionary <string, object> queueStatus = new Dictionary <string, object>();
                queueStatus["GeneralEventsQueue"] = PluginManager.GetInstance().GeneralEventsQueue.Count;
                queueStatus["ScmEventsQueue"]     = PluginManager.GetInstance().ScmEventsQueue.Count;
                queueStatus["TaskResultQueue"]    = PluginManager.GetInstance().TestResultsQueue.Count;

                string json = JsonHelper.SerializeObject(queueStatus, true);
                Log.Debug($"Clear event queues requested : {json}");

                PluginManager.GetInstance().GeneralEventsQueue.Clear();
                PluginManager.GetInstance().ScmEventsQueue.Clear();
                PluginManager.GetInstance().TestResultsQueue.Clear();
                return($"Cleared {json}");
            };
        }