Implemented Last-Modified HTTP header metric (#407)
authorJohannes Visintini <github@joker234.de>
Thu, 17 Jan 2019 10:00:43 +0000 (11:00 +0100)
committerBrian Brazil <brian.brazil@robustperception.io>
Thu, 17 Jan 2019 10:00:43 +0000 (10:00 +0000)
This feature returns a probe_http_last_modified metric with the content
of the Last-Modified HTTP response header, if it is set by the server.

Signed-off-by: Johannes Visintini <johannes.visintini@uni-heidelberg.de>
prober/http.go

index ed58b964d8f1b750d286461c6f738482bb6e1e54..9aa61045350d5610cfeec5f76789e4b6989c2cd8 100644 (file)
@@ -172,6 +172,11 @@ func ProbeHTTP(ctx context.Context, target string, module config.Module, registr
                        Name: "probe_failed_due_to_regex",
                        Help: "Indicates if probe failed due to regex",
                })
+
+               probeHTTPLastModified = prometheus.NewGauge(prometheus.GaugeOpts{
+                       Name: "probe_http_last_modified_timestamp_seconds",
+                       Help: "Returns the Last-Modified HTTP response header in unixtime",
+               })
        )
 
        for _, lv := range []string{"resolve", "connect", "tls", "processing", "transfer"} {
@@ -337,6 +342,12 @@ func ProbeHTTP(ctx context.Context, target string, module config.Module, registr
                // At this point body is fully read and we can write end time.
                tt.current.end = time.Now()
 
+               // Check if there is a Last-Modified HTTP response header.
+               if t, err := http.ParseTime(resp.Header.Get("Last-Modified")); err == nil {
+                       registry.MustRegister(probeHTTPLastModified)
+                       probeHTTPLastModified.Set(float64(t.Unix()))
+               }
+
                var httpVersionNumber float64
                httpVersionNumber, err = strconv.ParseFloat(strings.TrimPrefix(resp.Proto, "HTTP/"), 64)
                if err != nil {