From 2ae65d1a94b99f2b1327f8815661cdbabb5fab87 Mon Sep 17 00:00:00 2001 From: Sven Rebhan <36194019+srebhan@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:33:10 +0200 Subject: [PATCH] feat(inputs.solr): Support version 7.x to 9.3 (#13699) --- plugins/inputs/solr/README.md | 4 +- plugins/inputs/solr/api.go | 263 ++++++++++ plugins/inputs/solr/sample.conf | 2 +- plugins/inputs/solr/solr.go | 457 ++++++------------ plugins/inputs/solr/solr_test.go | 7 +- .../solr/testcases/integration-v6.6.result | 29 -- .../solr/testcases/integration-v6.result | 23 + .../solr/testcases/integration-v7.result | 24 + .../solr/testcases/integration-v8.result | 23 + .../solr/testcases/integration-v9.result | 31 ++ plugins/inputs/solr/util.go | 26 + 11 files changed, 537 insertions(+), 352 deletions(-) create mode 100644 plugins/inputs/solr/api.go delete mode 100644 plugins/inputs/solr/testcases/integration-v6.6.result create mode 100644 plugins/inputs/solr/testcases/integration-v6.result create mode 100644 plugins/inputs/solr/testcases/integration-v7.result create mode 100644 plugins/inputs/solr/testcases/integration-v8.result create mode 100644 plugins/inputs/solr/testcases/integration-v9.result create mode 100644 plugins/inputs/solr/util.go diff --git a/plugins/inputs/solr/README.md b/plugins/inputs/solr/README.md index 2fca2c8a4..b76e5a668 100644 --- a/plugins/inputs/solr/README.md +++ b/plugins/inputs/solr/README.md @@ -5,7 +5,7 @@ Request Handler][1]. More about [performance statistics][2]. -Tested from 3.5 to 7.* +Tested from 3.5 to 9.3 [1]: https://cwiki.apache.org/confluence/display/solr/MBean+Request+Handler @@ -29,7 +29,7 @@ See the [CONFIGURATION.md][CONFIGURATION.md] for more details. servers = ["http://localhost:8983"] ## specify a list of one or more Solr cores (default - all) - # cores = ["main"] + # cores = ["*"] ## Optional HTTP Basic Auth Credentials # username = "username" diff --git a/plugins/inputs/solr/api.go b/plugins/inputs/solr/api.go new file mode 100644 index 000000000..dd994e182 --- /dev/null +++ b/plugins/inputs/solr/api.go @@ -0,0 +1,263 @@ +package solr + +import ( + "encoding/json" + "errors" + "fmt" + "strconv" + "strings" + "time" + + "github.com/influxdata/telegraf" +) + +type apiConfig struct { + endpointAdmin string + endpointMBeans string + keyCore string + keyCache string + keyUpdateHandler string + keyQueryHandler string +} + +func newAPIv1Config() *apiConfig { + return &apiConfig{ + endpointAdmin: "/solr/admin/cores?action=STATUS&wt=json", + endpointMBeans: "/admin/mbeans?stats=true&wt=json&cat=CORE&cat=QUERYHANDLER&cat=UPDATEHANDLER&cat=CACHE", + keyCore: `"CORE"`, + keyCache: `"CACHE"`, + keyQueryHandler: `"QUERYHANDLER"`, + keyUpdateHandler: `"UPDATEHANDLER"`, + } +} + +func newAPIv2Config() *apiConfig { + return &apiConfig{ + endpointAdmin: "/solr/admin/cores?action=STATUS&wt=json", + endpointMBeans: "/admin/mbeans?stats=true&wt=json&cat=CORE&cat=QUERY&cat=UPDATE&cat=CACHE", + keyCore: `"CORE"`, + keyCache: `"CACHE"`, + keyQueryHandler: `"QUERY"`, + keyUpdateHandler: `"UPDATE"`, + } +} + +func (cfg *apiConfig) adminEndpoint(server string) string { + return strings.TrimSuffix(server, "/") + cfg.endpointAdmin +} + +func (cfg *apiConfig) mbeansEndpoint(server, core string) string { + return strings.TrimSuffix(server, "/") + "/solr/" + strings.Trim(core, "/") + cfg.endpointMBeans +} + +func (cfg *apiConfig) parseCore(acc telegraf.Accumulator, core string, data *MBeansData, ts time.Time) { + // Determine the core information element + var coreData json.RawMessage + for i := 0; i < len(data.SolrMbeans); i += 2 { + if string(data.SolrMbeans[i]) == cfg.keyCore { + coreData = data.SolrMbeans[i+1] + break + } + } + if coreData == nil { + acc.AddError(errors.New("no core metric data to unmarshal")) + return + } + + var coreMetrics map[string]Core + if err := json.Unmarshal(coreData, &coreMetrics); err != nil { + acc.AddError(fmt.Errorf("unmarshalling core metrics for %q failed: %w", core, err)) + return + } + + for name, m := range coreMetrics { + if strings.Contains(name, "@") { + continue + } + fields := map[string]interface{}{ + "deleted_docs": m.Stats.DeletedDocs, + "max_docs": m.Stats.MaxDoc, + "num_docs": m.Stats.NumDocs, + } + tags := map[string]string{ + "core": core, + "handler": name, + } + + acc.AddFields("solr_core", fields, tags, ts) + } +} + +func (cfg *apiConfig) parseCache(acc telegraf.Accumulator, core string, data *MBeansData, ts time.Time) { + // Determine the cache information element + var cacheData json.RawMessage + for i := 0; i < len(data.SolrMbeans); i += 2 { + if string(data.SolrMbeans[i]) == cfg.keyCache { + cacheData = data.SolrMbeans[i+1] + break + } + } + if cacheData == nil { + acc.AddError(errors.New("no cache metric data to unmarshal")) + return + } + + var cacheMetrics map[string]Cache + if err := json.Unmarshal(cacheData, &cacheMetrics); err != nil { + acc.AddError(fmt.Errorf("unmarshalling update handler for %q failed: %w", core, err)) + return + } + + for name, metrics := range cacheMetrics { + fields := make(map[string]interface{}, len(metrics.Stats)) + for key, value := range metrics.Stats { + splitKey := strings.Split(key, ".") + newKey := splitKey[len(splitKey)-1] + switch newKey { + case "cumulative_evictions", "cumulative_hits", "cumulative_inserts", "cumulative_lookups", + "eviction", "evictions", "hits", "inserts", "lookups", "size": + fields[newKey] = getInt(value) + case "hitratio", "cumulative_hitratio": + fields[newKey] = getFloat(value) + case "warmupTime": + fields["warmup_time"] = getInt(value) + default: + continue + } + } + + tags := map[string]string{ + "core": core, + "handler": name, + } + + acc.AddFields("solr_cache", fields, tags, ts) + } +} + +func (cfg *apiConfig) parseQueryHandler(acc telegraf.Accumulator, core string, data *MBeansData, ts time.Time) { + // Determine the query-handler information element + var queryData json.RawMessage + for i := 0; i < len(data.SolrMbeans); i += 2 { + if string(data.SolrMbeans[i]) == cfg.keyQueryHandler { + queryData = data.SolrMbeans[i+1] + break + } + } + if queryData == nil { + acc.AddError(errors.New("no query handler metric data to unmarshal")) + return + } + + var queryMetrics map[string]QueryHandler + if err := json.Unmarshal(queryData, &queryMetrics); err != nil { + acc.AddError(fmt.Errorf("unmarshalling query handler for %q failed: %w", core, err)) + return + } + + for name, metrics := range queryMetrics { + if metrics.Stats == nil { + continue + } + + var values map[string]interface{} + switch v := metrics.Stats.(type) { + case []interface{}: + values = make(map[string]interface{}, len(v)/2) + for i := 0; i < len(v); i += 2 { + key, ok := v[i].(string) + if !ok { + continue + } + values[key] = v[i+1] + } + case map[string]interface{}: + values = v + default: + continue + } + + fields := map[string]interface{}{ + "15min_rate_reqs_per_second": getFloat(values["15minRateReqsPerSecond"]), + "5min_rate_reqs_per_second": getFloat(values["5minRateReqsPerSecond"]), + "75th_pc_request_time": getFloat(values["75thPcRequestTime"]), + "95th_pc_request_time": getFloat(values["95thPcRequestTime"]), + "99th_pc_request_time": getFloat(values["99thPcRequestTime"]), + "999th_pc_request_time": getFloat(values["999thPcRequestTime"]), + "avg_requests_per_second": getFloat(values["avgRequestsPerSecond"]), + "avg_time_per_request": getFloat(values["avgTimePerRequest"]), + "errors": getInt(values["errors"]), + "handler_start": getInt(values["handlerStart"]), + "median_request_time": getFloat(values["medianRequestTime"]), + "requests": getInt(values["requests"]), + "timeouts": getInt(values["timeouts"]), + "total_time": getFloat(values["totalTime"]), + } + + tags := map[string]string{ + "core": core, + "handler": name, + } + acc.AddFields("solr_queryhandler", fields, tags, ts) + } +} + +func (cfg *apiConfig) parseUpdateHandler(acc telegraf.Accumulator, core string, data *MBeansData, ts time.Time) { + // Determine the update-handler information element + var updateData json.RawMessage + for i := 0; i < len(data.SolrMbeans); i += 2 { + if string(data.SolrMbeans[i]) == cfg.keyUpdateHandler { + updateData = data.SolrMbeans[i+1] + break + } + } + if updateData == nil { + acc.AddError(errors.New("no update handler metric data to unmarshal")) + return + } + + var updateMetrics map[string]UpdateHandler + if err := json.Unmarshal(updateData, &updateMetrics); err != nil { + acc.AddError(fmt.Errorf("unmarshalling update handler for %q failed: %w", core, err)) + return + } + + for name, metrics := range updateMetrics { + var autoCommitMaxTime int64 + if len(metrics.Stats.AutocommitMaxTime) > 2 { + s := metrics.Stats.AutocommitMaxTime[:len(metrics.Stats.AutocommitMaxTime)-2] + var err error + autoCommitMaxTime, err = strconv.ParseInt(s, 0, 64) + if err != nil { + autoCommitMaxTime = 0 + } + } + + fields := map[string]interface{}{ + "adds": metrics.Stats.Adds, + "autocommit_max_docs": metrics.Stats.AutocommitMaxDocs, + "autocommit_max_time": autoCommitMaxTime, + "autocommits": metrics.Stats.Autocommits, + "commits": metrics.Stats.Commits, + "cumulative_adds": metrics.Stats.CumulativeAdds, + "cumulative_deletes_by_id": metrics.Stats.CumulativeDeletesByID, + "cumulative_deletes_by_query": metrics.Stats.CumulativeDeletesByQuery, + "cumulative_errors": metrics.Stats.CumulativeErrors, + "deletes_by_id": metrics.Stats.DeletesByID, + "deletes_by_query": metrics.Stats.DeletesByQuery, + "docs_pending": metrics.Stats.DocsPending, + "errors": metrics.Stats.Errors, + "expunge_deletes": metrics.Stats.ExpungeDeletes, + "optimizes": metrics.Stats.Optimizes, + "rollbacks": metrics.Stats.Rollbacks, + "soft_autocommits": metrics.Stats.SoftAutocommits, + } + + tags := map[string]string{ + "core": core, + "handler": name, + } + + acc.AddFields("solr_updatehandler", fields, tags, ts) + } +} diff --git a/plugins/inputs/solr/sample.conf b/plugins/inputs/solr/sample.conf index 424934b79..724c344a5 100644 --- a/plugins/inputs/solr/sample.conf +++ b/plugins/inputs/solr/sample.conf @@ -4,7 +4,7 @@ servers = ["http://localhost:8983"] ## specify a list of one or more Solr cores (default - all) - # cores = ["main"] + # cores = ["*"] ## Optional HTTP Basic Auth Credentials # username = "username" diff --git a/plugins/inputs/solr/solr.go b/plugins/inputs/solr/solr.go index 292a35a70..459351733 100644 --- a/plugins/inputs/solr/solr.go +++ b/plugins/inputs/solr/solr.go @@ -5,15 +5,14 @@ import ( _ "embed" "encoding/json" "fmt" - "math" "net/http" - "strconv" - "strings" "sync" "time" + "github.com/coreos/go-semver/semver" "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/config" + "github.com/influxdata/telegraf/filter" "github.com/influxdata/telegraf/internal" "github.com/influxdata/telegraf/plugins/inputs" ) @@ -21,9 +20,6 @@ import ( //go:embed sample.conf var sampleConfig string -const mbeansPath = "/admin/mbeans?stats=true&wt=json&cat=CORE&cat=QUERYHANDLER&cat=UPDATEHANDLER&cat=CACHE" -const adminCoresPath = "/solr/admin/cores?action=STATUS&wt=json" - // Solr is a plugin to read stats from one or many Solr servers type Solr struct { Servers []string `toml:"servers"` @@ -31,8 +27,11 @@ type Solr struct { Password string `toml:"password"` HTTPTimeout config.Duration `toml:"timeout"` Cores []string `toml:"cores"` + Log telegraf.Logger `toml:"-"` - client *http.Client + client *http.Client + configs map[string]*apiConfig + filter filter.Filter } func (*Solr) SampleConfig() string { @@ -40,343 +39,129 @@ func (*Solr) SampleConfig() string { } func (s *Solr) Init() error { - s.client = s.createHTTPClient() - return nil -} - -// Gather reads the stats from Solr and writes it to the -// Accumulator. -func (s *Solr) Gather(acc telegraf.Accumulator) error { - var wg sync.WaitGroup - wg.Add(len(s.Servers)) - - for _, serv := range s.Servers { - go func(serv string, acc telegraf.Accumulator) { - defer wg.Done() - acc.AddError(s.gatherServerMetrics(serv, acc)) - }(serv, acc) + // Setup client to do the queries + s.client = &http.Client{ + Transport: &http.Transport{ + ResponseHeaderTimeout: time.Duration(s.HTTPTimeout), + }, + Timeout: time.Duration(s.HTTPTimeout), } - wg.Wait() - return nil -} -// Gather all metrics from server -func (s *Solr) gatherServerMetrics(server string, acc telegraf.Accumulator) error { - measurementTime := time.Now() - adminCoresStatus := &AdminCoresStatus{} - if err := s.gatherData(s.adminURL(server), adminCoresStatus); err != nil { + // Prepare filter for the cores to query + f, err := filter.Compile(s.Cores) + if err != nil { return err } - addAdminCoresStatusToAcc(acc, adminCoresStatus, measurementTime) - cores := s.filterCores(getCoresFromStatus(adminCoresStatus)) - var wg sync.WaitGroup - wg.Add(len(cores)) - for _, core := range cores { - go func(server string, core string, acc telegraf.Accumulator) { - defer wg.Done() - mBeansData := &MBeansData{} - acc.AddError(s.gatherData(s.mbeansURL(server, core), mBeansData)) - acc.AddError(addCoreMetricsToAcc(acc, core, mBeansData, measurementTime)) - acc.AddError(addQueryHandlerMetricsToAcc(acc, core, mBeansData, measurementTime)) - acc.AddError(addUpdateHandlerMetricsToAcc(acc, core, mBeansData, measurementTime)) - acc.AddError(addCacheMetricsToAcc(acc, core, mBeansData, measurementTime)) - }(server, core, acc) - } - wg.Wait() + s.filter = f + + // Allocate config cache + s.configs = make(map[string]*apiConfig, len(s.Servers)) + return nil } -// Use cores from configuration if exists, else use cores from server -func (s *Solr) filterCores(serverCores []string) []string { - if len(s.Cores) == 0 { - return serverCores +func (s *Solr) Start(_ telegraf.Accumulator) error { + for _, server := range s.Servers { + // Simply fill the cache for all available servers + _ = s.getAPIConfig(server) } - return s.Cores + return nil } -// Return list of cores from solr server -func getCoresFromStatus(adminCoresStatus *AdminCoresStatus) []string { - serverCores := []string{} - for coreName := range adminCoresStatus.Status { - serverCores = append(serverCores, coreName) +func (s *Solr) Stop() {} + +func (s *Solr) Gather(acc telegraf.Accumulator) error { + var wg sync.WaitGroup + for _, srv := range s.Servers { + wg.Add(1) + go func(server string) { + defer wg.Done() + + // Check the server version from cache or query one + cfg := s.getAPIConfig(server) + s.collect(acc, cfg, server) + }(srv) } - return serverCores + wg.Wait() + + return nil } -// Add core metrics from admin to accumulator -// This is the only point where size_in_bytes is available (as far as I checked) -func addAdminCoresStatusToAcc(acc telegraf.Accumulator, adminCoreStatus *AdminCoresStatus, measurementTime time.Time) { - for core, metrics := range adminCoreStatus.Status { - coreFields := map[string]interface{}{ +func (s *Solr) getAPIConfig(server string) *apiConfig { + if cfg, found := s.configs[server]; found { + return cfg + } + + version, err := s.determineServerAPIVersion(server) + if err != nil { + s.Log.Errorf("Getting version for %q failed: %v", server, err) + // Exit early and do not fill the cache as the server might not be + // reachable yet. + return newAPIv1Config() + } + s.Log.Debugf("Found API version %d for server %q...", version, server) + + switch version { + case 0: + s.Log.Warn("Unable to determine API version! Using API v1...") + s.configs[server] = newAPIv1Config() + case 1: + s.configs[server] = newAPIv1Config() + case 2: + s.configs[server] = newAPIv2Config() + default: + s.Log.Warnf("Unknown API version %q! Using latest known", version) + s.configs[server] = newAPIv2Config() + } + + return s.configs[server] +} + +func (s *Solr) collect(acc telegraf.Accumulator, cfg *apiConfig, server string) { + now := time.Now() + + var coreStatus AdminCoresStatus + if err := s.query(cfg.adminEndpoint(server), &coreStatus); err != nil { + acc.AddError(err) + return + } + + var wg sync.WaitGroup + for core, metrics := range coreStatus.Status { + fields := map[string]interface{}{ "deleted_docs": metrics.Index.DeletedDocs, "max_docs": metrics.Index.MaxDoc, "num_docs": metrics.Index.NumDocs, "size_in_bytes": metrics.Index.SizeInBytes, } - acc.AddFields( - "solr_admin", - coreFields, - map[string]string{"core": core}, - measurementTime, - ) - } -} + tags := map[string]string{"core": core} + acc.AddFields("solr_admin", fields, tags, now) -// Add core metrics section to accumulator -func addCoreMetricsToAcc(acc telegraf.Accumulator, core string, mBeansData *MBeansData, measurementTime time.Time) error { - var coreMetrics map[string]Core - if len(mBeansData.SolrMbeans) < 2 { - return fmt.Errorf("no core metric data to unmarshal") - } - if err := json.Unmarshal(mBeansData.SolrMbeans[1], &coreMetrics); err != nil { - return err - } - for name, metrics := range coreMetrics { - if strings.Contains(name, "@") { - continue - } - coreFields := map[string]interface{}{ - "deleted_docs": metrics.Stats.DeletedDocs, - "max_docs": metrics.Stats.MaxDoc, - "num_docs": metrics.Stats.NumDocs, - } - acc.AddFields( - "solr_core", - coreFields, - map[string]string{ - "core": core, - "handler": name}, - measurementTime, - ) - } - return nil -} - -// Add query metrics section to accumulator -func addQueryHandlerMetricsToAcc(acc telegraf.Accumulator, core string, mBeansData *MBeansData, measurementTime time.Time) error { - var queryMetrics map[string]QueryHandler - - if len(mBeansData.SolrMbeans) < 4 { - return fmt.Errorf("no query handler metric data to unmarshal") - } - - if err := json.Unmarshal(mBeansData.SolrMbeans[3], &queryMetrics); err != nil { - return err - } - - for name, metrics := range queryMetrics { - var coreFields map[string]interface{} - - if metrics.Stats == nil { + if s.filter != nil && !s.filter.Match(core) { continue } - switch v := metrics.Stats.(type) { - case []interface{}: - m := convertArrayToMap(v) - coreFields = convertQueryHandlerMap(m) - case map[string]interface{}: - coreFields = convertQueryHandlerMap(v) - default: - continue - } + wg.Add(1) + go func(server string, core string) { + defer wg.Done() - acc.AddFields( - "solr_queryhandler", - coreFields, - map[string]string{ - "core": core, - "handler": name}, - measurementTime, - ) - } - return nil -} - -func convertArrayToMap(values []interface{}) map[string]interface{} { - var key string - result := make(map[string]interface{}) - for i, item := range values { - if i%2 == 0 { - key = fmt.Sprintf("%v", item) - } else { - result[key] = item - } - } - - return result -} - -func convertQueryHandlerMap(value map[string]interface{}) map[string]interface{} { - return map[string]interface{}{ - "15min_rate_reqs_per_second": getFloat(value["15minRateReqsPerSecond"]), - "5min_rate_reqs_per_second": getFloat(value["5minRateReqsPerSecond"]), - "75th_pc_request_time": getFloat(value["75thPcRequestTime"]), - "95th_pc_request_time": getFloat(value["95thPcRequestTime"]), - "99th_pc_request_time": getFloat(value["99thPcRequestTime"]), - "999th_pc_request_time": getFloat(value["999thPcRequestTime"]), - "avg_requests_per_second": getFloat(value["avgRequestsPerSecond"]), - "avg_time_per_request": getFloat(value["avgTimePerRequest"]), - "errors": getInt(value["errors"]), - "handler_start": getInt(value["handlerStart"]), - "median_request_time": getFloat(value["medianRequestTime"]), - "requests": getInt(value["requests"]), - "timeouts": getInt(value["timeouts"]), - "total_time": getFloat(value["totalTime"]), - } -} - -// Add update metrics section to accumulator -func addUpdateHandlerMetricsToAcc(acc telegraf.Accumulator, core string, mBeansData *MBeansData, measurementTime time.Time) error { - var updateMetrics map[string]UpdateHandler - - if len(mBeansData.SolrMbeans) < 6 { - return fmt.Errorf("no update handler metric data to unmarshal") - } - if err := json.Unmarshal(mBeansData.SolrMbeans[5], &updateMetrics); err != nil { - return err - } - for name, metrics := range updateMetrics { - var autoCommitMaxTime int64 - if len(metrics.Stats.AutocommitMaxTime) > 2 { - autoCommitMaxTime, _ = strconv.ParseInt(metrics.Stats.AutocommitMaxTime[:len(metrics.Stats.AutocommitMaxTime)-2], 0, 64) - } - coreFields := map[string]interface{}{ - "adds": metrics.Stats.Adds, - "autocommit_max_docs": metrics.Stats.AutocommitMaxDocs, - "autocommit_max_time": autoCommitMaxTime, - "autocommits": metrics.Stats.Autocommits, - "commits": metrics.Stats.Commits, - "cumulative_adds": metrics.Stats.CumulativeAdds, - "cumulative_deletes_by_id": metrics.Stats.CumulativeDeletesByID, - "cumulative_deletes_by_query": metrics.Stats.CumulativeDeletesByQuery, - "cumulative_errors": metrics.Stats.CumulativeErrors, - "deletes_by_id": metrics.Stats.DeletesByID, - "deletes_by_query": metrics.Stats.DeletesByQuery, - "docs_pending": metrics.Stats.DocsPending, - "errors": metrics.Stats.Errors, - "expunge_deletes": metrics.Stats.ExpungeDeletes, - "optimizes": metrics.Stats.Optimizes, - "rollbacks": metrics.Stats.Rollbacks, - "soft_autocommits": metrics.Stats.SoftAutocommits, - } - acc.AddFields( - "solr_updatehandler", - coreFields, - map[string]string{ - "core": core, - "handler": name}, - measurementTime, - ) - } - return nil -} - -// Get float64 from interface -func getFloat(unk interface{}) float64 { - switch i := unk.(type) { - case float64: - return i - case string: - f, err := strconv.ParseFloat(i, 64) - if err != nil || math.IsNaN(f) { - return float64(0) - } - return f - default: - return float64(0) - } -} - -// Get int64 from interface -func getInt(unk interface{}) int64 { - switch i := unk.(type) { - case int64: - return i - case float64: - return int64(i) - case string: - v, err := strconv.ParseInt(i, 10, 64) - if err != nil { - return int64(0) - } - return v - default: - return int64(0) - } -} - -// Add cache metrics section to accumulator -func addCacheMetricsToAcc(acc telegraf.Accumulator, core string, mBeansData *MBeansData, measurementTime time.Time) error { - if len(mBeansData.SolrMbeans) < 8 { - return fmt.Errorf("no cache metric data to unmarshal") - } - var cacheMetrics map[string]Cache - if err := json.Unmarshal(mBeansData.SolrMbeans[7], &cacheMetrics); err != nil { - return err - } - for name, metrics := range cacheMetrics { - coreFields := make(map[string]interface{}) - for key, value := range metrics.Stats { - splitKey := strings.Split(key, ".") - newKey := splitKey[len(splitKey)-1] - switch newKey { - case "cumulative_evictions", - "cumulative_hits", - "cumulative_inserts", - "cumulative_lookups", - "eviction", - "hits", - "inserts", - "lookups", - "size", - "evictions": - coreFields[newKey] = getInt(value) - case "hitratio", - "cumulative_hitratio": - coreFields[newKey] = getFloat(value) - case "warmupTime": - coreFields["warmup_time"] = getInt(value) - default: - continue + var data MBeansData + if err := s.query(cfg.mbeansEndpoint(server, core), &data); err != nil { + acc.AddError(err) + return } - } - acc.AddFields( - "solr_cache", - coreFields, - map[string]string{ - "core": core, - "handler": name}, - measurementTime, - ) + + cfg.parseCore(acc, core, &data, now) + cfg.parseQueryHandler(acc, core, &data, now) + cfg.parseUpdateHandler(acc, core, &data, now) + cfg.parseCache(acc, core, &data, now) + }(server, core) } - return nil + wg.Wait() } -// Provide admin url -func (s *Solr) adminURL(server string) string { - return fmt.Sprintf("%s%s", server, adminCoresPath) -} - -// Provide mbeans url -func (s *Solr) mbeansURL(server string, core string) string { - return fmt.Sprintf("%s/solr/%s%s", server, core, mbeansPath) -} - -func (s *Solr) createHTTPClient() *http.Client { - tr := &http.Transport{ - ResponseHeaderTimeout: time.Duration(s.HTTPTimeout), - } - client := &http.Client{ - Transport: tr, - Timeout: time.Duration(s.HTTPTimeout), - } - - return client -} - -func (s *Solr) gatherData(url string, v interface{}) error { - req, reqErr := http.NewRequest(http.MethodGet, url, nil) +func (s *Solr) query(endpoint string, v interface{}) error { + req, reqErr := http.NewRequest(http.MethodGet, endpoint, nil) if reqErr != nil { return reqErr } @@ -393,13 +178,47 @@ func (s *Solr) gatherData(url string, v interface{}) error { } defer r.Body.Close() if r.StatusCode != http.StatusOK { - return fmt.Errorf("solr: API responded with status-code %d, expected %d, url %s", - r.StatusCode, http.StatusOK, url) + return fmt.Errorf("solr: API endpoint %q responded with %q", endpoint, r.Status) } return json.NewDecoder(r.Body).Decode(v) } +func (s *Solr) determineServerAPIVersion(server string) (int, error) { + endpoint := server + "/solr/admin/info/system?wt=json" + var info map[string]interface{} + if err := s.query(endpoint, &info); err != nil { + return 0, err + } + + lraw, found := info["lucene"] + if !found { + return 0, nil + } + lucene, ok := lraw.(map[string]interface{}) + if !ok { + return 0, nil + } + vraw, ok := lucene["solr-spec-version"] + if !ok { + return 0, nil + } + v, ok := vraw.(string) + if !ok { + return 0, nil + } + + // API version 1 is required until v7.x + version := semver.New(v) + if version.LessThan(semver.Version{Major: 7}) { + return 1, nil + } + + // Starting from 7.0 API version 2 has to be used to get the UPDATE and + // QUERY metrics. + return 2, nil +} + func init() { inputs.Add("solr", func() telegraf.Input { return &Solr{ diff --git a/plugins/inputs/solr/solr_test.go b/plugins/inputs/solr/solr_test.go index 741d1f56d..a4fb78964 100644 --- a/plugins/inputs/solr/solr_test.go +++ b/plugins/inputs/solr/solr_test.go @@ -85,7 +85,9 @@ func TestCases(t *testing.T) { // Gather data and compare results var acc testutil.Accumulator + require.NoError(t, plugin.Start(&acc)) require.NoError(t, plugin.Gather(&acc)) + plugin.Stop() actual := acc.GetTelegrafMetrics() testutil.RequireMetricsEqual(t, expected, actual, options...) @@ -141,7 +143,7 @@ func TestIntegration(t *testing.T) { Cmd: []string{"solr-precreate", "main"}, WaitingFor: wait.ForAll( wait.ForListeningPort(nat.Port(servicePort)), - wait.ForLog("o.a.s.c.SolrCore [main] Registered new searcher"), + wait.ForLog("Registered new searcher"), ), } require.NoError(t, container.Start(), "failed to start container") @@ -153,12 +155,15 @@ func TestIntegration(t *testing.T) { plugin := &Solr{ Servers: server, HTTPTimeout: config.Duration(5 * time.Second), + Log: &testutil.Logger{}, } require.NoError(t, plugin.Init()) // Gather data and compare results var acc testutil.Accumulator + require.NoError(t, plugin.Start(&acc)) require.NoError(t, plugin.Gather(&acc)) + plugin.Stop() actual := acc.GetTelegrafMetrics() testutil.RequireMetricsStructureEqual(t, expected, actual, options...) diff --git a/plugins/inputs/solr/testcases/integration-v6.6.result b/plugins/inputs/solr/testcases/integration-v6.6.result deleted file mode 100644 index 164f2cb4f..000000000 --- a/plugins/inputs/solr/testcases/integration-v6.6.result +++ /dev/null @@ -1,29 +0,0 @@ -solr_admin,core=main deleted_docs=0i,max_docs=0i,num_docs=0i,size_in_bytes=71i -solr_core,core=main,handler=searcher deleted_docs=0i,max_docs=0i,num_docs=0i -solr_core,core=main,handler=core deleted_docs=0i,max_docs=0i,num_docs=0i -solr_queryhandler,core=main,handler=/stream 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637993i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_queryhandler,core=main,handler=/debug/dump 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637995i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_queryhandler,core=main,handler=/graph 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637991i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_queryhandler,core=main,handler=/select 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637996i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_queryhandler,core=main,handler=/export 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637989i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_queryhandler,core=main,handler=/query 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637997i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_queryhandler,core=main,handler=/browse 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637997i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_queryhandler,core=main,handler=/sql 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637994i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_queryhandler,core=main,handler=/get 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690552637973i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 -solr_updatehandler,core=main,handler=/graph adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=facet_module adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=/export adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=tvComponent adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=/sql adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=get adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=query adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=/select adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=mlt adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=terms adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=/query adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=/stream adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=/debug/dump adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=facet adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=/browse adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=expand adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i -solr_updatehandler,core=main,handler=/get adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i diff --git a/plugins/inputs/solr/testcases/integration-v6.result b/plugins/inputs/solr/testcases/integration-v6.result new file mode 100644 index 000000000..34ed064fc --- /dev/null +++ b/plugins/inputs/solr/testcases/integration-v6.result @@ -0,0 +1,23 @@ +solr_admin,core=main deleted_docs=0i,max_docs=0i,num_docs=0i,size_in_bytes=71i +solr_cache,core=main,handler=documentCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=fieldValueCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=filterCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=perSegFilter cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=queryResultCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_core,core=main,handler=core deleted_docs=0i,max_docs=0i,num_docs=0i +solr_core,core=main,handler=searcher deleted_docs=0i,max_docs=0i,num_docs=0i +solr_queryhandler,core=main,handler=/browse 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146270i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/debug/dump 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146269i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/export 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146264i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/get 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146246i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/graph 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146265i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/query 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146270i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/select 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146270i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/sql 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146268i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/stream 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=1690881146267i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_updatehandler,core=main,handler=/update adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=update adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/csv adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=updateHandler adds=0i,autocommit_max_docs=0i,autocommit_max_time=15000i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/json adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/json/docs adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i diff --git a/plugins/inputs/solr/testcases/integration-v7.result b/plugins/inputs/solr/testcases/integration-v7.result new file mode 100644 index 000000000..b0cd113b3 --- /dev/null +++ b/plugins/inputs/solr/testcases/integration-v7.result @@ -0,0 +1,24 @@ +solr_admin,core=main deleted_docs=0i,max_docs=0i,num_docs=0i,size_in_bytes=69i +solr_cache,core=main,handler=documentCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=fieldValueCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=filterCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=perSegFilter cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=queryResultCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_core,core=main,handler=core deleted_docs=0i,max_docs=0i,num_docs=0i +solr_core,core=main,handler=searcher deleted_docs=0i,max_docs=0i,num_docs=0i +solr_queryhandler,core=main,handler=/browse 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/debug/dump 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/export 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/get 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/graph 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=org.apache.solr.handler.admin.MetricsCollectorHandler 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/query 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/select 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/sql 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/stream 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_updatehandler,core=main,handler=/update adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=update adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/csv adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=updateHandler adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/json adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/json/docs adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i diff --git a/plugins/inputs/solr/testcases/integration-v8.result b/plugins/inputs/solr/testcases/integration-v8.result new file mode 100644 index 000000000..e9765a5e5 --- /dev/null +++ b/plugins/inputs/solr/testcases/integration-v8.result @@ -0,0 +1,23 @@ +solr_admin,core=main deleted_docs=0i,max_docs=0i,num_docs=0i,size_in_bytes=69i +solr_cache,core=main,handler=documentCache cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=fieldValueCache cumulative_evictions=0i,cumulative_hitratio=0,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=0,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=filterCache cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=perSegFilter cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=queryResultCache cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_core,core=main,handler=core deleted_docs=0i,max_docs=0i,num_docs=0i +solr_core,core=main,handler=searcher deleted_docs=0i,max_docs=0i,num_docs=0i +solr_queryhandler,core=main,handler=/debug/dump 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/export 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/get 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/graph 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=org.apache.solr.handler.admin.MetricsCollectorHandler 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/query 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/select 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/sql 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/stream 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_updatehandler,core=main,handler=/update adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=update adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/csv adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=updateHandler adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/json adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/json/docs adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i diff --git a/plugins/inputs/solr/testcases/integration-v9.result b/plugins/inputs/solr/testcases/integration-v9.result new file mode 100644 index 000000000..aba73890d --- /dev/null +++ b/plugins/inputs/solr/testcases/integration-v9.result @@ -0,0 +1,31 @@ +solr_admin,core=main deleted_docs=0i,max_docs=0i,num_docs=0i,size_in_bytes=69i +solr_cache,core=main,handler=documentCache cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=fieldCache size=0i +solr_cache,core=main,handler=fieldValueCache cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=filterCache cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=perSegFilter cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_cache,core=main,handler=queryResultCache cumulative_evictions=0i,cumulative_hitratio=1,cumulative_hits=0i,cumulative_inserts=0i,cumulative_lookups=0i,evictions=0i,hitratio=1,hits=0i,inserts=0i,lookups=0i,size=0i,warmup_time=0i +solr_core,core=main,handler=core deleted_docs=0i,max_docs=0i,num_docs=0i +solr_core,core=main,handler=searcher deleted_docs=0i,max_docs=0i,num_docs=0i +solr_queryhandler,core=main,handler=/debug/dump 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=expand 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/export 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=facet 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=facet_module 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/get 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=get 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/graph 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=mlt 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/query 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=query 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/select 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/stream 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=/terms 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_queryhandler,core=main,handler=terms 15min_rate_reqs_per_second=0,5min_rate_reqs_per_second=0,75th_pc_request_time=0,95th_pc_request_time=0,999th_pc_request_time=0,99th_pc_request_time=0,avg_requests_per_second=0,avg_time_per_request=0,errors=0i,handler_start=0i,median_request_time=0,requests=0i,timeouts=0i,total_time=0 +solr_updatehandler,core=main,handler=/update adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=update adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/cbor adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/csv adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=updateHandler adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/json adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i +solr_updatehandler,core=main,handler=/update/json/docs adds=0i,autocommit_max_docs=0i,autocommit_max_time=0i,autocommits=0i,commits=0i,cumulative_adds=0i,cumulative_deletes_by_id=0i,cumulative_deletes_by_query=0i,cumulative_errors=0i,deletes_by_id=0i,deletes_by_query=0i,docs_pending=0i,errors=0i,expunge_deletes=0i,optimizes=0i,rollbacks=0i,soft_autocommits=0i diff --git a/plugins/inputs/solr/util.go b/plugins/inputs/solr/util.go new file mode 100644 index 000000000..231c126d4 --- /dev/null +++ b/plugins/inputs/solr/util.go @@ -0,0 +1,26 @@ +package solr + +import ( + "math" + + "github.com/influxdata/telegraf/internal" +) + +// Get float64 from interface +func getFloat(value interface{}) float64 { + v, err := internal.ToFloat64(value) + if err != nil || math.IsNaN(v) { + return 0 + } + return v +} + +// Get int64 from interface +func getInt(value interface{}) int64 { + v, err := internal.ToInt64(value) + if err != nil { + return 0 + } + + return v +}