Skip to content

Commit 2c0a8b1

Browse files
authored
Database instance attribute (#22)
* Added instance as an attribute on the DB samples * Added host and instance to all samples
1 parent f11150b commit 2c0a8b1

12 files changed

Lines changed: 33 additions & 12 deletions

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8+
## 0.1.5 - 2018-11-15
9+
### Added
10+
- Instance as an attribute to WaitGroup and Instance samples
11+
- Host as an attribute to all samples
12+
813
## 0.1.4 - 2018-11-14
914
### Changed
1015
- Made sub query for Instance errors more generic

mssql-config.yml.sample

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@ instances:
77
hostname: <Host name or IP address of the SQl Server>
88
username: <Microsoft SQL Server connection user name>
99
password: <Microsoft SQL Server connection password>
10-
instance: <The Microsoft SQL Server instance to connect to. Do not supply port if this is specified>
10+
11+
# Both port and instance can be omitted to use a default port of 1433
1112
port: <Microsoft SQL Server port to connect to. Only needed when instance not specified>
13+
14+
# Only use instance instead of port if SQL Browser is enabled
15+
instance: <The Microsoft SQL Server instance to connect to. Do not supply port if this is specified>
16+
1217
enable_ssl: <true or false. Indicates if SSL encryption should be used>
1318
trust_server_certificate: <true or false. If true server certificate is not verified for SSL. If false certificate will be verified against supplied certificate>
1419
certificate_location: <Location of the SSL Certificate. Do not specify if trust_server_certificate is set to true>

src/connection/sql_connection.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
// SQLConnection represents a wrapper around a SQL Server connection
1717
type SQLConnection struct {
1818
Connection *sqlx.DB
19+
Host string
1920
}
2021

2122
// NewConnection creates a new SQLConnection from args
@@ -26,6 +27,7 @@ func NewConnection(args *args.ArgumentList) (*SQLConnection, error) {
2627
}
2728
return &SQLConnection{
2829
Connection: db,
30+
Host: args.Hostname,
2931
}, nil
3032
}
3133

src/database/sql_database.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,14 @@ func (l DBMetricSetLookup) getDatabaseName(model interface{}) string {
9494
}
9595

