@@ -4,11 +4,10 @@ import (
4
4
"encoding/json"
5
5
"errors"
6
6
"fmt"
7
+ "github.com/deis/workflow-manager-api/pkg/swagger/models"
8
+ "github.com/jinzhu/gorm"
7
9
"log"
8
10
"time"
9
-
10
- "github.com/deis/workflow-manager/types"
11
- "github.com/jinzhu/gorm"
12
11
)
13
12
14
13
var (
@@ -23,93 +22,83 @@ func (e errParsingCluster) Error() string {
23
22
return fmt .Sprintf ("Error parsing cluster (%s)" , e .origErr )
24
23
}
25
24
26
- // ClusterStateful definition
27
- // This is a wrapper around a cluster object to include properties for use in stateful contexts
28
- type ClusterStateful struct {
29
- // FirstSeen and/or LastSeen suggests a Cluster object in a lifecycle context,
30
- // i.e., for use in business logic which needs to determine a cluster's "freshness" or "staleness"
31
- FirstSeen time.Time `json:"firstSeen"`
32
- LastSeen time.Time `json:"lastSeen"`
33
- types.Cluster
34
- }
35
-
36
25
// GetCluster gets the cluster from the DB with the given cluster ID
37
- func GetCluster (db * gorm.DB , id string ) (ClusterStateful , error ) {
26
+ func GetCluster (db * gorm.DB , id string ) (models. Cluster , error ) {
38
27
ret := & clustersTable {}
39
28
resDB := db .Where (& clustersTable {ClusterID : id }).First (ret )
40
29
if resDB .Error != nil {
41
- return ClusterStateful {}, resDB .Error
30
+ return models. Cluster {}, resDB .Error
42
31
}
43
- cluster , err := parseJSONCluster (ret .Data )
32
+ cluster , err := parseJSONCluster ([] byte ( ret .Data ) )
44
33
if err != nil {
45
- return ClusterStateful {}, errParsingCluster {origErr : err }
34
+ return models. Cluster {}, errParsingCluster {origErr : err }
46
35
}
47
36
return cluster , nil
48
37
}
49
38
50
- func upsertCluster (db * gorm.DB , id string , cluster ClusterStateful ) (ClusterStateful , error ) {
39
+ func upsertCluster (db * gorm.DB , id string , cluster models. Cluster ) (models. Cluster , error ) {
51
40
// Check in
52
41
if err := CheckInCluster (db , id , time .Now (), cluster ); err != nil {
53
- return ClusterStateful {}, err
42
+ return models. Cluster {}, err
54
43
}
55
44
js , err := json .Marshal (cluster )
56
45
if err != nil {
57
- return ClusterStateful {}, err
46
+ return models. Cluster {}, err
58
47
}
59
48
var numExisting int
60
49
query := clustersTable {ClusterID : id }
61
50
countDB := db .Model (& clustersTable {}).Where (& query ).Count (& numExisting )
62
51
if countDB .Error != nil {
63
- return ClusterStateful {}, countDB .Error
52
+ return models. Cluster {}, countDB .Error
64
53
}
65
54
var resDB * gorm.DB
66
55
if numExisting == 0 {
67
56
// no existing clusters, so create one
68
- createDB := db .Create (& clustersTable {ClusterID : id , Data : js })
57
+ createDB := db .Create (& clustersTable {ClusterID : id , Data : string ( js ) })
69
58
if createDB .Error != nil {
70
- return ClusterStateful {}, createDB .Error
59
+ return models. Cluster {}, createDB .Error
71
60
}
72
61
resDB = createDB
73
62
} else {
74
- updateDB := db .Save (& clustersTable {ClusterID : id , Data : js })
63
+ updateDB := db .Save (& clustersTable {ClusterID : id , Data : string ( js ) })
75
64
if updateDB .Error != nil {
76
- return ClusterStateful {}, updateDB .Error
65
+ return models. Cluster {}, updateDB .Error
77
66
}
78
67
resDB = updateDB
79
68
}
80
69
if resDB .RowsAffected != 1 {
81
- return ClusterStateful {}, fmt .Errorf ("%d rows were affected, but expected only 1" , resDB .RowsAffected )
70
+ return models. Cluster {}, fmt .Errorf ("%d rows were affected, but expected only 1" , resDB .RowsAffected )
82
71
}
83
72
retCluster , err := GetCluster (db , id )
84
73
if err != nil {
85
- return ClusterStateful {}, err
74
+ return models. Cluster {}, err
86
75
}
87
76
return retCluster , nil
88
77
}
89
78
90
79
// UpsertCluster creates or updates the cluster with the given ID.
91
- func UpsertCluster (db * gorm.DB , id string , cluster ClusterStateful ) (ClusterStateful , error ) {
80
+ func UpsertCluster (db * gorm.DB , id string , cluster models. Cluster ) (models. Cluster , error ) {
92
81
txn := db .Begin ()
93
82
if txn .Error != nil {
94
- return ClusterStateful {}, txErr {orig : nil , err : txn .Error , op : "begin" }
83
+ return models. Cluster {}, txErr {orig : nil , err : txn .Error , op : "begin" }
95
84
}
96
85
ret , err := upsertCluster (txn , id , cluster )
97
86
if err != nil {
98
87
rbDB := txn .Rollback ()
99
88
if rbDB .Error != nil {
100
- return ClusterStateful {}, txErr {orig : err , err : rbDB .Error , op : "rollback" }
89
+ return models. Cluster {}, txErr {orig : err , err : rbDB .Error , op : "rollback" }
101
90
}
102
- return ClusterStateful {}, err
91
+ return models. Cluster {}, err
103
92
}
104
93
comDB := txn .Commit ()
105
94
if comDB .Error != nil {
106
- return ClusterStateful {}, txErr {orig : nil , err : comDB .Error , op : "commit" }
95
+ return models. Cluster {}, txErr {orig : nil , err : comDB .Error , op : "commit" }
107
96
}
108
97
return ret , nil
109
98
}
110
99
111
100
// CheckInCluster creates a new record in the cluster checkins DB to indicate that the cluster has checked in right now
112
- func CheckInCluster (db * gorm.DB , id string , checkinTime time.Time , cluster ClusterStateful ) error {
101
+ func CheckInCluster (db * gorm.DB , id string , checkinTime time.Time , cluster models. Cluster ) error {
113
102
js , err := json .Marshal (cluster )
114
103
if err != nil {
115
104
fmt .Println ("error marshaling data" )
@@ -128,7 +117,7 @@ func CheckInCluster(db *gorm.DB, id string, checkinTime time.Time, cluster Clust
128
117
129
118
// FilterClustersByAge returns a slice of clusters whose various time fields match the requirements
130
119
// in the given filter. Note that the filter's requirements are a conjunction, not a disjunction
131
- func FilterClustersByAge (db * gorm.DB , filter * ClusterAgeFilter ) ([]ClusterStateful , error ) {
120
+ func FilterClustersByAge (db * gorm.DB , filter * ClusterAgeFilter ) ([]* models. Cluster , error ) {
132
121
var rows []clustersTable
133
122
execDB := db .Raw (`SELECT clusters.*
134
123
FROM clusters, clusters_checkins
@@ -147,13 +136,13 @@ func FilterClustersByAge(db *gorm.DB, filter *ClusterAgeFilter) ([]ClusterStatef
147
136
return nil , execDB .Error
148
137
}
149
138
150
- clusters := make ([]ClusterStateful , len (rows ))
139
+ clusters := make ([]* models. Cluster , len (rows ))
151
140
for i , row := range rows {
152
- cluster , err := parseJSONCluster (row .Data )
141
+ cluster , err := parseJSONCluster ([] byte ( row .Data ) )
153
142
if err != nil {
154
143
return nil , err
155
144
}
156
- clusters [i ] = cluster
145
+ clusters [i ] = & cluster
157
146
}
158
147
return clusters , nil
159
148
}
0 commit comments