public async Task Run(CommandContext context) { var server = context.Servers.Get(ServerName); HttpSessionStartResponse startResult = null; await AuthRetryAsync(async() => { startResult = await StartSession(server); }); var sessionId = startResult?.SessionId; if (string.IsNullOrEmpty(sessionId)) { throw new ApplicationException($"An invalid session-id was returned! [{sessionId}]"); } var position = 0; while (true) { var data = await UpdateOutput(server, sessionId, position); if (data == null) { throw new ApplicationException("An empty session-output response was returned!"); } if (data.IsComplete) { break; } if (!data.IsModified) { await Task.Delay(PollIntervalMs); continue; } position = data.NewLength; ConsoleEx.Out.WriteLine(data.NewText, ConsoleColor.Gray); } Result = await GetResult(server, sessionId); }
public override HttpHandlerResult Post() { try { var session = new ServerSecurityPublishSession(); PhotonServer.Instance.Sessions.BeginSession(session); PhotonServer.Instance.Queue.Add(session); var response = new HttpSessionStartResponse { SessionId = session.SessionId, }; return(Response.Json(response)); } catch (Exception error) { Log.Error("Failed to publish security configuration!", error); return(Response.Exception(error)); } }
public override async Task <HttpHandlerResult> PostAsync(CancellationToken token) { var agentIds = GetQuery("agents"); var updateDirectory = Path.Combine(Configuration.Directory, "Updates"); var updateFilename = Path.Combine(updateDirectory, "Photon.Agent.msi"); PathEx.CreatePath(updateDirectory); using (var fileStream = File.Open(updateFilename, FileMode.Create, FileAccess.Write)) { await HttpContext.Request.InputStream.CopyToAsync(fileStream); } try { var session = new ServerUpdateSession { UpdateFilename = updateFilename, }; if (!string.IsNullOrEmpty(agentIds)) { session.AgentIds = ParseNames(agentIds).OrderBy(x => x).ToArray(); } PhotonServer.Instance.Sessions.BeginSession(session); PhotonServer.Instance.Queue.Add(session); var response = new HttpSessionStartResponse { SessionId = session.SessionId, }; return(Response.Json(response)); } catch (Exception error) { Log.Error("Failed to run Update-Task!", error); return(Response.Exception(error)); } }
public override async Task <HttpHandlerResult> PostAsync(CancellationToken token) { var qProjectId = GetQuery("project"); var projectPackageId = GetQuery("package"); var projectPackageVersion = GetQuery("version"); var environmentName = GetQuery("env"); if (string.IsNullOrWhiteSpace(projectPackageId)) { return(Response.BadRequest().SetText("'package' is undefined!")); } if (string.IsNullOrWhiteSpace(projectPackageVersion)) { return(Response.BadRequest().SetText("'version' is undefined!")); } try { if (!PhotonServer.Instance.ProjectPackages.TryGet(projectPackageId, projectPackageVersion, out var packageFilename)) { return(Response.BadRequest().SetText($"Project Package '{projectPackageId}.{projectPackageVersion}' was not found!")); } var metadata = await ProjectPackageTools.GetMetadataAsync(packageFilename); var projectId = metadata.Project; if (!string.IsNullOrEmpty(qProjectId)) { projectId = qProjectId; } if (string.IsNullOrEmpty(projectId)) { throw new ApplicationException("'project' is undefined!"); } if (!PhotonServer.Instance.Projects.TryGet(projectId, out var project)) { return(Response.BadRequest().SetText($"Project '{projectId}' was not found!")); } var deployment = await project.StartNewDeployment(); deployment.PackageId = projectPackageId; deployment.PackageVersion = projectPackageVersion; deployment.EnvironmentName = environmentName; //deployment.ScriptName = ?; var session = new ServerDeploySession { Project = project.Description, Deployment = deployment, ProjectPackageId = projectPackageId, ProjectPackageVersion = projectPackageVersion, ProjectPackageFilename = packageFilename, EnvironmentName = environmentName, }; deployment.ServerSessionId = session.SessionId; PhotonServer.Instance.Sessions.BeginSession(session); PhotonServer.Instance.Queue.Add(session); var response = new HttpSessionStartResponse { SessionId = session.SessionId, }; return(Response.Json(response)); } catch (Exception error) { Log.Error($"Deployment of Project Package '{projectPackageId}.{projectPackageVersion}' has failed!", error); return(Response.Exception(error)); } }