CloudMigration: Provide a stats rollup in the GetSnapshot response (#90252)
* order session list descending * add snapshot status method to store * query stats while retrieving snapshot * return stats in dto * swagger * fix tests * commit results of bingo get * fix swagger * minor improvement * fix typo * forgot a file
This commit is contained in:
@@ -20,6 +20,10 @@ type sqlStore struct {
|
||||
secretsService secrets.Service
|
||||
}
|
||||
|
||||
const (
|
||||
tableName = "cloud_migration_resource"
|
||||
)
|
||||
|
||||
func (ss *sqlStore) GetMigrationSessionByUID(ctx context.Context, uid string) (*cloudmigration.CloudMigrationSession, error) {
|
||||
var cm cloudmigration.CloudMigrationSession
|
||||
err := ss.db.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
@@ -78,9 +82,12 @@ func (ss *sqlStore) CreateMigrationSession(ctx context.Context, migration cloudm
|
||||
return &migration, nil
|
||||
}
|
||||
|
||||
func (ss *sqlStore) GetAllCloudMigrationSessions(ctx context.Context) ([]*cloudmigration.CloudMigrationSession, error) {
|
||||
func (ss *sqlStore) GetCloudMigrationSessionList(ctx context.Context) ([]*cloudmigration.CloudMigrationSession, error) {
|
||||
var migrations = make([]*cloudmigration.CloudMigrationSession, 0)
|
||||
err := ss.db.WithDbSession(ctx, func(sess *db.Session) error { return sess.Find(&migrations) })
|
||||
err := ss.db.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
sess.OrderBy("created DESC")
|
||||
return sess.Find(&migrations)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -227,6 +234,10 @@ func (ss *sqlStore) GetSnapshotByUID(ctx context.Context, uid string, resultPage
|
||||
if err == nil {
|
||||
snapshot.Resources = resources
|
||||
}
|
||||
stats, err := ss.GetSnapshotResourceStats(ctx, uid)
|
||||
if err == nil {
|
||||
snapshot.StatsRollup = *stats
|
||||
}
|
||||
|
||||
return &snapshot, err
|
||||
}
|
||||
@@ -249,6 +260,12 @@ func (ss *sqlStore) GetSnapshotList(ctx context.Context, query cloudmigration.Li
|
||||
if err := ss.decryptKey(ctx, &snapshot); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if stats, err := ss.GetSnapshotResourceStats(ctx, snapshot.UID); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
snapshot.StatsRollup = *stats
|
||||
}
|
||||
snapshots[i] = snapshot
|
||||
}
|
||||
return snapshots, nil
|
||||
@@ -309,6 +326,46 @@ func (ss *sqlStore) GetSnapshotResources(ctx context.Context, snapshotUid string
|
||||
return resources, nil
|
||||
}
|
||||
|
||||
func (ss *sqlStore) GetSnapshotResourceStats(ctx context.Context, snapshotUid string) (*cloudmigration.SnapshotResourceStats, error) {
|
||||
typeCounts := make([]struct {
|
||||
Count int `json:"count"`
|
||||
Type string `json:"type"`
|
||||
}, 0)
|
||||
statusCounts := make([]struct {
|
||||
Count int `json:"count"`
|
||||
Status string `json:"status"`
|
||||
}, 0)
|
||||
err := ss.db.WithDbSession(ctx, func(sess *sqlstore.DBSession) error {
|
||||
sess.Select("count(uid) as 'count', resource_type as 'type'").
|
||||
Table(tableName).
|
||||
GroupBy("type").
|
||||
Where("snapshot_uid = ?", snapshotUid)
|
||||
if err := sess.Find(&typeCounts); err != nil {
|
||||
return err
|
||||
}
|
||||
sess.Select("count(uid) as 'count', status").
|
||||
Table(tableName).
|
||||
GroupBy("status").
|
||||
Where("snapshot_uid = ?", snapshotUid)
|
||||
return sess.Find(&statusCounts)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
stats := &cloudmigration.SnapshotResourceStats{
|
||||
CountsByType: make(map[cloudmigration.MigrateDataType]int, len(typeCounts)),
|
||||
CountsByStatus: make(map[cloudmigration.ItemStatus]int, len(statusCounts)),
|
||||
}
|
||||
for _, c := range typeCounts {
|
||||
stats.CountsByType[cloudmigration.MigrateDataType(c.Type)] = c.Count
|
||||
}
|
||||
for _, c := range statusCounts {
|
||||
stats.CountsByStatus[cloudmigration.ItemStatus(c.Status)] = c.Count
|
||||
}
|
||||
return stats, nil
|
||||
}
|
||||
|
||||
func (ss *sqlStore) DeleteSnapshotResources(ctx context.Context, snapshotUid string) error {
|
||||
return ss.db.WithDbSession(ctx, func(sess *sqlstore.DBSession) error {
|
||||
_, err := sess.Delete(cloudmigration.CloudMigrationResource{
|
||||
|
||||
Reference in New Issue
Block a user