aboutsummaryrefslogtreecommitdiff
path: root/job
diff options
context:
space:
mode:
Diffstat (limited to 'job')
-rw-r--r--job/utils.go31
-rw-r--r--job/utils_test.go8
2 files changed, 26 insertions, 13 deletions
diff --git a/job/utils.go b/job/utils.go
index 33c25cd..a6a2f43 100644
--- a/job/utils.go
+++ b/job/utils.go
@@ -1,25 +1,32 @@
package job
// KeepOldestOnly filters a job list and keeps only the most recent entry for a job name
-func KeepOldestOnly(jobs []Job) []Job {
- tmpMap := make(map[string]Job)
- for _, elt := range jobs {
- prev, exists := tmpMap[elt.Name]
- if !exists || (exists && prev.Timestamp < elt.Timestamp) {
- tmpMap[elt.Name] = elt
+func KeepOldestOnly(jobs []Job) (results []Job) {
+outerLoop:
+ for i := 0; i < len(jobs); i++ {
+ job := jobs[i]
+ for j := 0; j < len(results); j++ {
+ result := results[j]
+ if result.Name == job.Name {
+ continue outerLoop
+ }
}
+ for j := i + 1; j < len(jobs); j++ {
+ sec := jobs[j]
+ if sec.Name == job.Name && sec.Timestamp > job.Timestamp {
+ job = sec
+ }
+ }
+ results = append(results, job)
}
- values := make([]Job, 0, len(tmpMap))
- for _, value := range tmpMap {
- values = append(values, value)
- }
- return values
+ return
}
// KeepSuccessOnly returns only the successful jobs from a job list (suiatble to write a new spool file)
func KeepSuccessOnly(jobs []Job) (result []Job) {
result = make([]Job, 0)
- for _, job := range jobs {
+ for i := 0; i < len(jobs); i++ {
+ job := jobs[i]
if job.Success {
result = append(result, job)
}
diff --git a/job/utils_test.go b/job/utils_test.go
index a3e4dcd..250ae2c 100644
--- a/job/utils_test.go
+++ b/job/utils_test.go
@@ -9,8 +9,13 @@ func TestKeepOldestOnly(t *testing.T) {
emptyList := []Job{}
oneJob := []Job{{Name: "a", Timestamp: 10, Success: true}}
twoJobs := []Job{
+ {Name: "a", Timestamp: 5, Success: true},
{Name: "a", Timestamp: 10, Success: true},
+ }
+ threeJobs := []Job{
{Name: "a", Timestamp: 5, Success: true},
+ {Name: "a", Timestamp: 10, Success: true},
+ {Name: "a", Timestamp: 8, Success: false},
}
type args struct {
jobs []Job
@@ -20,9 +25,10 @@ func TestKeepOldestOnly(t *testing.T) {
args args
want []Job
}{
- {"empty list", args{emptyList}, emptyList},
+ {"empty list", args{emptyList}, nil},
{"one job", args{oneJob}, oneJob},
{"two jobs", args{twoJobs}, oneJob},
+ {"three jobs", args{threeJobs}, oneJob},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {