feat: added versions to workflow tempaltes.

update: updated logic to get workflow template executions stats to be a single query.
This commit is contained in:
Andrey Melnikov
2020-04-20 13:47:48 -07:00
parent 43f71184a9
commit ae524fbd2e
9 changed files with 200 additions and 101 deletions

View File

@@ -2253,6 +2253,10 @@
"type": "integer",
"format": "int32"
},
"versions": {
"type": "integer",
"format": "int32"
},
"manifest": {
"type": "string"
},

View File

@@ -579,11 +579,12 @@ type WorkflowTemplate struct {
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
Version int32 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"`
Manifest string `protobuf:"bytes,5,opt,name=manifest,proto3" json:"manifest,omitempty"`
IsLatest bool `protobuf:"varint,6,opt,name=isLatest,proto3" json:"isLatest,omitempty"`
IsArchived bool `protobuf:"varint,7,opt,name=isArchived,proto3" json:"isArchived,omitempty"`
Labels []*KeyValue `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty"`
Stats *WorkflowExecutionStatisticReport `protobuf:"bytes,9,opt,name=stats,proto3" json:"stats,omitempty"`
Versions int32 `protobuf:"varint,5,opt,name=versions,proto3" json:"versions,omitempty"`
Manifest string `protobuf:"bytes,6,opt,name=manifest,proto3" json:"manifest,omitempty"`
IsLatest bool `protobuf:"varint,7,opt,name=isLatest,proto3" json:"isLatest,omitempty"`
IsArchived bool `protobuf:"varint,8,opt,name=isArchived,proto3" json:"isArchived,omitempty"`
Labels []*KeyValue `protobuf:"bytes,9,rep,name=labels,proto3" json:"labels,omitempty"`
Stats *WorkflowExecutionStatisticReport `protobuf:"bytes,10,opt,name=stats,proto3" json:"stats,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -642,6 +643,13 @@ func (m *WorkflowTemplate) GetVersion() int32 {
return 0
}
func (m *WorkflowTemplate) GetVersions() int32 {
if m != nil {
return m.Versions
}
return 0
}
func (m *WorkflowTemplate) GetManifest() string {
if m != nil {
return m.Manifest
@@ -759,68 +767,69 @@ func init() {
func init() { proto.RegisterFile("workflow_template.proto", fileDescriptor_b9a07547748a96e8) }
var fileDescriptor_b9a07547748a96e8 = []byte{
// 975 bytes of a gzipped FileDescriptorProto
// 984 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x97, 0x4f, 0x6f, 0x1b, 0x45,
0x14, 0xc0, 0x35, 0x4e, 0x9d, 0xc6, 0xaf, 0x20, 0xa5, 0x0f, 0x92, 0x6c, 0x96, 0xa4, 0x35, 0xd3,
0x44, 0x72, 0x11, 0xb2, 0xd5, 0xc0, 0x29, 0x2d, 0xa2, 0x6e, 0x5a, 0x0a, 0x34, 0x07, 0xb4, 0xa5,
0x45, 0xea, 0x05, 0x26, 0xbb, 0xe3, 0x30, 0xea, 0x66, 0x77, 0xf1, 0x8c, 0x13, 0x4a, 0xb0, 0x44,
0xe1, 0xc0, 0x8d, 0x0b, 0x7f, 0x04, 0x42, 0xea, 0x19, 0x89, 0x7e, 0x00, 0xce, 0x7c, 0x85, 0x7e,
0x05, 0x38, 0xf0, 0x2d, 0xd0, 0xce, 0xee, 0x3a, 0xb1, 0xbd, 0x63, 0xbc, 0xb6, 0xe9, 0xcd, 0x33,
0xf3, 0xf6, 0xcd, 0xef, 0xfd, 0x9b, 0xf7, 0x0c, 0x2b, 0x47, 0x61, 0xfb, 0x61, 0xcb, 0x0f, 0x8f,
0x3e, 0x56, 0xfc, 0x20, 0xf2, 0x99, 0xe2, 0xf5, 0xa8, 0x1d, 0xaa, 0x10, 0xe7, 0x58, 0x24, 0xec,
0xb5, 0xfd, 0x30, 0xdc, 0xf7, 0x79, 0x83, 0x45, 0xa2, 0xc1, 0x82, 0x20, 0x54, 0x4c, 0x89, 0x30,
0x90, 0x89, 0x88, 0x7d, 0xce, 0x67, 0x7b, 0xdc, 0x4f, 0x16, 0xf4, 0x2b, 0x02, 0xeb, 0x3b, 0x6d,
0xce, 0x14, 0xff, 0x28, 0xd5, 0xf8, 0x61, 0xaa, 0xd0, 0xe1, 0x9f, 0x75, 0xb8, 0x54, 0xb8, 0x06,
0x95, 0x80, 0x1d, 0x70, 0x19, 0x31, 0x97, 0x5b, 0xa4, 0x4a, 0x6a, 0x15, 0xe7, 0x64, 0x03, 0x9b,
0xb0, 0x78, 0x34, 0xf0, 0xa1, 0x55, 0xaa, 0x92, 0xda, 0xb9, 0xad, 0xa5, 0x3a, 0x8b, 0x44, 0x7d,
0x48, 0xeb, 0x90, 0x38, 0xfd, 0x96, 0xc0, 0xc6, 0xbd, 0xc8, 0xcb, 0x41, 0xb8, 0xcf, 0xdb, 0x52,
0x84, 0xc1, 0x73, 0x23, 0x69, 0x81, 0x7d, 0x9b, 0xab, 0xc9, 0x1c, 0xb1, 0x08, 0x73, 0x1d, 0xe1,
0xe9, 0x1b, 0x2b, 0x4e, 0xfc, 0x13, 0x2d, 0x38, 0x7b, 0x98, 0x18, 0x60, 0xcd, 0x55, 0x49, 0xad,
0xec, 0x64, 0x4b, 0xfa, 0x25, 0xac, 0xed, 0xf8, 0x61, 0xc0, 0x67, 0x75, 0x13, 0xc2, 0x99, 0xf8,
0x58, 0x5f, 0x53, 0x71, 0xf4, 0xef, 0xd3, 0xb7, 0x9f, 0xe9, 0xbf, 0xfd, 0x1e, 0x5c, 0xda, 0x15,
0x52, 0x19, 0x9c, 0x2d, 0x27, 0x84, 0xa0, 0x8f, 0x09, 0x6c, 0x8c, 0xd6, 0x2b, 0xa3, 0x30, 0x90,
0x1c, 0x5f, 0x86, 0xb2, 0x1b, 0x76, 0x02, 0xa5, 0x95, 0x96, 0x9d, 0x64, 0x81, 0x3b, 0x70, 0x7e,
0x30, 0x1e, 0xd2, 0x2a, 0x55, 0xe7, 0xcc, 0xf1, 0x1b, 0x96, 0xa7, 0xd7, 0x60, 0x2d, 0x0f, 0x61,
0x3c, 0x9b, 0xe8, 0x17, 0xb0, 0x6e, 0xf8, 0xfa, 0xff, 0x27, 0xff, 0x00, 0x2e, 0x34, 0xdb, 0xee,
0xa7, 0xe2, 0x70, 0x56, 0x49, 0x41, 0x3d, 0xb8, 0x68, 0xd4, 0x98, 0xda, 0x93, 0x57, 0x32, 0xa4,
0x58, 0xc9, 0x3c, 0x25, 0x50, 0xcd, 0xc4, 0x6e, 0x7d, 0xce, 0xdd, 0x4e, 0xfc, 0xd2, 0xdc, 0x8d,
0x1f, 0x1c, 0xa9, 0x84, 0xeb, 0xf0, 0x28, 0x6c, 0xab, 0xd8, 0x6f, 0x2a, 0x54, 0xcc, 0xcf, 0xfc,
0xa6, 0x17, 0x48, 0xe1, 0x05, 0x9f, 0x49, 0x95, 0x7c, 0xc5, 0x33, 0xf6, 0xbe, 0xbd, 0x38, 0x8b,
0xdb, 0x9d, 0x20, 0x10, 0xc1, 0x7e, 0x56, 0x43, 0xe9, 0x32, 0x76, 0x87, 0x1b, 0x1e, 0x44, 0x3e,
0x8f, 0x3f, 0x4d, 0x32, 0xfc, 0x64, 0x03, 0x97, 0x61, 0xbe, 0xc5, 0x84, 0xcf, 0x3d, 0xab, 0xac,
0x8f, 0xd2, 0x15, 0x7d, 0x5a, 0x82, 0xc5, 0x41, 0xab, 0xb4, 0x2a, 0xfd, 0x04, 0x7a, 0x4d, 0x95,
0x79, 0xb6, 0xb7, 0x31, 0x6d, 0xb9, 0xa1, 0x0d, 0x0b, 0x07, 0x2c, 0x10, 0x2d, 0x2e, 0x95, 0x86,
0xa9, 0x38, 0xbd, 0x75, 0x7c, 0x26, 0xe4, 0x6e, 0x9c, 0x00, 0xca, 0x9a, 0xaf, 0x92, 0xda, 0x82,
0xd3, 0x5b, 0xe3, 0x05, 0x00, 0x21, 0xd3, 0x08, 0x7a, 0xd6, 0x59, 0x7d, 0x7a, 0x6a, 0x07, 0x37,
0x61, 0x5e, 0x3f, 0xe4, 0xd2, 0x5a, 0xd0, 0xb9, 0xf6, 0xa2, 0x0e, 0xd9, 0x1d, 0xfe, 0xe8, 0x3e,
0xf3, 0x3b, 0xdc, 0x49, 0x0f, 0xf1, 0x2a, 0x94, 0xa5, 0x62, 0x4a, 0x5a, 0x15, 0x1d, 0xd8, 0xcd,
0xbe, 0xc0, 0x9a, 0x22, 0xe6, 0x24, 0xdf, 0xd0, 0xdf, 0x09, 0x54, 0x73, 0x5e, 0xc4, 0x5d, 0xad,
0x7a, 0xbc, 0xc4, 0xcc, 0x9c, 0x55, 0xca, 0x77, 0x56, 0xff, 0xcb, 0x78, 0x42, 0xbb, 0x50, 0x9c,
0x76, 0xeb, 0x97, 0xf3, 0xb0, 0x32, 0x88, 0x7a, 0x97, 0xb7, 0x0f, 0x85, 0xcb, 0xf1, 0x57, 0x02,
0xcb, 0xf9, 0x7d, 0x0e, 0xa9, 0xbe, 0x64, 0x64, 0x13, 0xb4, 0xf3, 0xeb, 0x81, 0xbe, 0xf3, 0xf5,
0xb3, 0xbf, 0xbe, 0x2f, 0x5d, 0xa7, 0xaf, 0xc7, 0xad, 0x56, 0x36, 0x0e, 0xaf, 0xec, 0x71, 0xc5,
0xae, 0x34, 0x8e, 0x7b, 0xe6, 0x77, 0x1b, 0x43, 0x8d, 0x5a, 0x6e, 0x0f, 0x55, 0x11, 0xfe, 0x4d,
0x60, 0x7d, 0x64, 0x0b, 0xc4, 0xcb, 0x1a, 0x60, 0x9c, 0x36, 0x69, 0x62, 0x7d, 0x4c, 0x34, 0xec,
0xb1, 0xbd, 0x5f, 0x04, 0xb6, 0x71, 0x3c, 0x08, 0x5b, 0xef, 0x08, 0xaf, 0xdb, 0x48, 0x03, 0x96,
0x77, 0x9e, 0x1e, 0x75, 0x73, 0xec, 0xfc, 0xd3, 0x38, 0x6d, 0x64, 0x76, 0x4e, 0x11, 0x8c, 0x96,
0xb6, 0xef, 0x13, 0xba, 0x3b, 0x4b, 0xfb, 0x72, 0x8c, 0x78, 0x46, 0xe0, 0xa5, 0x9c, 0xa2, 0xc0,
0x8b, 0x1a, 0xcb, 0x3c, 0x40, 0x98, 0xb8, 0xbf, 0x49, 0x02, 0xd3, 0xc5, 0xad, 0x62, 0xe0, 0x31,
0xe7, 0x83, 0xdb, 0x78, 0xab, 0xf8, 0x57, 0xa7, 0xa2, 0x97, 0x05, 0x0b, 0xff, 0x20, 0xf9, 0xbd,
0x33, 0x6b, 0xdf, 0x58, 0xd3, 0xf4, 0x63, 0x4c, 0x0e, 0xf6, 0xe5, 0x31, 0x24, 0x93, 0x0e, 0x44,
0x77, 0xb4, 0xe9, 0x6f, 0xe1, 0xd5, 0x29, 0x8c, 0xc0, 0x1f, 0x08, 0x2c, 0xe5, 0x36, 0x6e, 0x7c,
0xd5, 0x48, 0xd2, 0x83, 0xa5, 0xa3, 0x44, 0x52, 0xca, 0x37, 0x35, 0x65, 0x1d, 0x0b, 0x95, 0x39,
0xfe, 0x43, 0x60, 0x29, 0x77, 0xcc, 0x4b, 0xb1, 0x46, 0x8d, 0x80, 0xa6, 0x5c, 0xf9, 0x31, 0xc9,
0x95, 0xef, 0x08, 0xbe, 0x3d, 0x81, 0xc7, 0xdc, 0xf8, 0xc6, 0x44, 0xb4, 0xfb, 0xe0, 0x0e, 0xbe,
0x37, 0xa5, 0x8a, 0x53, 0xd9, 0xf3, 0x1b, 0x81, 0x15, 0xc3, 0xb4, 0x81, 0x97, 0xb4, 0x29, 0xa3,
0xa7, 0x1b, 0x7b, 0x63, 0xb4, 0x50, 0x1a, 0x88, 0x1b, 0xda, 0xfa, 0x6b, 0xf6, 0xf6, 0x04, 0xe4,
0x2c, 0xd1, 0x8d, 0x4f, 0x08, 0xac, 0x1a, 0x7b, 0x1a, 0x6e, 0x9a, 0x8a, 0xb8, 0xaf, 0xe7, 0xd9,
0xcb, 0x99, 0x58, 0xb6, 0xdd, 0x0f, 0x88, 0x05, 0x01, 0x13, 0x77, 0xa6, 0x1d, 0xfb, 0x27, 0x02,
0xab, 0x4d, 0xcf, 0x33, 0x00, 0x26, 0x89, 0xd1, 0xf4, 0xbc, 0xf1, 0x80, 0xde, 0xd7, 0x40, 0x37,
0xe9, 0x14, 0x40, 0xdb, 0xd9, 0x28, 0xf1, 0x84, 0xc0, 0xba, 0xc3, 0x23, 0x9f, 0xb9, 0xdc, 0x00,
0xb7, 0xaa, 0x29, 0x52, 0x99, 0x42, 0x80, 0xf6, 0x2c, 0x00, 0x7f, 0x26, 0xf0, 0xca, 0x4d, 0x1e,
0x4f, 0x80, 0xb9, 0x7c, 0xb8, 0xa2, 0x19, 0x12, 0x09, 0xbd, 0xf3, 0x5f, 0x70, 0xef, 0x6a, 0xb8,
0x1b, 0xaf, 0x5d, 0x9f, 0x1c, 0xae, 0x71, 0xfc, 0x90, 0x3f, 0xea, 0xee, 0xcd, 0xeb, 0xbf, 0xdb,
0x6f, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xeb, 0xe1, 0x8a, 0xe9, 0xb9, 0x0f, 0x00, 0x00,
0xe1, 0xc0, 0x8d, 0x0b, 0x7f, 0x04, 0x42, 0xea, 0x19, 0x09, 0x3e, 0x00, 0x67, 0x4e, 0xdc, 0xfb,
0x15, 0xe0, 0xc0, 0xb7, 0x40, 0x3b, 0xbb, 0xeb, 0xc4, 0xf6, 0x8e, 0xf1, 0xda, 0xa6, 0xb7, 0x9d,
0x99, 0x37, 0x6f, 0x7e, 0xef, 0xcf, 0xcc, 0x7b, 0x0b, 0x2b, 0x47, 0x61, 0xfb, 0x61, 0xcb, 0x0f,
0x8f, 0x3e, 0x54, 0xfc, 0x20, 0xf2, 0x99, 0xe2, 0xf5, 0xa8, 0x1d, 0xaa, 0x10, 0xe7, 0x58, 0x24,
0xec, 0xb5, 0xfd, 0x30, 0xdc, 0xf7, 0x79, 0x83, 0x45, 0xa2, 0xc1, 0x82, 0x20, 0x54, 0x4c, 0x89,
0x30, 0x90, 0x89, 0x88, 0x7d, 0xce, 0x67, 0x7b, 0xdc, 0x4f, 0x06, 0xf4, 0x0b, 0x02, 0xeb, 0x3b,
0x6d, 0xce, 0x14, 0xff, 0x20, 0xd5, 0xf8, 0x7e, 0xaa, 0xd0, 0xe1, 0x9f, 0x74, 0xb8, 0x54, 0xb8,
0x06, 0x95, 0x80, 0x1d, 0x70, 0x19, 0x31, 0x97, 0x5b, 0xa4, 0x4a, 0x6a, 0x15, 0xe7, 0x64, 0x02,
0x9b, 0xb0, 0x78, 0x34, 0xb0, 0xd1, 0x2a, 0x55, 0x49, 0xed, 0xdc, 0xd6, 0x52, 0x9d, 0x45, 0xa2,
0x3e, 0xa4, 0x75, 0x48, 0x9c, 0x7e, 0x4d, 0x60, 0xe3, 0x5e, 0xe4, 0xe5, 0x20, 0xdc, 0xe7, 0x6d,
0x29, 0xc2, 0xe0, 0x99, 0x91, 0xb4, 0xc0, 0xbe, 0xcd, 0xd5, 0x64, 0x8e, 0x58, 0x84, 0xb9, 0x8e,
0xf0, 0xf4, 0x89, 0x15, 0x27, 0xfe, 0x44, 0x0b, 0xce, 0x1e, 0x26, 0x06, 0x58, 0x73, 0x55, 0x52,
0x2b, 0x3b, 0xd9, 0x90, 0x7e, 0x0e, 0x6b, 0x3b, 0x7e, 0x18, 0xf0, 0x59, 0x9d, 0x84, 0x70, 0x26,
0x5e, 0xd6, 0xc7, 0x54, 0x1c, 0xfd, 0x7d, 0xfa, 0xf4, 0x33, 0xfd, 0xa7, 0xdf, 0x83, 0x4b, 0xbb,
0x42, 0x2a, 0x83, 0xb3, 0xe5, 0x84, 0x10, 0xf4, 0x31, 0x81, 0x8d, 0xd1, 0x7a, 0x65, 0x14, 0x06,
0x92, 0xe3, 0x8b, 0x50, 0x76, 0xc3, 0x4e, 0xa0, 0xb4, 0xd2, 0xb2, 0x93, 0x0c, 0x70, 0x07, 0xce,
0x0f, 0xc6, 0x43, 0x5a, 0xa5, 0xea, 0x9c, 0x39, 0x7e, 0xc3, 0xf2, 0xf4, 0x1a, 0xac, 0xe5, 0x21,
0x8c, 0x67, 0x13, 0xfd, 0x0c, 0xd6, 0x0d, 0xbb, 0xff, 0x7f, 0xf2, 0xf7, 0xe0, 0x42, 0xb3, 0xed,
0x7e, 0x2c, 0x0e, 0x67, 0x95, 0x14, 0xd4, 0x83, 0x8b, 0x46, 0x8d, 0xa9, 0x3d, 0x79, 0x57, 0x86,
0x14, 0xbb, 0x32, 0xbf, 0x11, 0xa8, 0x66, 0x62, 0xb7, 0x3e, 0xe5, 0x6e, 0x27, 0x7e, 0x69, 0xee,
0xc6, 0x0f, 0x8e, 0x54, 0xc2, 0x75, 0x78, 0x14, 0xb6, 0x55, 0xec, 0x37, 0x15, 0x2a, 0xe6, 0x67,
0x7e, 0xd3, 0x03, 0xa4, 0xf0, 0x9c, 0xcf, 0xa4, 0x4a, 0x76, 0xf1, 0x8c, 0xbd, 0x6f, 0x2e, 0xce,
0xe2, 0x76, 0x27, 0x08, 0x44, 0xb0, 0x9f, 0xdd, 0xa1, 0x74, 0x18, 0xbb, 0xc3, 0x0d, 0x0f, 0x22,
0x9f, 0xc7, 0x5b, 0x93, 0x0c, 0x3f, 0x99, 0xc0, 0x65, 0x98, 0x6f, 0x31, 0xe1, 0x73, 0xcf, 0x2a,
0xeb, 0xa5, 0x74, 0x44, 0xff, 0x2c, 0xc1, 0xe2, 0xa0, 0x55, 0x5a, 0x95, 0x7e, 0x02, 0xbd, 0xa6,
0xca, 0x3c, 0xdb, 0x9b, 0x98, 0xf6, 0xba, 0xa1, 0x0d, 0x0b, 0xe9, 0xa7, 0x4c, 0x61, 0x7a, 0xe3,
0x78, 0xed, 0x80, 0x05, 0xa2, 0xc5, 0xa5, 0xb2, 0xe6, 0xb5, 0xb6, 0xde, 0x38, 0x5e, 0x13, 0x72,
0x37, 0x4e, 0x0e, 0x65, 0x9d, 0xad, 0x92, 0xda, 0x82, 0xd3, 0x1b, 0xe3, 0x05, 0x00, 0x21, 0xd3,
0xe8, 0x7a, 0xd6, 0x82, 0x5e, 0x3d, 0x35, 0x83, 0x9b, 0x30, 0xaf, 0x1f, 0x79, 0x69, 0x55, 0x74,
0x1e, 0x3e, 0xaf, 0xc3, 0x79, 0x87, 0x3f, 0xba, 0xcf, 0xfc, 0x0e, 0x77, 0xd2, 0x45, 0xbc, 0x0a,
0x65, 0xa9, 0x98, 0x92, 0x16, 0xe8, 0xa0, 0x6f, 0xf6, 0x05, 0xdd, 0x14, 0x4d, 0x27, 0xd9, 0x43,
0x7f, 0x25, 0x50, 0xcd, 0x79, 0x2d, 0x77, 0xb5, 0xea, 0xf1, 0x92, 0x36, 0x73, 0x64, 0x29, 0xdf,
0x91, 0xfd, 0xaf, 0xe6, 0x09, 0xed, 0x42, 0x71, 0xda, 0xad, 0x9f, 0xce, 0xc3, 0xca, 0x20, 0xea,
0x5d, 0xde, 0x3e, 0x14, 0x2e, 0xc7, 0x9f, 0x09, 0x2c, 0xe7, 0xd7, 0x40, 0xa4, 0xfa, 0x90, 0x91,
0x05, 0xd2, 0xce, 0xbf, 0x2b, 0xf4, 0xad, 0x2f, 0x9f, 0xfe, 0xf5, 0x6d, 0xe9, 0x3a, 0x7d, 0x35,
0x2e, 0xc3, 0xb2, 0x71, 0x78, 0x65, 0x8f, 0x2b, 0x76, 0xa5, 0x71, 0xdc, 0x33, 0xbf, 0xdb, 0x18,
0x2a, 0xe2, 0x72, 0x7b, 0xe8, 0x86, 0xe1, 0xdf, 0x04, 0xd6, 0x47, 0x96, 0x47, 0xbc, 0xac, 0x01,
0xc6, 0x29, 0xa1, 0x26, 0xd6, 0xc7, 0x44, 0xc3, 0x1e, 0xdb, 0xfb, 0x45, 0x60, 0x1b, 0xc7, 0x83,
0xb0, 0xf5, 0x8e, 0xf0, 0xba, 0x8d, 0x2c, 0xbd, 0x73, 0xd6, 0xd3, 0xa5, 0x6e, 0x8e, 0x9d, 0x7f,
0x18, 0x3b, 0x91, 0xcc, 0xce, 0x29, 0x82, 0xd1, 0xd2, 0xf6, 0x7d, 0x44, 0x77, 0x67, 0x69, 0x5f,
0x8e, 0x11, 0x4f, 0x09, 0xbc, 0x90, 0x73, 0x29, 0xf0, 0xa2, 0xc6, 0x32, 0x37, 0x17, 0x26, 0xee,
0xaf, 0x92, 0xc0, 0x74, 0x71, 0xab, 0x18, 0x78, 0xcc, 0xf9, 0xe0, 0x36, 0xde, 0x2a, 0xbe, 0xeb,
0x54, 0xf4, 0xb2, 0x60, 0xe1, 0xef, 0x24, 0xbf, 0xae, 0x66, 0xa5, 0x1d, 0x6b, 0x9a, 0x7e, 0x8c,
0xae, 0xc2, 0xbe, 0x3c, 0x86, 0x64, 0x52, 0x9d, 0xe8, 0x8e, 0x36, 0xfd, 0x0d, 0xbc, 0x3a, 0x85,
0x11, 0xf8, 0x1d, 0x81, 0xa5, 0xdc, 0xa2, 0x8e, 0x2f, 0x1b, 0x49, 0x7a, 0xb0, 0x74, 0x94, 0x48,
0x4a, 0xf9, 0xba, 0xa6, 0xac, 0x63, 0xa1, 0x6b, 0x8e, 0xff, 0x10, 0x58, 0xca, 0x6d, 0x01, 0x53,
0xac, 0x51, 0xed, 0xa1, 0x29, 0x57, 0xbe, 0x4f, 0x72, 0xe5, 0x1b, 0x82, 0x6f, 0x4e, 0xe0, 0x31,
0x37, 0x3e, 0x31, 0x11, 0xed, 0x3e, 0xb8, 0x83, 0xef, 0x4c, 0xa9, 0xe2, 0x54, 0xf6, 0xfc, 0x42,
0x60, 0xc5, 0xd0, 0x89, 0xe0, 0x25, 0x6d, 0xca, 0xe8, 0xce, 0xc7, 0xde, 0x18, 0x2d, 0x94, 0x06,
0xe2, 0x86, 0xb6, 0xfe, 0x9a, 0xbd, 0x3d, 0x01, 0x39, 0x4b, 0x74, 0xe3, 0x13, 0x02, 0xab, 0xc6,
0x9a, 0x86, 0x9b, 0xa6, 0x4b, 0xdc, 0x57, 0xf3, 0xec, 0xe5, 0x4c, 0x2c, 0x9b, 0xee, 0x07, 0xc4,
0x82, 0x80, 0x89, 0x3b, 0xd3, 0x8a, 0xfd, 0x03, 0x81, 0xd5, 0xa6, 0xe7, 0x19, 0x00, 0x93, 0xc4,
0x68, 0x7a, 0xde, 0x78, 0x40, 0xef, 0x6a, 0xa0, 0x9b, 0x74, 0x0a, 0xa0, 0xed, 0xac, 0x95, 0x78,
0x42, 0x60, 0xdd, 0xe1, 0x91, 0xcf, 0x5c, 0x6e, 0x80, 0x5b, 0xd5, 0x14, 0xa9, 0x4c, 0x21, 0x40,
0x7b, 0x16, 0x80, 0x3f, 0x12, 0x78, 0xe9, 0x26, 0x8f, 0xbb, 0xc3, 0x5c, 0x3e, 0x5c, 0xd1, 0x0c,
0x89, 0x84, 0x9e, 0xf9, 0x2f, 0xb8, 0xb7, 0x35, 0xdc, 0x8d, 0x57, 0xae, 0x4f, 0x0e, 0xd7, 0x38,
0x7e, 0xc8, 0x1f, 0x75, 0xf7, 0xe6, 0xf5, 0xaf, 0xf8, 0x6b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff,
0xdf, 0xf3, 0x87, 0x10, 0xd5, 0x0f, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@@ -154,12 +154,13 @@ message WorkflowTemplate {
string uid = 2;
string name = 3;
int32 version = 4;
string manifest = 5;
bool isLatest = 6;
bool isArchived = 7;
repeated KeyValue labels = 8;
int32 versions = 5;
string manifest = 6;
bool isLatest = 7;
bool isArchived = 8;
repeated KeyValue labels = 9;
WorkflowExecutionStatisticReport stats = 9;
WorkflowExecutionStatisticReport stats = 10;
}
message GetWorkflowTemplateLabelsRequest {

View File

@@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE workflow_templates ADD COLUMN versions INTEGER;
UPDATE workflow_templates SET versions = 1;
ALTER TABLE workflow_templates ALTER COLUMN versions SET NOT NULL;
-- +goose Down
ALTER TABLE workflow_templates DROP COLUMN versions;

View File

@@ -62,6 +62,7 @@ type WorkflowTemplate struct {
Name string
Manifest string
Version int32
Versions int32 `db:"versions"`
IsLatest bool
IsArchived bool `db:"is_archived"`
ArgoWorkflowTemplate *wfv1.WorkflowTemplate
@@ -70,11 +71,12 @@ type WorkflowTemplate struct {
}
type WorkflowExecutionStatisticReport struct {
Total int32
LastExecuted time.Time
Running int32
Completed int32
Failed int32
WorkflowTemplateId uint64 `db:"workflow_template_id"`
Total int32
LastExecuted time.Time `db:"last_executed"`
Running int32
Completed int32
Failed int32
}
type WorkflowExecutionStatistic struct {

View File

@@ -1145,43 +1145,66 @@ func (c *Client) SetWorkflowTemplateLabels(namespace, name, prefix string, keyVa
return filteredMap, nil
}
func (c *Client) GetWorkflowExecutionStatisticsForTemplate(workflowTemplate *WorkflowTemplate) (err error) {
func (c *Client) GetWorkflowExecutionStatisticsForTemplates(workflowTemplates ...*WorkflowTemplate) (err error) {
if len(workflowTemplates) == 0 {
return errors.New("GetWorkflowExecutionStatisticsForTemplates requires at least 1 id")
}
tx, err := c.DB.Begin()
if err != nil {
return err
}
whereIn := "workflow_template_id IN (?"
for i := range workflowTemplates {
if i == 0 {
continue
}
whereIn += ",?"
}
whereIn += ")"
ids := make([]interface{}, len(workflowTemplates))
for i, workflowTemplate := range workflowTemplates {
ids[i] = workflowTemplate.ID
}
defer tx.Rollback()
query, args, err := sb.Select("name, created_at, finished_at, failed_at").
From("workflow_executions").Where(sq.Eq{"workflow_template_id": workflowTemplate.ID}).OrderBy("created_at DESC").ToSql()
if err != nil {
return err
}
var workflowExecStats []WorkflowExecutionStatistic
err = c.DB.Select(&workflowExecStats, query, args...)
statsSelect := `
workflow_template_id,
MAX(created_at) last_executed,
COUNT(*) FILTER (WHERE finished_At IS NULL AND failed_at IS NULL) running,
COUNT(*) FILTER (WHERE finished_at IS NOT NULL) completed,
COUNT(*) FILTER (WHERE failed_at IS NOT NULL) failed,
COUNT(*) total`
query, args, err := sb.Select(statsSelect).
From("workflow_executions").
Where(whereIn, ids...).
GroupBy("workflow_template_id").
ToSql()
if err != nil {
return err
}
workflowTemplate.WorkflowExecutionStatisticReport = &WorkflowExecutionStatisticReport{}
if len(workflowExecStats) == 0 {
return
result := make([]*WorkflowExecutionStatisticReport, 0)
err = c.DB.Select(&result, query, args...)
if err != nil {
return err
}
//Calculate and set the values
workflowTemplate.WorkflowExecutionStatisticReport.Total = int32(len(workflowExecStats))
createdAtTime := workflowExecStats[0].CreatedAt
workflowTemplate.WorkflowExecutionStatisticReport.LastExecuted = *createdAtTime
for _, workflowExecStat := range workflowExecStats {
if workflowExecStat.FailedAt != nil {
workflowTemplate.WorkflowExecutionStatisticReport.Failed++
} else if workflowExecStat.FinishedAt == nil {
workflowTemplate.WorkflowExecutionStatisticReport.Running++
} else if workflowExecStat.FinishedAt != nil {
workflowTemplate.WorkflowExecutionStatisticReport.Completed++
}
resultMapping := make(map[uint64]*WorkflowExecutionStatisticReport)
for i := range result {
report := result[i]
resultMapping[report.WorkflowTemplateId] = report
}
for _, workflowTemplate := range workflowTemplates {
workflowTemplate.WorkflowExecutionStatisticReport = resultMapping[workflowTemplate.ID]
}
return
}

View File

@@ -77,7 +77,7 @@ func (c *Client) createWorkflowTemplate(namespace string, workflowTemplate *Work
}
func (c *Client) workflowTemplatesSelectBuilder(namespace string) sq.SelectBuilder {
sb := sb.Select("wt.id", "wt.created_at", "wt.uid", "wt.name", "wt.is_archived").
sb := sb.Select("wt.id", "wt.created_at", "wt.uid", "wt.name", "wt.is_archived", "wt.versions").
From("workflow_templates wt").
Where(sq.Eq{
"wt.namespace": namespace,
@@ -183,6 +183,8 @@ func (c *Client) listWorkflowTemplateVersions(namespace, uid string) (workflowTe
return nil, err
}
labels := label.FilterByPrefix(label.TagPrefix, argoTemplate.Labels)
newItem := WorkflowTemplate{
ID: template.ID,
CreatedAt: argoTemplate.CreationTimestamp.Time,
@@ -192,6 +194,7 @@ func (c *Client) listWorkflowTemplateVersions(namespace, uid string) (workflowTe
Version: int32(version),
IsLatest: isLatest,
IsArchived: template.IsArchived,
Labels: labels,
}
workflowTemplateVersions = append(workflowTemplateVersions, &newItem)
@@ -238,6 +241,26 @@ func (c *Client) archiveWorkflowTemplate(namespace, uid string) (bool, error) {
return true, nil
}
func (c *Client) updateWorkflowTemplateVersions(namespace, uid string) (bool, error) {
query, args, err := sb.Update("workflow_templates").
Set("versions", sq.Expr("versions + 1")).
Where(sq.Eq{
"uid": uid,
"namespace": namespace,
}).
ToSql()
if err != nil {
return false, err
}
if _, err := c.DB.Exec(query, args...); err != nil {
return false, err
}
return true, nil
}
func (c *Client) CreateWorkflowTemplate(namespace string, workflowTemplate *WorkflowTemplate) (*WorkflowTemplate, error) {
// validate workflow template
finalBytes, err := workflowTemplate.WrapSpec()
@@ -327,6 +350,11 @@ func (c *Client) CreateWorkflowTemplateVersion(namespace string, workflowTemplat
return nil, err
}
_, err = c.updateWorkflowTemplateVersions(namespace, workflowTemplate.UID)
if err != nil {
return nil, err
}
return workflowTemplate, nil
}
@@ -389,15 +417,25 @@ func (c *Client) ListWorkflowTemplates(namespace string) (workflowTemplateVersio
return nil, util.NewUserError(codes.NotFound, "Workflow templates not found.")
}
err = c.GetWorkflowExecutionStatisticsForTemplates(workflowTemplateVersions...)
if err != nil {
log.WithFields(log.Fields{
"Namespace": namespace,
"Error": err.Error(),
}).Error("Unable to get Workflow Execution Statistic for Templates.")
return nil, util.NewUserError(codes.NotFound, "Unable to get Workflow Execution Statistic for Templates.")
}
for _, workflowTemplate := range workflowTemplateVersions {
err = c.GetWorkflowExecutionStatisticsForTemplate(workflowTemplate)
labels, err := c.GetWorkflowTemplateLabels(namespace, workflowTemplate.UID, label.TagPrefix, workflowTemplate.Version)
if err != nil {
log.WithFields(log.Fields{
"Namespace": namespace,
"Error": err.Error(),
}).Error("Unable to get Workflow Execution Statistic for Template.")
return nil, util.NewUserError(codes.NotFound, "Unable to get Workflow Execution Statistic for Template.")
}).Error("Unable to get GetWorkflowTemplateLabels for Templates.")
continue
}
workflowTemplate.Labels = labels
}
return

View File

@@ -16,3 +16,16 @@ func APIKeyValueToLabel(apiKeyValues []*api.KeyValue) map[string]string {
return result
}
func MappingToKeyValue(mapping map[string]string) []*api.KeyValue {
keyValues := make([]*api.KeyValue, 0)
for key, value := range mapping {
keyValues = append(keyValues, &api.KeyValue{
Key: key,
Value: value,
})
}
return keyValues
}

View File

@@ -29,9 +29,11 @@ func apiWorkflowTemplate(wft *v1.WorkflowTemplate) *api.WorkflowTemplate {
CreatedAt: wft.CreatedAt.UTC().Format(time.RFC3339),
Name: wft.Name,
Version: wft.Version,
Versions: wft.Versions,
Manifest: manifest,
IsLatest: wft.IsLatest,
IsArchived: wft.IsArchived,
Labels: converter.MappingToKeyValue(wft.Labels),
}
if wft.WorkflowExecutionStatisticReport != nil {