411 lines
17 KiB
Go
411 lines
17 KiB
Go
package ravendb
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/influxdata/telegraf/testutil"
|
|
)
|
|
|
|
// Test against fully filled data
|
|
func TestRavenDBGeneratesMetricsFull(t *testing.T) {
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
var jsonFilePath string
|
|
|
|
switch r.URL.Path {
|
|
case "/admin/monitoring/v1/databases":
|
|
jsonFilePath = "testdata/databases_full.json"
|
|
case "/admin/monitoring/v1/server":
|
|
jsonFilePath = "testdata/server_full.json"
|
|
case "/admin/monitoring/v1/indexes":
|
|
jsonFilePath = "testdata/indexes_full.json"
|
|
case "/admin/monitoring/v1/collections":
|
|
jsonFilePath = "testdata/collections_full.json"
|
|
default:
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
t.Errorf("Cannot handle request for uri %s", r.URL.Path)
|
|
return
|
|
}
|
|
|
|
data, err := os.ReadFile(jsonFilePath)
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
t.Errorf("Could not read from data file %q: %v", jsonFilePath, err)
|
|
return
|
|
}
|
|
|
|
if _, err = w.Write(data); err != nil {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
t.Error(err)
|
|
return
|
|
}
|
|
}))
|
|
defer ts.Close()
|
|
|
|
r := &RavenDB{
|
|
URL: ts.URL,
|
|
StatsInclude: []string{"server", "databases", "indexes", "collections"},
|
|
Log: testutil.Logger{},
|
|
}
|
|
|
|
require.NoError(t, r.Init())
|
|
|
|
acc := &testutil.Accumulator{}
|
|
|
|
err := acc.GatherError(r.Gather)
|
|
require.NoError(t, err)
|
|
|
|
serverFields := map[string]interface{}{
|
|
"server_version": "5.1",
|
|
"server_full_version": "5.1.1-custom-51",
|
|
"uptime_in_sec": int64(30),
|
|
"server_process_id": 26360,
|
|
"config_server_urls": "http://127.0.0.1:8080;http://192.168.0.1:8080",
|
|
"config_tcp_server_urls": "tcp://127.0.0.1:3888;tcp://192.168.0.1:3888",
|
|
"config_public_tcp_server_urls": "tcp://2.3.4.5:3888;tcp://6.7.8.9:3888",
|
|
"backup_max_number_of_concurrent_backups": 4,
|
|
"backup_current_number_of_running_backups": 2,
|
|
"cpu_process_usage": 6.28,
|
|
"cpu_machine_usage": 41.05,
|
|
"cpu_machine_io_wait": 2.55,
|
|
"cpu_processor_count": 8,
|
|
"cpu_assigned_processor_count": 7,
|
|
"cpu_thread_pool_available_worker_threads": 32766,
|
|
"cpu_thread_pool_available_completion_port_threads": 1000,
|
|
"memory_allocated_in_mb": 235,
|
|
"memory_installed_in_mb": 16384,
|
|
"memory_physical_in_mb": 16250,
|
|
"memory_low_memory_severity": "None",
|
|
"memory_total_swap_size_in_mb": 1024,
|
|
"memory_total_swap_usage_in_mb": 456,
|
|
"memory_working_set_swap_usage_in_mb": 89,
|
|
"memory_total_dirty_in_mb": 1,
|
|
"disk_system_store_used_data_file_size_in_mb": 28,
|
|
"disk_system_store_total_data_file_size_in_mb": 32,
|
|
"disk_total_free_space_in_mb": 52078,
|
|
"disk_remaining_storage_space_percentage": 22,
|
|
"license_type": "Enterprise",
|
|
"license_expiration_left_in_sec": 25466947.5,
|
|
"license_utilized_cpu_cores": 8,
|
|
"license_max_cores": 256,
|
|
"network_tcp_active_connections": 84,
|
|
"network_concurrent_requests_count": 1,
|
|
"network_total_requests": 3,
|
|
"network_requests_per_sec": 0.03322,
|
|
"network_last_request_time_in_sec": 0.0264977,
|
|
"network_last_authorized_non_cluster_admin_request_time_in_sec": 0.04,
|
|
"certificate_server_certificate_expiration_left_in_sec": float64(104),
|
|
"certificate_well_known_admin_certificates": "a909502dd82ae41433e6f83886b00d4277a32a7b;4444444444444444444444444444444444444444",
|
|
"cluster_node_state": "Leader",
|
|
"cluster_current_term": 28,
|
|
"cluster_index": 104,
|
|
"databases_total_count": 25,
|
|
"databases_loaded_count": 2,
|
|
}
|
|
|
|
serverTags := map[string]string{
|
|
"url": ts.URL,
|
|
"node_tag": "A",
|
|
"cluster_id": "6b535a18-558f-4e53-a479-a514efc16aab",
|
|
"public_server_url": "http://raven1:8080",
|
|
}
|
|
|
|
defaultTime := time.Unix(0, 0)
|
|
|
|
dbFields := map[string]interface{}{
|
|
"uptime_in_sec": float64(1396),
|
|
"time_since_last_backup_in_sec": 104.3,
|
|
"counts_documents": 425189,
|
|
"counts_revisions": 429605,
|
|
"counts_attachments": 17,
|
|
"counts_unique_attachments": 16,
|
|
"counts_alerts": 2,
|
|
"counts_rehabs": 3,
|
|
"counts_performance_hints": 5,
|
|
"counts_replication_factor": 2,
|
|
"statistics_doc_puts_per_sec": 23.4,
|
|
"statistics_map_index_indexes_per_sec": 82.5,
|
|
"statistics_map_reduce_index_mapped_per_sec": 50.3,
|
|
"statistics_map_reduce_index_reduced_per_sec": 85.2,
|
|
"statistics_requests_per_sec": 22.5,
|
|
"statistics_requests_count": 809,
|
|
"statistics_request_average_duration_in_ms": 0.55,
|
|
"indexes_count": 7,
|
|
"indexes_stale_count": 1,
|
|
"indexes_errors_count": 2,
|
|
"indexes_static_count": 7,
|
|
"indexes_auto_count": 3,
|
|
"indexes_idle_count": 4,
|
|
"indexes_disabled_count": 5,
|
|
"indexes_errored_count": 6,
|
|
"storage_documents_allocated_data_file_in_mb": 1024,
|
|
"storage_documents_used_data_file_in_mb": 942,
|
|
"storage_indexes_allocated_data_file_in_mb": 464,
|
|
"storage_indexes_used_data_file_in_mb": 278,
|
|
"storage_total_allocated_storage_file_in_mb": 1496,
|
|
"storage_total_free_space_in_mb": 52074,
|
|
"storage_io_read_operations": 0.5,
|
|
"storage_io_write_operations": 0.7,
|
|
"storage_read_throughput_in_kb": 2137,
|
|
"storage_write_throughput_in_kb": 2115,
|
|
"storage_queue_length": 15,
|
|
}
|
|
|
|
dbTags := map[string]string{
|
|
"url": ts.URL,
|
|
"node_tag": "A",
|
|
"database_name": "db2",
|
|
"database_id": "06eefe8b-d720-4a8d-a809-2c5af9a4abb5",
|
|
"public_server_url": "http://myhost:8080",
|
|
}
|
|
|
|
indexFields := map[string]interface{}{
|
|
"priority": "Normal",
|
|
"state": "Normal",
|
|
"errors": 0,
|
|
"time_since_last_query_in_sec": 3.4712567,
|
|
"time_since_last_indexing_in_sec": 3.4642612,
|
|
"lock_mode": "Unlock",
|
|
"is_invalid": true,
|
|
"status": "Running",
|
|
"mapped_per_sec": 102.34,
|
|
"reduced_per_sec": 593.23,
|
|
"type": "MapReduce",
|
|
}
|
|
|
|
indexTags := map[string]string{
|
|
"url": ts.URL,
|
|
"node_tag": "A",
|
|
"public_server_url": "http://localhost:8080",
|
|
"database_name": "db1",
|
|
"index_name": "Product/Rating",
|
|
}
|
|
|
|
collectionFields := map[string]interface{}{
|
|
"documents_count": 830,
|
|
"total_size_in_bytes": 2744320,
|
|
"documents_size_in_bytes": 868352,
|
|
"tombstones_size_in_bytes": 122880,
|
|
"revisions_size_in_bytes": 1753088,
|
|
}
|
|
|
|
collectionTags := map[string]string{
|
|
"url": ts.URL,
|
|
"node_tag": "A",
|
|
"database_name": "db1",
|
|
"collection_name": "Orders",
|
|
"public_server_url": "http://localhost:8080",
|
|
}
|
|
|
|
serverExpected := testutil.MustMetric("ravendb_server", serverTags, serverFields, defaultTime)
|
|
dbExpected := testutil.MustMetric("ravendb_databases", dbTags, dbFields, defaultTime)
|
|
indexExpected := testutil.MustMetric("ravendb_indexes", indexTags, indexFields, defaultTime)
|
|
collectionsExpected := testutil.MustMetric("ravendb_collections", collectionTags, collectionFields, defaultTime)
|
|
|
|
for _, metric := range acc.GetTelegrafMetrics() {
|
|
switch metric.Name() {
|
|
case "ravendb_server":
|
|
testutil.RequireMetricEqual(t, serverExpected, metric, testutil.IgnoreTime())
|
|
case "ravendb_databases":
|
|
testutil.RequireMetricEqual(t, dbExpected, metric, testutil.IgnoreTime())
|
|
case "ravendb_indexes":
|
|
testutil.RequireMetricEqual(t, indexExpected, metric, testutil.IgnoreTime())
|
|
case "ravendb_collections":
|
|
testutil.RequireMetricEqual(t, collectionsExpected, metric, testutil.IgnoreTime())
|
|
}
|
|
}
|
|
}
|
|
|
|
// Test against minimum filled data
|
|
func TestRavenDBGeneratesMetricsMin(t *testing.T) {
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
var jsonFilePath string
|
|
|
|
switch r.URL.Path {
|
|
case "/admin/monitoring/v1/databases":
|
|
jsonFilePath = "testdata/databases_min.json"
|
|
case "/admin/monitoring/v1/server":
|
|
jsonFilePath = "testdata/server_min.json"
|
|
case "/admin/monitoring/v1/indexes":
|
|
jsonFilePath = "testdata/indexes_min.json"
|
|
case "/admin/monitoring/v1/collections":
|
|
jsonFilePath = "testdata/collections_min.json"
|
|
default:
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
t.Errorf("Cannot handle request for uri %s", r.URL.Path)
|
|
return
|
|
}
|
|
|
|
data, err := os.ReadFile(jsonFilePath)
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
t.Errorf("Could not read from data file %q: %v", jsonFilePath, err)
|
|
return
|
|
}
|
|
|
|
if _, err = w.Write(data); err != nil {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
t.Error(err)
|
|
return
|
|
}
|
|
}))
|
|
defer ts.Close()
|
|
|
|
r := &RavenDB{
|
|
URL: ts.URL,
|
|
StatsInclude: []string{"server", "databases", "indexes", "collections"},
|
|
Log: testutil.Logger{},
|
|
}
|
|
|
|
require.NoError(t, r.Init())
|
|
|
|
acc := &testutil.Accumulator{}
|
|
|
|
err := acc.GatherError(r.Gather)
|
|
require.NoError(t, err)
|
|
|
|
serverFields := map[string]interface{}{
|
|
"server_version": "5.1",
|
|
"server_full_version": "5.1.1-custom-51",
|
|
"uptime_in_sec": 30,
|
|
"server_process_id": 26360,
|
|
"config_server_urls": "http://127.0.0.1:8080",
|
|
"backup_max_number_of_concurrent_backups": 4,
|
|
"backup_current_number_of_running_backups": 2,
|
|
"cpu_process_usage": 6.28,
|
|
"cpu_machine_usage": 41.07,
|
|
"cpu_processor_count": 8,
|
|
"cpu_assigned_processor_count": 7,
|
|
"cpu_thread_pool_available_worker_threads": 32766,
|
|
"cpu_thread_pool_available_completion_port_threads": 1000,
|
|
"memory_allocated_in_mb": 235,
|
|
"memory_installed_in_mb": 16384,
|
|
"memory_physical_in_mb": 16250,
|
|
"memory_low_memory_severity": "Low",
|
|
"memory_total_swap_size_in_mb": 1024,
|
|
"memory_total_swap_usage_in_mb": 456,
|
|
"memory_working_set_swap_usage_in_mb": 89,
|
|
"memory_total_dirty_in_mb": 1,
|
|
"disk_system_store_used_data_file_size_in_mb": 28,
|
|
"disk_system_store_total_data_file_size_in_mb": 32,
|
|
"disk_total_free_space_in_mb": 52078,
|
|
"disk_remaining_storage_space_percentage": 22,
|
|
"license_type": "Enterprise",
|
|
"license_utilized_cpu_cores": 8,
|
|
"license_max_cores": 256,
|
|
"network_tcp_active_connections": 84,
|
|
"network_concurrent_requests_count": 1,
|
|
"network_total_requests": 3,
|
|
"network_requests_per_sec": 0.03322,
|
|
"cluster_node_state": "Leader",
|
|
"cluster_current_term": 28,
|
|
"cluster_index": 104,
|
|
"databases_total_count": 25,
|
|
"databases_loaded_count": 2,
|
|
}
|
|
|
|
serverTags := map[string]string{
|
|
"url": ts.URL,
|
|
"node_tag": "A",
|
|
"cluster_id": "6b535a18-558f-4e53-a479-a514efc16aab",
|
|
}
|
|
|
|
dbFields := map[string]interface{}{
|
|
"uptime_in_sec": float64(1396),
|
|
"counts_documents": 425189,
|
|
"counts_revisions": 429605,
|
|
"counts_attachments": 17,
|
|
"counts_unique_attachments": 16,
|
|
"counts_alerts": 2,
|
|
"counts_rehabs": 3,
|
|
"counts_performance_hints": 5,
|
|
"counts_replication_factor": 2,
|
|
"statistics_doc_puts_per_sec": 23.4,
|
|
"statistics_map_index_indexes_per_sec": 82.5,
|
|
"statistics_map_reduce_index_mapped_per_sec": 50.3,
|
|
"statistics_map_reduce_index_reduced_per_sec": 85.2,
|
|
"statistics_requests_per_sec": 22.5,
|
|
"statistics_requests_count": 809,
|
|
"statistics_request_average_duration_in_ms": 0.55,
|
|
"indexes_count": 7,
|
|
"indexes_stale_count": 1,
|
|
"indexes_errors_count": 2,
|
|
"indexes_static_count": 7,
|
|
"indexes_auto_count": 3,
|
|
"indexes_idle_count": 4,
|
|
"indexes_disabled_count": 5,
|
|
"indexes_errored_count": 6,
|
|
"storage_documents_allocated_data_file_in_mb": 1024,
|
|
"storage_documents_used_data_file_in_mb": 942,
|
|
"storage_indexes_allocated_data_file_in_mb": 464,
|
|
"storage_indexes_used_data_file_in_mb": 278,
|
|
"storage_total_allocated_storage_file_in_mb": 1496,
|
|
"storage_total_free_space_in_mb": 52074,
|
|
}
|
|
|
|
dbTags := map[string]string{
|
|
"url": ts.URL,
|
|
"node_tag": "A",
|
|
"database_name": "db2",
|
|
"database_id": "06eefe8b-d720-4a8d-a809-2c5af9a4abb5",
|
|
}
|
|
|
|
indexFields := map[string]interface{}{
|
|
"priority": "Normal",
|
|
"state": "Normal",
|
|
"errors": 0,
|
|
"lock_mode": "Unlock",
|
|
"is_invalid": false,
|
|
"status": "Running",
|
|
"mapped_per_sec": 102.34,
|
|
"reduced_per_sec": 593.23,
|
|
"type": "MapReduce",
|
|
}
|
|
|
|
indexTags := map[string]string{
|
|
"url": ts.URL,
|
|
"node_tag": "A",
|
|
"database_name": "db1",
|
|
"index_name": "Product/Rating",
|
|
}
|
|
|
|
collectionFields := map[string]interface{}{
|
|
"documents_count": 830,
|
|
"total_size_in_bytes": 2744320,
|
|
"documents_size_in_bytes": 868352,
|
|
"tombstones_size_in_bytes": 122880,
|
|
"revisions_size_in_bytes": 1753088,
|
|
}
|
|
|
|
collectionTags := map[string]string{
|
|
"url": ts.URL,
|
|
"node_tag": "A",
|
|
"database_name": "db1",
|
|
"collection_name": "Orders",
|
|
}
|
|
|
|
defaultTime := time.Unix(0, 0)
|
|
|
|
serverExpected := testutil.MustMetric("ravendb_server", serverTags, serverFields, defaultTime)
|
|
dbExpected := testutil.MustMetric("ravendb_databases", dbTags, dbFields, defaultTime)
|
|
indexExpected := testutil.MustMetric("ravendb_indexes", indexTags, indexFields, defaultTime)
|
|
collectionsExpected := testutil.MustMetric("ravendb_collections", collectionTags, collectionFields, defaultTime)
|
|
|
|
for _, metric := range acc.GetTelegrafMetrics() {
|
|
switch metric.Name() {
|
|
case "ravendb_server":
|
|
testutil.RequireMetricEqual(t, serverExpected, metric, testutil.IgnoreTime())
|
|
case "ravendb_databases":
|
|
testutil.RequireMetricEqual(t, dbExpected, metric, testutil.IgnoreTime())
|
|
case "ravendb_indexes":
|
|
testutil.RequireMetricEqual(t, indexExpected, metric, testutil.IgnoreTime())
|
|
case "ravendb_collections":
|
|
testutil.RequireMetricEqual(t, collectionsExpected, metric, testutil.IgnoreTime())
|
|
}
|
|
}
|
|
}
|