Skip to content

Commit 31b255f

Browse files
committed
add: [sshd] Years / Months in template
1 parent 0b40c4e commit 31b255f

File tree

2 files changed

+87
-13
lines changed

2 files changed

+87
-13
lines changed

logparser/sshd.go

Lines changed: 86 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,11 @@ func (s *SshdParser) Compile() error {
335335
<span>
336336
<label for="statsday">Statistics for: </label>
337337
<input id="statsday" type="date" value="{{.MaxDate}}" min="{{.MinDate}}" max="{{.MaxDate}}" onchange="currentDay = this.value.replace(/-/g, ''); loadImage(currentDay, currentType)"/>
338+
<select>
339+
{{range .YearList}}
340+
<option value="{{.}}">{{.}}</option>
341+
{{end}}
342+
</select>
338343
</span>
339344
<span>
340345
<label for="statstype">Type: </label>
@@ -364,29 +369,92 @@ func (s *SshdParser) Compile() error {
364369
parsedOldestStr := parsedOldest.Format("2006-01-02")
365370
parsedNewestStr := parsedNewest.Format("2006-01-02")
366371

367-
check := func(err error) {
372+
// Gettings list of years for which we have statistics
373+
reply, err := redis.Values(r.Do("SCAN", "0", "MATCH", "????:*", "COUNT", 1000))
374+
if err != nil {
375+
r.Close()
376+
return err
377+
}
378+
var cursor int64
379+
var items []string
380+
_, err = redis.Scan(reply, &cursor, &items)
381+
if err != nil {
382+
r.Close()
383+
return err
384+
}
385+
386+
var years []string
387+
for _, v := range items {
388+
yearSplit := strings.Split(v, ":")
389+
found := false
390+
for _, y := range years {
391+
if y == yearSplit[0] {
392+
found = true
393+
}
394+
}
395+
if !found {
396+
years = append(years, yearSplit[0])
397+
}
398+
}
399+
400+
// Gettings list of months for which we have statistics
401+
months := make(map[string][]string)
402+
for _, v := range years {
403+
var mraw []string
404+
reply, err = redis.Values(r.Do("SCAN", "0", "MATCH", v+"??:*", "COUNT", 1000))
368405
if err != nil {
369-
log.Fatal(err)
406+
r.Close()
407+
return err
408+
}
409+
410+
_, err = redis.Scan(reply, &cursor, &mraw)
411+
if err != nil {
412+
r.Close()
413+
return err
414+
}
415+
for _, m := range mraw {
416+
m = strings.TrimPrefix(m, v)
417+
monthSplit := strings.Split(m, ":")
418+
found := false
419+
for _, y := range months[v] {
420+
if y == monthSplit[0] {
421+
found = true
422+
}
423+
}
424+
if !found {
425+
months[v] = append(months[v], monthSplit[0])
426+
}
370427
}
371428
}
429+
372430
t, err := template.New("webpage").Parse(tpl)
373-
check(err)
431+
if err != nil {
432+
r.Close()
433+
return err
434+
}
374435

375436
data := struct {
376-
Title string
377-
Current string
378-
MinDate string
379-
MaxDate string
437+
Title string
438+
Current string
439+
MinDate string
440+
MaxDate string
441+
YearList []string
442+
MonthList map[string][]string
380443
}{
381-
Title: "sshd failed logins statistics",
382-
MinDate: parsedOldestStr,
383-
MaxDate: parsedNewestStr,
384-
Current: newest,
444+
Title: "sshd failed logins statistics",
445+
MinDate: parsedOldestStr,
446+
MaxDate: parsedNewestStr,
447+
Current: newest,
448+
YearList: years,
449+
MonthList: months,
385450
}
386451
f, err := os.OpenFile("statistics.html", os.O_RDWR|os.O_CREATE, 0666)
387452
defer f.Close()
388453
err = t.Execute(f, data)
389-
check(err)
454+
if err != nil {
455+
r.Close()
456+
return err
457+
}
390458

391459
return nil
392460
}
@@ -416,7 +484,8 @@ func plotStats(s *SshdParser, v string) error {
416484

417485
p, err := plot.New()
418486
if err != nil {
419-
panic(err)
487+
r.Close()
488+
return err
420489
}
421490

422491
stype := strings.Split(v, ":")
@@ -449,26 +518,30 @@ func plotStats(s *SshdParser, v string) error {
449518
if _, err := os.Stat("data"); os.IsNotExist(err) {
450519
err := os.Mkdir("data", 0700)
451520
if err != nil {
521+
r.Close()
452522
return err
453523
}
454524
}
455525

456526
if _, err := os.Stat(filepath.Join("data", "sshd")); os.IsNotExist(err) {
457527
err := os.Mkdir(filepath.Join("data", "sshd"), 0700)
458528
if err != nil {
529+
r.Close()
459530
return err
460531
}
461532
}
462533

463534
if _, err := os.Stat(filepath.Join("data", "sshd", stype[0])); os.IsNotExist(err) {
464535
err := os.Mkdir(filepath.Join("data", "sshd", stype[0]), 0700)
465536
if err != nil {
537+
r.Close()
466538
return err
467539
}
468540
}
469541

470542
xsize := 3 + vg.Length(math.Round(float64(len(keys)/2)))
471543
if err := p.Save(15*vg.Centimeter, xsize*vg.Centimeter, filepath.Join("data", "sshd", stype[0], fmt.Sprintf("%v.svg", v))); err != nil {
544+
r.Close()
472545
return err
473546
}
474547

main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ func main() {
189189
if err != nil {
190190
log.Fatal(err)
191191
}
192+
compile()
192193
}
193194
// Parsing loop
194195
} else if *fromfile != "" {

0 commit comments

Comments
 (0)