120 lines
4.0 KiB
Go
120 lines
4.0 KiB
Go
package manager
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
const (
|
|
ExporterName = "grafana"
|
|
)
|
|
|
|
var (
|
|
// MStatTotalServiceAccounts is a metric gauge for total number of service accounts
|
|
MStatTotalServiceAccounts prometheus.Gauge
|
|
|
|
// MStatTotalServiceAccountsNoRole is a metric gauge for total number of user accounts with no role
|
|
MStatTotalServiceAccountsNoRole prometheus.Gauge
|
|
|
|
// MStatTotalServiceAccountTokens is a metric gauge for total number of service account tokens
|
|
MStatTotalServiceAccountTokens prometheus.Gauge
|
|
|
|
// MStatTotalMigratedAPIKeysToSATokens is a metric gauge for total number of API keys to be migrated to service account tokens
|
|
MStatTotalMigratedAPIKeysToSATokens prometheus.Gauge
|
|
|
|
// MStatSuccessfullyMigratedAPIKeysToSATokens is a metric gauge for total number of successful migrations of API keys to service account tokens
|
|
MStatSuccessfullyMigratedAPIKeysToSATokens prometheus.Gauge
|
|
|
|
// MStatFailedMigratedAPIKeysToSATokens is a metric gauge for total number of failed migrations of API keys to service account tokens
|
|
MStatFailedMigratedAPIKeysToSATokens prometheus.Gauge
|
|
|
|
Initialised bool = false
|
|
)
|
|
|
|
func init() {
|
|
MStatTotalServiceAccounts = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_total_service_accounts",
|
|
Help: "total amount of service accounts",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatTotalServiceAccountsNoRole = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_total_service_accounts_role_none",
|
|
Help: "total amount of service accounts with no role",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatTotalServiceAccountTokens = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_total_service_account_tokens",
|
|
Help: "total amount of service account tokens",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatTotalMigratedAPIKeysToSATokens = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_total_migrated_api_keys_to_sa_tokens",
|
|
Help: "total number of API keys to be migrated to service account tokens",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatSuccessfullyMigratedAPIKeysToSATokens = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_successfully_migrated_api_keys_to_sa_tokens",
|
|
Help: "total number of successful migrations of API keys to service account tokens",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
MStatFailedMigratedAPIKeysToSATokens = prometheus.NewGauge(prometheus.GaugeOpts{
|
|
Name: "stat_failed_migrated_api_keys_to_sa_tokens",
|
|
Help: "total number of failed migrations of API keys to service account tokens",
|
|
Namespace: ExporterName,
|
|
})
|
|
|
|
prometheus.MustRegister(
|
|
MStatTotalServiceAccounts,
|
|
MStatTotalServiceAccountTokens,
|
|
MStatTotalServiceAccountsNoRole,
|
|
MStatTotalMigratedAPIKeysToSATokens,
|
|
MStatSuccessfullyMigratedAPIKeysToSATokens,
|
|
MStatFailedMigratedAPIKeysToSATokens,
|
|
)
|
|
}
|
|
|
|
func (sa *ServiceAccountsService) getUsageMetrics(ctx context.Context) (map[string]any, error) {
|
|
stats := map[string]any{}
|
|
|
|
storeStats, err := sa.store.GetUsageMetrics(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
stats["stats.serviceaccounts.count"] = storeStats.ServiceAccounts
|
|
stats["stats.serviceaccounts.role_none.count"] = storeStats.ServiceAccountsWithNoRole
|
|
stats["stats.serviceaccounts.tokens.count"] = storeStats.Tokens
|
|
|
|
var forcedExpiryEnabled int64 = 0
|
|
if storeStats.ForcedExpiryEnabled {
|
|
forcedExpiryEnabled = 1
|
|
}
|
|
|
|
stats["stats.serviceaccounts.forced_expiry_enabled.count"] = forcedExpiryEnabled
|
|
|
|
var secretScanEnabled int64 = 0
|
|
if sa.secretScanEnabled {
|
|
secretScanEnabled = 1
|
|
}
|
|
|
|
stats["stats.serviceaccounts.secret_scan.enabled.count"] = secretScanEnabled
|
|
|
|
MStatTotalServiceAccounts.Set(float64(storeStats.ServiceAccounts))
|
|
MStatTotalServiceAccountsNoRole.Set(float64(storeStats.ServiceAccountsWithNoRole))
|
|
MStatTotalServiceAccountTokens.Set(float64(storeStats.Tokens))
|
|
|
|
return stats, nil
|
|
}
|
|
|
|
func setAPIKeyMigrationStats(total, migrated, failed int) {
|
|
MStatTotalMigratedAPIKeysToSATokens.Set(float64(total))
|
|
MStatSuccessfullyMigratedAPIKeysToSATokens.Set(float64(migrated))
|
|
MStatFailedMigratedAPIKeysToSATokens.Set(float64(failed))
|
|
}
|