public void Process(HttpListenerRequest request, HttpListenerResponse response) { try { if (request.HttpMethod != "GET") { response.StatusCode = 405; response.StatusDescription = "Method Not Supported"; response.Close(); return; } string version = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion; string status = GetStatusDescription(); string timestamp = DateTime.UtcNow.ToString("s", CultureInfo.InvariantCulture) + "Z"; FormatJsonResponse(response, version, status, timestamp); } catch (HttpListenerException hlex) { Supervisor.LogException(hlex, TraceEventType.Error, request.RawUrl); response.StatusCode = 500; response.StatusDescription = "Error Occurred"; response.Close(); } }
private static void CompleteFailedTask(RevaleeTask task, Exception exception) { Supervisor.State.CompleteTask(task); Supervisor.LogException(exception, TraceEventType.Error, task.CallbackUrl.OriginalString); Supervisor.Telemetry.RecordWaitTime(CalculateWaitTime(DateTime.UtcNow, task)); Supervisor.Telemetry.RecordFailedCallback(); }
private static void ServiceCallbackUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args) { try { Supervisor.LogException((Exception)args.ExceptionObject, TraceEventType.Critical, "Service encountered a critical error"); } catch { } }
private static void RunAsInteractive() { try { InteractiveExecution.Run(); } catch (Exception ex) { try { Supervisor.LogException(ex, TraceEventType.Critical, "Service terminating on error"); } catch { } Environment.ExitCode = 1; } }
private static void RunAsService() { try { AppDomain.CurrentDomain.UnhandledException += ServiceCallbackUnhandledExceptionHandler; ServiceBase.Run(new Revalee()); } catch (Exception ex) { try { Supervisor.LogException(ex, TraceEventType.Critical, "Service encountered a critical error"); } catch { } } }
protected override void OnStart(string[] args) { try { Supervisor.Start(); base.OnStart(args); } catch (Exception ex) { Supervisor.LogException(ex, TraceEventType.Critical, "Service failed to start"); using (var controller = new ServiceController(this.ServiceName)) { controller.Stop(); } this.ExitCode = 1; } }
public void Process(HttpListenerRequest request, HttpListenerResponse response) { try { if (request.HttpMethod != "PUT" && request.HttpMethod != "DELETE") { FinalizeRejectedResponse(request, response, 405, "Method Not Supported", null); return; } if (request.QueryString.Count < 2) { FinalizeRejectedResponse(request, response, 400, "Bad Request", null); return; } Guid?guid = RetrieveGuidParameter(request); if (!guid.HasValue) { FinalizeRejectedResponse(request, response, 400, "Bad Request", null); return; } Uri url = RetrieveUrlParameter(request); if (url == null) { FinalizeRejectedResponse(request, response, 400, "Bad Request", null); return; } if (UrlContainsDangerousMarkup(url)) { FinalizeRejectedResponse(request, response, 400, "Bad Request", url); return; } RevaleeUrlAuthorization authorization = Supervisor.Configuration.AuthorizedTargets.Match(url); if (authorization == null) { // Keep all authorization errors homogeneous from the client perspective RevaleeUrlAuthorization.ObfuscateExecutionTime(); FinalizeRejectedResponse(request, response, 401, "Unauthorized", url); return; } if (!authorization.IsAuthorizedRequestSource(request.RemoteEndPoint.Address)) { // Keep all authorization errors homogeneous from the client perspective RevaleeUrlAuthorization.ObfuscateExecutionTime(); FinalizeRejectedResponse(request, response, 401, "Unauthorized", url); return; } if (Supervisor.Work.IsOverloaded) { FinalizeRejectedResponse(request, response, 503, "Service Unavailable", url); return; } RevaleeTask taskToCancel = RevaleeTask.Revive(DateTime.MinValue, url, DateTime.UtcNow, guid.Value, 0, null); Supervisor.State.CancelTask(taskToCancel); FinalizeAcceptedResponse(request, response, guid.Value, url); return; } catch (HttpListenerException hlex) { Supervisor.LogException(hlex, TraceEventType.Error, request.RawUrl); FinalizeRejectedResponse(request, response, 500, "Error Occurred", null); return; } }
public void Process(HttpListenerRequest request, HttpListenerResponse response) { try { if (request.HttpMethod != "PUT") { FinalizeRejectedResponse(request, response, 405, "Method Not Supported", null); return; } if (request.QueryString.Count < 2) { FinalizeRejectedResponse(request, response, 400, "Bad Request", null); return; } Uri url = RetrieveUrlParameter(request); if (url == null) { FinalizeRejectedResponse(request, response, 400, "Bad Request", null); return; } DateTime?time = RetrieveTimeParameter(request); if (!time.HasValue) { FinalizeRejectedResponse(request, response, 400, "Bad Request", url); return; } if (UrlContainsDangerousMarkup(url)) { FinalizeRejectedResponse(request, response, 400, "Bad Request", url); return; } RevaleeUrlAuthorization authorization = Supervisor.Configuration.AuthorizedTargets.Match(url); if (authorization == null) { // Keep all authorization errors homogeneous from the client perspective RevaleeUrlAuthorization.ObfuscateExecutionTime(); FinalizeRejectedResponse(request, response, 401, "Unauthorized", url); return; } if (!authorization.IsAuthorizedRequestSource(request.RemoteEndPoint.Address)) { // Keep all authorization errors homogeneous from the client perspective RevaleeUrlAuthorization.ObfuscateExecutionTime(); FinalizeRejectedResponse(request, response, 401, "Unauthorized", url); return; } if (Supervisor.Work.IsOverloaded) { FinalizeRejectedResponse(request, response, 503, "Service Unavailable", url); return; } string authorizationCipher = RetrieveAuthorizationHeader(request); RevaleeTask newTask = new RevaleeTask(time.Value, url, authorization.RetryCount, authorizationCipher); Supervisor.State.AddTask(newTask); FinalizeAcceptedResponse(request, response, newTask); return; } catch (HttpListenerException hlex) { Supervisor.LogException(hlex, TraceEventType.Error, request.RawUrl); FinalizeRejectedResponse(request, response, 500, "Error Occurred", null); return; } }