youtubebeat/vendor/github.com/elastic/beats/metricbeat/module/jolokia/jmx/data_test.go

241 lines
7.6 KiB
Go

// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package jmx
import (
"io/ioutil"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/elastic/beats/libbeat/common"
)
func TestEventMapper(t *testing.T) {
absPath, err := filepath.Abs("./_meta/test")
assert.NotNil(t, absPath)
assert.Nil(t, err)
jolokiaResponse, err := ioutil.ReadFile(absPath + "/jolokia_response.json")
assert.Nil(t, err)
var mapping = AttributeMapping{
attributeMappingKey{"java.lang:type=Runtime", "Uptime"}: Attribute{
Attr: "Uptime", Field: "uptime"},
attributeMappingKey{"java.lang:type=GarbageCollector,name=ConcurrentMarkSweep", "CollectionTime"}: Attribute{
Attr: "CollectionTime", Field: "gc.cms_collection_time"},
attributeMappingKey{"java.lang:type=GarbageCollector,name=ConcurrentMarkSweep", "CollectionCount"}: Attribute{
Attr: "CollectionCount", Field: "gc.cms_collection_count"},
attributeMappingKey{"java.lang:type=Memory", "HeapMemoryUsage"}: Attribute{
Attr: "HeapMemoryUsage", Field: "memory.heap_usage"},
attributeMappingKey{"java.lang:type=Memory", "NonHeapMemoryUsage"}: Attribute{
Attr: "NonHEapMemoryUsage", Field: "memory.non_heap_usage"},
attributeMappingKey{"org.springframework.boot:type=Endpoint,name=metricsEndpoint", "Metrics"}: Attribute{
Attr: "Metrics", Field: "metrics"},
attributeMappingKey{"Catalina:type=Server", "serverInfo"}: Attribute{
Attr: "serverInfo", Field: "server_info"},
}
events, err := eventMapping(jolokiaResponse, mapping)
assert.Nil(t, err)
expected := []common.MapStr{
{
"uptime": float64(47283),
"gc": common.MapStr{
"cms_collection_time": float64(53),
"cms_collection_count": float64(1),
},
"memory": common.MapStr{
"heap_usage": map[string]interface{}{
"init": float64(1073741824),
"committed": float64(1037959168),
"max": float64(1037959168),
"used": float64(227420472),
},
"non_heap_usage": map[string]interface{}{
"init": float64(2555904),
"committed": float64(53477376),
"max": float64(-1),
"used": float64(50519768),
},
},
"metrics": map[string]interface{}{
"atomikos_nbTransactions": float64(0),
"classes": float64(18857),
"classes_loaded": float64(19127),
"classes_unloaded": float64(270),
},
"server_info": "Apache Tomcat/9.0.7",
},
}
assert.ElementsMatch(t, expected, events)
}
func TestEventGroupingMapper(t *testing.T) {
absPath, err := filepath.Abs("./_meta/test")
assert.NotNil(t, absPath)
assert.Nil(t, err)
jolokiaResponse, err := ioutil.ReadFile(absPath + "/jolokia_response.json")
assert.Nil(t, err)
var mapping = AttributeMapping{
attributeMappingKey{"java.lang:type=Runtime", "Uptime"}: Attribute{
Attr: "Uptime", Field: "uptime"},
attributeMappingKey{"java.lang:type=GarbageCollector,name=ConcurrentMarkSweep", "CollectionTime"}: Attribute{
Attr: "CollectionTime", Field: "gc.cms_collection_time", Event: "gc"},
attributeMappingKey{"java.lang:type=GarbageCollector,name=ConcurrentMarkSweep", "CollectionCount"}: Attribute{
Attr: "CollectionCount", Field: "gc.cms_collection_count", Event: "gc"},
attributeMappingKey{"java.lang:type=Memory", "HeapMemoryUsage"}: Attribute{
Attr: "HeapMemoryUsage", Field: "memory.heap_usage", Event: "memory"},
attributeMappingKey{"java.lang:type=Memory", "NonHeapMemoryUsage"}: Attribute{
Attr: "NonHEapMemoryUsage", Field: "memory.non_heap_usage", Event: "memory"},
attributeMappingKey{"org.springframework.boot:type=Endpoint,name=metricsEndpoint", "Metrics"}: Attribute{
Attr: "Metrics", Field: "metrics"},
attributeMappingKey{"Catalina:type=Server", "serverInfo"}: Attribute{
Attr: "serverInfo", Field: "server_info"},
}
events, err := eventMapping(jolokiaResponse, mapping)
assert.Nil(t, err)
expected := []common.MapStr{
{
"uptime": float64(47283),
"metrics": map[string]interface{}{
"atomikos_nbTransactions": float64(0),
"classes": float64(18857),
"classes_loaded": float64(19127),
"classes_unloaded": float64(270),
},
"server_info": "Apache Tomcat/9.0.7",
},
{
"gc": common.MapStr{
"cms_collection_time": float64(53),
"cms_collection_count": float64(1),
},
},
{
"memory": common.MapStr{
"heap_usage": map[string]interface{}{
"init": float64(1073741824),
"committed": float64(1037959168),
"max": float64(1037959168),
"used": float64(227420472),
},
"non_heap_usage": map[string]interface{}{
"init": float64(2555904),
"committed": float64(53477376),
"max": float64(-1),
"used": float64(50519768),
},
},
},
}
assert.ElementsMatch(t, expected, events)
}
func TestEventMapperWithWildcard(t *testing.T) {
absPath, err := filepath.Abs("./_meta/test")
assert.NotNil(t, absPath)
assert.Nil(t, err)
jolokiaResponse, err := ioutil.ReadFile(absPath + "/jolokia_response_wildcard.json")
assert.Nil(t, err)
var mapping = AttributeMapping{
attributeMappingKey{"Catalina:name=*,type=ThreadPool", "port"}: Attribute{
Attr: "port", Field: "port"},
attributeMappingKey{"Catalina:name=*,type=ThreadPool", "maxConnections"}: Attribute{
Attr: "maxConnections", Field: "max_connections"},
}
events, err := eventMapping(jolokiaResponse, mapping)
assert.Nil(t, err)
assert.Equal(t, 2, len(events))
expected := []common.MapStr{
{
"mbean": "Catalina:name=\"http-bio-8080\",type=ThreadPool",
"max_connections": float64(200),
"port": float64(8080),
},
{
"mbean": "Catalina:name=\"ajp-bio-8009\",type=ThreadPool",
"max_connections": float64(200),
"port": float64(8009),
},
}
assert.ElementsMatch(t, expected, events)
}
func TestEventGroupingMapperWithWildcard(t *testing.T) {
absPath, err := filepath.Abs("./_meta/test")
assert.NotNil(t, absPath)
assert.Nil(t, err)
jolokiaResponse, err := ioutil.ReadFile(absPath + "/jolokia_response_wildcard.json")
assert.Nil(t, err)
var mapping = AttributeMapping{
attributeMappingKey{"Catalina:name=*,type=ThreadPool", "port"}: Attribute{
Attr: "port", Field: "port", Event: "port"},
attributeMappingKey{"Catalina:name=*,type=ThreadPool", "maxConnections"}: Attribute{
Attr: "maxConnections", Field: "max_connections", Event: "network"},
}
events, err := eventMapping(jolokiaResponse, mapping)
assert.Nil(t, err)
assert.Equal(t, 4, len(events))
expected := []common.MapStr{
{
"mbean": "Catalina:name=\"http-bio-8080\",type=ThreadPool",
"port": float64(8080),
},
{
"mbean": "Catalina:name=\"http-bio-8080\",type=ThreadPool",
"max_connections": float64(200),
},
{
"mbean": "Catalina:name=\"ajp-bio-8009\",type=ThreadPool",
"port": float64(8009),
},
{
"mbean": "Catalina:name=\"ajp-bio-8009\",type=ThreadPool",
"max_connections": float64(200),
},
}
assert.ElementsMatch(t, expected, events)
}