func fetchLastBackupTimestamps()

in internal/workloadmanager/hanametrics.go [593:646]


func fetchLastBackupTimestamps(ctx context.Context, dbTenant hanaDBTenant, exec commandlineexecutor.Execute) (full, delta, snapshot time.Time, err error) {
	full, delta, snapshot = time.Time{}, time.Time{}, time.Time{}
	dirPath := fmt.Sprintf("/usr/sap/%s/HDB%s/%s/trace/", dbTenant.sid, dbTenant.instanceID, dbTenant.tenantName)

	// Fetch a list of successful backups and process them from most to least
	// recent to find a timestamp for each backup type (full, delta, snapshot).
	backups, err := fetchSuccessfulBackups(ctx, dirPath, exec)
	if err != nil {
		return full, delta, snapshot, err
	}
	if len(backups) == 0 {
		log.CtxLogger(ctx).Debugw("No successful HANA backups found", "tenant", dbTenant.tenantName)
		return full, delta, snapshot, nil
	}
	backupTypeMap, err := fetchBackupThreadIDs(ctx, dirPath, exec)
	if err != nil {
		return full, delta, snapshot, err
	}
	if len(backupTypeMap) == 0 {
		log.CtxLogger(ctx).Debugw("No HANA backup commands found", "tenant", dbTenant.tenantName)
		return full, delta, snapshot, nil
	}

	sort.Slice(backups, func(i, j int) bool { return backups[i].finishTime.After(backups[j].finishTime) })
	for _, backup := range backups {
		if !delta.IsZero() && !full.IsZero() && !snapshot.IsZero() {
			break
		}
		if backupType, ok := backupTypeMap[backup.backupID]; ok {
			switch {
			case full.IsZero() && backupType == hanaBackupFull:
				// This is the latest successful full backup for this tenant.
				full = backup.finishTime
			case delta.IsZero() && backupType == hanaBackupDelta:
				// This is the latest delta backup for this tenant.
				delta = backup.finishTime
			case snapshot.IsZero() && backupType == hanaBackupSnapshot:
				// This is the latest snapshot backup for this tenant.
				snapshot = backup.finishTime
			}
		}
	}

	if full.IsZero() {
		log.CtxLogger(ctx).Debugw("No full backup found", "tenant", dbTenant.tenantName)
	}
	if delta.IsZero() {
		log.CtxLogger(ctx).Debugw("No delta backup found", "tenant", dbTenant.tenantName)
	}
	if snapshot.IsZero() {
		log.CtxLogger(ctx).Debugw("No snapshot backup found", "tenant", dbTenant.tenantName)
	}
	return full, delta, snapshot, nil
}