github.com/waldiirawan/apm-agent-go/v2@v2.2.2/sqlutil/drivername.go (about) 1 // Licensed to Elasticsearch B.V. under one or more contributor 2 // license agreements. See the NOTICE file distributed with 3 // this work for additional information regarding copyright 4 // ownership. Elasticsearch B.V. licenses this file to you under 5 // the Apache License, Version 2.0 (the "License"); you may 6 // not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, 12 // software distributed under the License is distributed on an 13 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 // KIND, either express or implied. See the License for the 15 // specific language governing permissions and limitations 16 // under the License. 17 18 package sqlutil // import "github.com/waldiirawan/apm-agent-go/v2/sqlutil" 19 20 import ( 21 "database/sql/driver" 22 "reflect" 23 "strings" 24 ) 25 26 // DriverName returns the name of the driver, based on its type. 27 // If the driver name cannot be deduced, DriverName will return 28 // "generic". 29 func DriverName(d driver.Driver) string { 30 t := reflect.TypeOf(d) 31 if t.Kind() == reflect.Ptr { 32 t = t.Elem() 33 } 34 switch t.Name() { 35 case "SQLiteDriver": 36 return "sqlite3" 37 case "MySQLDriver": 38 return "mysql" 39 case "Driver": 40 // Check suffix in case of vendoring. 41 if strings.HasSuffix(t.PkgPath(), "github.com/lib/pq") { 42 return "postgresql" 43 } 44 45 if strings.HasPrefix(t.PkgPath(), "github.com/jackc/pgx/") { 46 return "postgresql" 47 } 48 49 if strings.HasPrefix(t.PkgPath(), "github.com/denisenkom/go-mssqldb") { 50 return "sqlserver" 51 } 52 } 53 // TODO include the package path of the driver in context 54 // so we can easily determine how the rules above should 55 // be updated. 56 return "generic" 57 }