9696
// CreateDBEntitySetLookup creates a look up of Database entity name to a metric.Set
97-
func CreateDBEntitySetLookup(dbEntities []*integration.Entity) DBMetricSetLookup {
97+
func CreateDBEntitySetLookup(dbEntities []*integration.Entity, instanceName, hostname string) DBMetricSetLookup {
9898
entitySetLookup := make(DBMetricSetLookup)
9999
for _, dbEntity := range dbEntities {
100100
set := dbEntity.NewMetricSet("MssqlDatabaseSample",
101101
metric.Attribute{Key: "displayName", Value: dbEntity.Metadata.Name},
102102
metric.Attribute{Key: "entityName", Value: dbEntity.Metadata.Namespace + ":" + dbEntity.Metadata.Name},
103+
metric.Attribute{Key: "instance", Value: instanceName},
104+
metric.Attribute{Key: "host", Value: hostname},
103105
)
104106

105107
entitySetLookup[dbEntity.Metadata.Name] = set

src/database/sql_database_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,18 @@ func Test_createDBEntitySetLookUp(t *testing.T) {
161161
"master": masterEntity.NewMetricSet("MssqlDatabaseSample",
162162
metric.Attribute{Key: "displayName", Value: "master"},
163163
metric.Attribute{Key: "entityName", Value: "database:master"},
164+
metric.Attribute{Key: "instance", Value: "MSSQL"},
165+
metric.Attribute{Key: "host", Value: "myHost"},
164166
),
165167
"tempdb": tempdbEntity.NewMetricSet("MssqlDatabaseSample",
166168
metric.Attribute{Key: "displayName", Value: "tempdb"},
167169
metric.Attribute{Key: "entityName", Value: "database:tempdb"},
170+
metric.Attribute{Key: "instance", Value: "MSSQL"},
171+
metric.Attribute{Key: "host", Value: "myHost"},
168172
),
169173
}
170174

171-
out := CreateDBEntitySetLookup(entities)
175+
out := CreateDBEntitySetLookup(entities, "MSSQL", "myHost")
172176
if !reflect.DeepEqual(out, expected) {
173177
t.Errorf("Expected %+v got %+v", expected, out)
174178
}

src/metrics/metrics.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func PopulateInstanceMetrics(instanceEntity *integration.Entity, connection *con
1717
metricSet := instanceEntity.NewMetricSet("MssqlInstanceSample",
1818
metric.Attribute{Key: "displayName", Value: instanceEntity.Metadata.Name},
1919
metric.Attribute{Key: "entityName", Value: instanceEntity.Metadata.Namespace + ":" + instanceEntity.Metadata.Name},
20+
metric.Attribute{Key: "host", Value: connection.Host},
2021
)
2122

2223
for _, queryDef := range instanceDefinitions {
@@ -56,6 +57,8 @@ func populateWaitTimeMetrics(instanceEntity *integration.Entity, connection *con
5657
metric.Attribute{Key: "displayName", Value: instanceEntity.Metadata.Name},
5758
metric.Attribute{Key: "entityName", Value: instanceEntity.Metadata.Namespace + ":" + instanceEntity.Metadata.Name},
5859
metric.Attribute{Key: "waitType", Value: *model.WaitType},
60+
metric.Attribute{Key: "host", Value: connection.Host},
61+
metric.Attribute{Key: "instance", Value: instanceEntity.Metadata.Name},
5962
)
6063

6164
metrics := []struct {
@@ -81,15 +84,15 @@ func populateWaitTimeMetrics(instanceEntity *integration.Entity, connection *con
8184
}
8285

8386
// PopulateDatabaseMetrics collects per-database metrics
84-
func PopulateDatabaseMetrics(i *integration.Integration, connection *connection.SQLConnection) error {
87+
func PopulateDatabaseMetrics(i *integration.Integration, instanceName string, connection *connection.SQLConnection) error {
8588
// create database entities
8689
dbEntities, err := database.CreateDatabaseEntities(i, connection)
8790
if err != nil {
8891
return err
8992
}
9093

9194
// create database entities lookup for fast metric set
92-
dbSetLookup := database.CreateDBEntitySetLookup(dbEntities)
95+
dbSetLookup := database.CreateDBEntitySetLookup(dbEntities, instanceName, connection.Host)
9396

9497
modelChan := make(chan interface{}, 10)
9598
var wg sync.WaitGroup

src/metrics/metrics_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func Test_populateDatabaseMetrics(t *testing.T) {
7272

7373
mock.ExpectClose()
7474

75-
PopulateDatabaseMetrics(i, conn)
75+
PopulateDatabaseMetrics(i, "MSSQL", conn)
7676

7777
actual, _ := i.MarshalJSON()
7878
expectedFile := filepath.Join("..", "testdata", "databaseMetrics.json.golden")

src/mssql.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414

1515
const (
1616
integrationName = "com.newrelic.mssql"
17-
integrationVersion = "0.1.4"
17+
integrationVersion = "0.1.5"
1818
)
1919

2020
func main() {
@@ -56,7 +56,7 @@ func main() {
5656

5757
// Metric collection
5858
if args.HasMetrics() {
59-
if err := metrics.PopulateDatabaseMetrics(i, con); err != nil {
59+
if err := metrics.PopulateDatabaseMetrics(i, instanceEntity.Metadata.Name, con); err != nil {
6060
log.Error("Error collecting metrics for databases: %s", err.Error())
6161
}
6262

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"name":"test","protocol_version":"2","integration_version":"1.0.0","data":[{"entity":{"name":"test","type":"instance"},"metrics":[],"inventory":{},"events":[]},{"entity":{"name":"master","type":"database"},"metrics":[{"displayName":"master","entityName":"database:master","event_type":"MssqlDatabaseSample","log.transactionGrowth":0}],"inventory":{},"events":[]},{"entity":{"name":"otherdb","type":"database"},"metrics":[{"displayName":"otherdb","entityName":"database:otherdb","event_type":"MssqlDatabaseSample","log.transactionGrowth":1}],"inventory":{},"events":[]}]}
1+
{"name":"test","protocol_version":"2","integration_version":"1.0.0","data":[{"entity":{"name":"test","type":"instance"},"metrics":[],"inventory":{},"events":[]},{"entity":{"name":"master","type":"database"},"metrics":[{"displayName":"master","entityName":"database:master","event_type":"MssqlDatabaseSample","host":"","instance":"MSSQL","log.transactionGrowth":0}],"inventory":{},"events":[]},{"entity":{"name":"otherdb","type":"database"},"metrics":[{"displayName":"otherdb","entityName":"database:otherdb","event_type":"MssqlDatabaseSample","host":"","instance":"MSSQL","log.transactionGrowth":1}],"inventory":{},"events":[]}]}

src/testdata/empty.json.golden

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"name":"test","protocol_version":"2","integration_version":"1.0.0","data":[{"entity":{"name":"test","type":"instance"},"metrics":[{"displayName":"test","entityName":"instance:test","event_type":"MssqlInstanceSample"}],"inventory":{},"events":[]}]}
1+
{"name":"test","protocol_version":"2","integration_version":"1.0.0","data":[{"entity":{"name":"test","type":"instance"},"metrics":[{"displayName":"test","entityName":"instance:test","event_type":"MssqlInstanceSample","host":""}],"inventory":{},"events":[]}]}

0 commit comments

Comments
 (0)