in internal/sqlservermetrics/sqlservermetrics.go [353:420]
func addPhysicalDriveRemoteLinux(details []internal.Details, cred *configuration.GuestConfig) {
user := cred.GuestUserName
port := cred.GuestPortNumber
ip := cred.ServerName
// We need to call NewRemote, SetupKeys and CreateClient respectively to set up the remote correctly.
r := remote.NewRemote(ip, user, port, UsageMetricsLogger)
if err := r.SetupKeys(cred.LinuxSSHPrivateKeyPath); err != nil {
log.Logger.Errorw("Failed to setup keys.", "error", err)
UsageMetricsLogger.Error(agentstatus.SetupSSHKeysError)
return
}
if err := r.CreateClient(); err != nil {
log.Logger.Errorw("Failed to create client.", "error", err)
UsageMetricsLogger.Error(agentstatus.SSHDialError)
return
}
defer r.Close()
for _, detail := range details {
if detail.Name != "DB_LOG_DISK_SEPARATION" {
continue
}
for _, field := range detail.Fields {
physicalPath, pathExists := field["physical_name"]
if !pathExists {
log.Logger.Warn("physical_name field for DB_LOG_DISK_SEPERATION does not exist")
continue
}
dir, filePath := filepath.Split(physicalPath)
findCommand := fmt.Sprintf(commandFind, dir, filePath)
filePath, filePathErr := remote.RunCommandWithPipes(findCommand, r)
if filePathErr != nil {
log.Logger.Warnf("Failed to run cmd %v. error: %v", findCommand, filePathErr)
continue
}
filePath = strings.TrimSuffix(filePath, "\n")
command := fmt.Sprintf(commandDf, filePath)
physicalPathMount, physicalPathErr := remote.RunCommandWithPipes(command, r)
if physicalPathErr != nil {
log.Logger.Warnf("Failed to run cmd %v. error: %v", command, physicalPathErr)
continue
}
physicalPathMount = strings.TrimSuffix(physicalPathMount, "\n")
resultMount, mountErr := remote.RunCommandWithPipes(commandMount, r)
if mountErr != nil {
log.Logger.Warnf("Failed to run cmd %v. error: %v", commandMount, mountErr)
continue
}
allMounts := strings.TrimSuffix(resultMount, "\n")
physicalDriveHelper := regexp.MustCompile(` `+physicalPathMount+` `).Split(allMounts, -1)
physicalDrives := []string{}
for i := 0; i < len(physicalDriveHelper)-1; i++ {
splitStr := regexp.MustCompile("\n| |/").Split(physicalDriveHelper[i], -1)
if len(splitStr) < 2 {
log.Logger.Warn("regex for linux error. Unable to find physical drive associated with mount.")
continue
}
physicalDrives = append(physicalDrives, splitStr[len(splitStr)-2])
}
physicalDrive := strings.Join(physicalDrives, ", ")
field["physical_drive"] = physicalDrive
}
}
}