in internal/sqlservermetrics/sqlservermetrics_linux.go [77:150]
func (s *SQLServerMetrics) sqlCollection(ctx context.Context) error {
if !s.Config.GetCollectionConfiguration().GetCollectSqlMetrics() {
return nil
}
wlm, err := s.initCollection(ctx, false)
if err != nil {
usagemetrics.Error(usagemetrics.WorkloadManagerConnectionError)
return err
}
for _, credentialCfg := range s.Config.GetCredentialConfigurations() {
validationDetails := []sqlserverutils.MetricDetails{}
guestCfg := guestConfigFromCredential(credentialCfg)
for _, sqlCfg := range sqlConfigFromCredential(credentialCfg) {
if err := validateCredCfgSQL(false, !guestCfg.LinuxRemote, sqlCfg, guestCfg, credentialCfg.GetVmProperties().GetInstanceId(), credentialCfg.GetVmProperties().GetInstanceName()); err != nil {
usagemetrics.Error(usagemetrics.SQLServerInvalidConfigurationsError)
log.Logger.Errorw("Invalid credential configuration", "error", err)
continue
}
projectID := sqlCfg.ProjectID
if projectID == "" {
projectID = sip.ProjectID
}
pswd, err := secretValue(ctx, projectID, sqlCfg.SecretName)
if err != nil {
usagemetrics.Error(usagemetrics.SecretManagerValueError)
log.Logger.Errorw("Failed to get secret value", "error", err)
continue
}
details, err := func(ctx context.Context, conn string, timeout time.Duration, windows bool) ([]sqlserverutils.MetricDetails, error) {
c, err := sqlcollector.NewV1("sqlserver", conn, windows)
if err != nil {
return nil, err
}
defer c.Close()
// Start db collection.
log.Logger.Debug("Collecting SQL Server rules.")
details := c.CollectSQLMetrics(ctx, timeout)
log.Logger.Debug("Collecting SQL Server rules completes.")
return details, nil
}(ctx, fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;", sqlCfg.Host, sqlCfg.Username, pswd, sqlCfg.PortNumber), s.Config.GetCollectionTimeout().AsDuration(), false)
if err != nil {
log.Logger.Errorw("Failed to run sql collection", "error", err)
continue
}
for _, detail := range details {
for _, field := range detail.Fields {
field["host_name"] = sqlCfg.Host
field["port_number"] = fmt.Sprintf("%d", sqlCfg.PortNumber)
}
}
addPhysicalDriveLocal(ctx, details, false)
for i, detail := range details {
for _, vd := range validationDetails {
if detail.Name == vd.Name {
detail.Fields = append(vd.Fields, detail.Fields...)
details[i] = detail
break
}
}
}
validationDetails = details
}
targetInstanceProps := sip
updateCollectedData(wlm, sip, targetInstanceProps, validationDetails)
log.Logger.Debugf("Source vm %s is sending collected sql data on target machine, %s, to workload manager.", sip.Instance, targetInstanceProps.Instance)
sendRequestToWLM(ctx, wlm, sip.Name, s.Config.GetMaxRetries(), s.Config.GetRetryFrequency().AsDuration())
}
return nil
}