From 53c10f32fd18f0bf90cc489d90c8bcfd7f38f34d Mon Sep 17 00:00:00 2001 From: "lucas.miguel" Date: Mon, 4 Jan 2016 16:19:12 -0200 Subject: [PATCH] add health check --- solr.go | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- solr_test.go | 4 ++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/solr.go b/solr.go index 09664e9..b320328 100644 --- a/solr.go +++ b/solr.go @@ -103,6 +103,28 @@ type Query struct { OmitHeader bool } +/* + * Response Health Check Solr + */ +type ResponseHealth struct { + ResponseHeader struct { + QTime int + Params struct { + Df string + Distrib string + EchoParams string + Facet_method string + Facet_mincount string + Q string + Rows string + Version string + Wt string + } + Status int + } + Status string +} + /* * Query.String() returns the Query in solr query string format */ @@ -280,7 +302,10 @@ func EncodeURLParamMap(m *URLParamMap) string { * Generates a Solr query string from a connection, query string and handler name */ func SolrSelectString(c *Connection, q string, handlerName string) string { - return fmt.Sprintf("%s/%s?wt=json&%s", c.URL, handlerName, q) + if q != "" { + return fmt.Sprintf("%s/%s?wt=json&%s", c.URL, handlerName, q) + } + return fmt.Sprintf("%s/%s?wt=json", c.URL, handlerName) } /* @@ -507,6 +532,28 @@ func (c *Connection) SelectRaw(q string) (*SelectResponse, error) { return resp, err } +/* + * Performs health check + */ +func (c *Connection) HealthCheck() (bool, error) { + body, err := HTTPGet(SolrSelectString(c, "", "admin/ping")) + if err != nil { + return false, err + } + + resp := ResponseHealth{} + + err = json.Unmarshal(body, &resp) + if err != nil { + return false, err + } + + if resp.Status == "OK" { + return true, nil + } + return false, nil +} + /* * Performs a raw Select query given a raw query string and handlerName */ diff --git a/solr_test.go b/solr_test.go index a72405b..5cea865 100644 --- a/solr_test.go +++ b/solr_test.go @@ -41,6 +41,10 @@ func TestSolrSelectString(t *testing.T) { t.Fail() } + s2 := SolrSelectString(c, "", "admin/ping") + if s2 != "http://localhost:8696/solr/core0/admin/ping?wt=json" { + t.Fail() + } } func TestSolrUpdateString(t *testing.T) {