public MetricsModule()
            : base(Config.ModulePath ?? "/")
        {
            if (string.IsNullOrEmpty(Config.ModulePath))
            {
                return;
            }

            if (Config.ModuleConfigAction != null)
            {
                Config.ModuleConfigAction(this);
            }

            var noCacheHeaders = new[] {
                new { Header = "Cache-Control", Value = "no-cache, no-store, must-revalidate" },
                new { Header = "Pragma", Value = "no-cache" },
                new { Header = "Expires", Value = "0" }
            };

            Get["/"] = _ =>
            {
                if (this.Request.Url.Path.EndsWith("/"))
                {
                    return(Response.AsText(FlotWebApp.GetFlotApp(), "text/html"));
                }
                else
                {
                    return(Response.AsRedirect(this.Request.Url.ToString() + "/"));
                }
            };

            Get["/text"] = _ => Response.AsText(StringReporter.RenderMetrics(Config.MetricsContext.DataProvider.CurrentMetricsData, Config.HealthStatus))
                           .WithHeaders(noCacheHeaders);

            Get["/json"] = _ => Response.AsText(OldJsonBuilder.BuildJson(Config.MetricsContext.DataProvider.CurrentMetricsData, Clock.Default), "text/json")
                           .WithHeaders(noCacheHeaders);

            Get["/jsonnew"] = _ => Response.AsText(JsonMetrics.Serialize(Config.MetricsContext.DataProvider.CurrentMetricsData), "text/json")
                              .WithHeaders(noCacheHeaders);

            Get["/ping"] = _ => Response.AsText("pong", "text/plain")
                           .WithHeaders(noCacheHeaders);

            Get["/health"] = _ => GetHealthStatus()
                             .WithHeaders(noCacheHeaders);
        }
Beispiel #2
0
        private void WriteFullJsonMetrics(HttpListenerContext context, MetricsDataProvider metricsDataProvider)
        {
            context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
            context.Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
            context.Response.ContentType       = "application/json";
            context.Response.StatusCode        = 200;
            context.Response.StatusDescription = "OK";

            AddNoCacheHeaders(context.Response);

            var json = JsonMetrics.Serialize(metricsDataProvider.CurrentMetricsData);

            using (var writer = new StreamWriter(context.Response.OutputStream))
            {
                writer.Write(json);
            }

            context.Response.Close();
        }