Skip to content

Commit 5d08a5f

Browse files
Merge branch 'feature/preps-for-rc9' into 'master'
Preps for RC9 See merge request lightmeter/controlcenter!989
2 parents 04c7085 + f1fd976 commit 5d08a5f

File tree

4 files changed

+91
-15
lines changed

4 files changed

+91
-15
lines changed

VERSION.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.0.0-RC8
1+
2.0.0-RC9

logeater/dirwatcher/dir_importer.go

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ import (
99
"container/heap"
1010
"errors"
1111
"fmt"
12+
"io"
13+
"path"
14+
"regexp"
15+
"sort"
16+
"strconv"
17+
"time"
18+
1219
"github.com/rs/zerolog/log"
1320
"gitlab.com/lightmeter/controlcenter/logeater/announcer"
1421
"gitlab.com/lightmeter/controlcenter/pkg/closers"
@@ -17,12 +24,6 @@ import (
1724
parsertimeutil "gitlab.com/lightmeter/controlcenter/pkg/postfix/logparser/timeutil"
1825
"gitlab.com/lightmeter/controlcenter/util/errorutil"
1926
"gitlab.com/lightmeter/controlcenter/util/timeutil"
20-
"io"
21-
"path"
22-
"regexp"
23-
"sort"
24-
"strconv"
25-
"time"
2627
)
2728

2829
type fileEntry struct {
@@ -35,11 +36,10 @@ type fileEntryList []fileEntry
3536
type fileQueues map[string]fileEntryList
3637

3738
func sortedEntriesFilteredByPatternAndMoreRecentThanTime(list fileEntryList, r filenameRecognizer, initialTime time.Time) fileEntryList {
38-
entries := make(fileEntryList, 0, len(list))
39-
4039
type rec struct {
41-
entry fileEntry
42-
index int
40+
entry fileEntry
41+
index int
42+
compressed bool
4343
}
4444

4545
recs := []rec{}
@@ -70,7 +70,17 @@ func sortedEntriesFilteredByPatternAndMoreRecentThanTime(list fileEntryList, r f
7070
return index
7171
}()
7272

73-
recs = append(recs, rec{entry: entry, index: index})
73+
recs = append(recs, rec{entry: entry, index: index, compressed: len(matches[5]) != 0})
74+
}
75+
76+
// no need to do the sorting with no entries at all.
77+
if len(recs) == 0 {
78+
return fileEntryList{}
79+
}
80+
81+
// No need to do the sorting for a single entry.
82+
if len(recs) == 1 {
83+
return fileEntryList{recs[0].entry}
7484
}
7585

7686
sort.Slice(recs, func(i, j int) bool {
@@ -83,11 +93,27 @@ func sortedEntriesFilteredByPatternAndMoreRecentThanTime(list fileEntryList, r f
8393
return false
8494
}
8595

96+
// same filename, but one of them is compressed.
97+
// the compressed goes first
98+
if recs[i].index == recs[j].index {
99+
return recs[i].compressed
100+
}
101+
86102
return recs[i].index*int(r.order) < recs[j].index*int(r.order)
87103
})
88104

89-
for _, r := range recs {
90-
entries = append(entries, r.entry)
105+
entries := make(fileEntryList, 0, len(list))
106+
107+
// NOTE: here we know we have at least one entry
108+
entries = append(entries, recs[0].entry)
109+
110+
for i, lastAddedRec := 1, recs[0]; i < len(recs); i++ {
111+
r := recs[i]
112+
113+
if r.index != lastAddedRec.index {
114+
entries = append(entries, r.entry)
115+
lastAddedRec = r
116+
}
91117
}
92118

93119
return entries

logeater/dirwatcher/regression_test.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
package dirwatcher
66

77
import (
8+
"testing"
9+
"time"
10+
811
. "github.com/smartystreets/goconvey/convey"
912
"gitlab.com/lightmeter/controlcenter/pkg/postfix"
1013
parsertimeutil "gitlab.com/lightmeter/controlcenter/pkg/postfix/logparser/timeutil"
1114
"gitlab.com/lightmeter/controlcenter/util/testutil"
1215
"gitlab.com/lightmeter/controlcenter/util/timeutil"
13-
"testing"
1416
)
1517

1618
func TestRegressionIssue368(t *testing.T) {
@@ -199,3 +201,34 @@ Mar 8 10:11:12 cloud2 postfix/qmgr[1428]: 5EEC73E8C6: removed`, ``),
199201
})
200202
})
201203
}
204+
205+
func TestDuplicatedFiles(t *testing.T) {
206+
Convey("If the same file seems to be present in both compressed and non compressed form, choose the compressed ont", t, func() {
207+
Convey("Some files are duplicated, due to rsync'ng generated artifacts", func() {
208+
f := fileEntryList{
209+
fileEntry{filename: "mail.log", modificationTime: testutil.MustParseTime(`2023-03-02 19:38:51 +0100`)},
210+
fileEntry{filename: "mail.log-20220722", modificationTime: testutil.MustParseTime(`2022-07-25 15:07:12 +0200`)},
211+
fileEntry{filename: "mail.log-20220722.bz2", modificationTime: testutil.MustParseTime(`2022-07-25 15:07:12 +0200`)},
212+
fileEntry{filename: "mail.log-20220728", modificationTime: testutil.MustParseTime(`2022-07-29 16:14:44 +0200`)},
213+
fileEntry{filename: "mail.log-20220728.bz2", modificationTime: testutil.MustParseTime(`2022-07-29 16:14:44 +0200`)},
214+
fileEntry{filename: "mail.log-20220731", modificationTime: testutil.MustParseTime(`2022-08-02 14:20:14 +0200`)},
215+
fileEntry{filename: "mail.log-20220731.bz2", modificationTime: testutil.MustParseTime(`2022-08-02 14:20:14 +0200`)},
216+
fileEntry{filename: "mail.log-20220804", modificationTime: testutil.MustParseTime(`2022-08-22 11:20:08 +0200`)},
217+
}
218+
219+
// We ignore all files that have a correspondent compressed version of it
220+
So(buildFilesToImport(f, BuildLogPatterns([]string{"mail.log", "mail.err", "mail.warn"}), time.Time{}), ShouldResemble,
221+
fileQueues{
222+
"mail.log": fileEntryList{
223+
fileEntry{filename: "mail.log-20220722.bz2", modificationTime: testutil.MustParseTime(`2022-07-25 15:07:12 +0200`)},
224+
fileEntry{filename: "mail.log-20220728.bz2", modificationTime: testutil.MustParseTime(`2022-07-29 16:14:44 +0200`)},
225+
fileEntry{filename: "mail.log-20220731.bz2", modificationTime: testutil.MustParseTime(`2022-08-02 14:20:14 +0200`)},
226+
fileEntry{filename: "mail.log-20220804", modificationTime: testutil.MustParseTime(`2022-08-22 11:20:08 +0200`)},
227+
fileEntry{filename: "mail.log", modificationTime: testutil.MustParseTime(`2023-03-02 19:38:51 +0100`)},
228+
},
229+
"mail.err": {},
230+
"mail.warn": {},
231+
})
232+
})
233+
})
234+
}

release_notes/2.0.0-RC9

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# ControlCenter 2.0.0-RC9
2+
3+
It turns out I was wrong when said we'd not release another RC. Oops, I just did.
4+
5+
It fixes an issue that makes the log parser get confused when parsing log files
6+
in the presence of compressed log files in the same directory (which is usually done)
7+
by logrotate.
8+
9+
There's no Gitlab issue in this repo, but this is the relevant MR:
10+
11+
- https://gitlab.com/lightmeter/controlcenter/-/merge_requests/988
12+
13+
To reiterate, ControlCenter is not actively developed anymore, as our focus as
14+
organization shifted from the Postfix monitoring space.
15+
16+
Being realist, there might eventually be some maintenance releases like the current one,
17+
but please do not expect new features.

0 commit comments

Comments
 (0)