-
Notifications
You must be signed in to change notification settings - Fork 21
/
taskUniqueIdentifier.go
100 lines (72 loc) · 2.32 KB
/
taskUniqueIdentifier.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package core
import (
"fmt"
"strings"
)
type Task_Unique_Identifier struct {
TaskName string `bson:"task_name" json:"task_name" mapstructure:"task_name"` // example: #main/filter
Parent string `bson:"parent" json:"parent" mapstructure:"parent"`
JobId string `bson:"jobid" json:"jobid" mapstructure:"jobid"`
}
func New_Task_Unique_Identifier(jobid string, parent string, taskname string) (t Task_Unique_Identifier, err error) {
if taskname == "" {
err = fmt.Errorf("(New_Task_Unique_Identifier) taskname empty")
}
fixed_taskname := strings.TrimSuffix(taskname, "/")
t = Task_Unique_Identifier{JobId: jobid, Parent: parent, TaskName: fixed_taskname}
return
}
func New_Task_Unique_Identifier_FromString(old_style_id string) (t Task_Unique_Identifier, err error) {
array := strings.SplitN(old_style_id, "_", 2) // splits only first underscore
if len(array) != 2 {
err = fmt.Errorf("(New_Task_Unique_Identifier_FromString) Cannot parse task identifier: %s", old_style_id)
return
}
job_id := array[0]
if !IsValidUUID(job_id) {
err = fmt.Errorf("Cannot parse workunit identifier, job id is not valid uuid: %s", old_style_id)
return
}
task_string := array[1]
workflow := ""
name := ""
if strings.HasPrefix(task_string, "#") {
// CWL job
cwl_array := strings.Split(task_string, "#")
s := len(cwl_array) // s has length 2 at least
// clean-up
for i := 0; i < len(cwl_array)-1; i++ {
cwl_array[i] = strings.TrimSuffix(cwl_array[i], "/")
}
workflow = strings.Join(cwl_array[0:s-2], "#")
name = "#" + strings.TrimSuffix(cwl_array[s-1], "/") // last element
} else {
// old-style AWE
name = task_string
}
t, err = New_Task_Unique_Identifier(job_id, workflow, name)
if err != nil {
return
}
//fmt.Printf("(New_Task_Unique_Identifier_FromString) new id: (%s) %s %s %s\n", old_style_id, job_id, workflow, name)
return
}
func (taskid Task_Unique_Identifier) String() (s string, err error) {
jobId := taskid.JobId
parent := taskid.Parent
name := taskid.TaskName
if name == "" {
err = fmt.Errorf("(Task_Unique_Identifier/String) TaskName is empty!")
return
}
if jobId == "" {
err = fmt.Errorf("(Task_Unique_Identifier/String) JobId is empty!")
return
}
if parent != "" {
s = fmt.Sprintf("%s_%s/%s", jobId, parent, name)
} else {
s = fmt.Sprintf("%s_%s", jobId, name)
}
return
}