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++; } } }
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); }
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}"); }; }