public HttpStatusTransport(int port = 80) { var htmlPage = this.GetAssembly().GetResourceString("Status.htm"); var xmlSerializer = new XmlTextSerializer(); var jsonSerializer = new JsonTextSerializer() { UseCamelCase = true }; _httpServer = new SimpleHttpServer(); _httpServer.AddGetHandler("/", ctx => { ctx.Response.Write(htmlPage); }); _httpServer.AddGetHandler("/xml", ctx => { if (OnFetchStatus == null) { return; } var statuses = OnFetchStatus.Invoke(); ctx.Response.ContentType = SerializerMimeTypes.Xml; xmlSerializer.Serialize(statuses, ctx.Response.OutputStream); }); _httpServer.AddGetHandler("/json", ctx => { if (OnFetchStatus == null) { return; } var statuses = OnFetchStatus.Invoke(); ctx.Response.ContentType = SerializerMimeTypes.Json; jsonSerializer.Serialize(statuses, ctx.Response.OutputStream); }); _httpServer.AddGetHandler("/gccollect", ctx => { GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; GC.Collect(); GC.WaitForPendingFinalizers(); ctx.Response.ContentType = SerializerMimeTypes.Json; ctx.Response.Write("true"); }); _httpServer.AddGetHandler("/discovery", ctx => { var services = DiscoveryService.GetRegisteredServices(); var statusServices = services.Where(s => s.Category == DiscoveryService.FrameworkCategory && s.Name == "STATUS.HTTP").ToArray(); ctx.Response.WriteLine("<html><head><title>Discovered Status Services</title></head><body style='padding:30px;'><h1 style='text-align:center;'>Discovered status services</h1>"); foreach (var g in statusServices.GroupBy(s => new { s.EnvironmentName, s.MachineName }).OrderBy(s => s.Key.EnvironmentName)) { ctx.Response.WriteLine($"<h3>Environment: {g.Key.EnvironmentName} - Machine: {g.Key.MachineName}</h3>"); ctx.Response.WriteLine("<ul>"); foreach (var ss in g) { var dct = (Dictionary <string, object>)ss.Data.GetValue(); ctx.Response.WriteLine("<li style='list-style-type: none;'>"); foreach (var ssAddress in ss.Addresses) { ctx.Response.WriteLine($"<a href='http://{ssAddress.ToString()}:{dct["Port"]}/' target='_blank' style='text-decoration: none;color: blue;'>{ssAddress.ToString()}</a> /"); } ctx.Response.WriteLine($" {ss.ApplicationName}</li>"); } ctx.Response.WriteLine("</ul>"); } ctx.Response.WriteLine("</body></html>"); }); StartListening(port).WaitAsync(); Core.Status.DeAttachObject(_httpServer); }