@@ -2,35 +2,22 @@ package logparser
2
2
3
3
import (
4
4
"fmt"
5
- "log"
6
5
"regexp"
7
6
"strconv"
8
7
"time"
9
8
10
9
"github.com/gomodule/redigo/redis"
11
10
)
12
11
13
- // Sshd is a struct that corresponds to a line
14
- type Sshd struct {
15
- Date string
16
- Host string
17
- User string
18
- Src string
19
- }
20
-
21
12
// SshdParser Holds a struct that corresponds to a sshd log line
22
13
// and the redis connection
23
14
type SshdParser struct {
24
- logs Sshd
25
- r * redis.Conn
15
+ r * redis.Conn
26
16
}
27
17
28
- // New Creates a new sshd parser
29
- func New (rconn * redis.Conn ) * SshdParser {
30
- return & SshdParser {
31
- logs : Sshd {},
32
- r : rconn ,
33
- }
18
+ // Set set the redic connection to this parser
19
+ func (s * SshdParser ) Set (rconn * redis.Conn ) {
20
+ s .r = rconn
34
21
}
35
22
36
23
// Parse parses a line of sshd log
@@ -54,43 +41,37 @@ func (s *SshdParser) Parse(logline string) error {
54
41
parsedTime , _ := time .ParseInLocation ("Jan 02 15:04:05 2006" , md ["date" ], loc )
55
42
md ["date" ] = string (strconv .FormatInt (parsedTime .Unix (), 10 ))
56
43
57
- // Pushing logline in redis
58
- redislog := fmt .Sprintf ("HMSET %v:%v username \" %v\" src \" %v\" " , md ["date" ], md ["host" ], md ["username" ], md ["src" ])
59
- a , err := r .Do (redislog )
60
- fmt .Println (a )
44
+ // Pushing loglines in database 0
45
+ if _ , err := r .Do ("SELECT" , 0 ); err != nil {
46
+ r .Close ()
47
+ return err
48
+ }
49
+ _ , err := redis .Bool (r .Do ("HSET" , fmt .Sprintf ("%v:%v" , md ["date" ], md ["host" ]), "username" , md ["username" ], "src" , md ["src" ]))
61
50
if err != nil {
62
- log .Fatal ("Could connect to the Redis database" )
51
+ r .Close ()
52
+ return err
53
+ }
54
+
55
+ // Pushing statistics in database 1
56
+ if _ , err := r .Do ("SELECT" , 1 ); err != nil {
57
+ r .Close ()
58
+ return err
63
59
}
64
- today := time .Now ()
65
- // Statistics
66
- dailysrc := fmt .Sprintf ("ZINCBY %v%v%v:statssrc 1 %v" , today .Year (), int (today .Month ()), today .Day (), md ["src" ])
67
- _ , err = r .Do (dailysrc )
60
+ _ , err = redis .String (r .Do ("ZINCRBY" , fmt .Sprintf ("%v%v%v:statssrc" , parsedTime .Year (), int (parsedTime .Month ()), parsedTime .Day ()), 1 , md ["src" ]))
68
61
if err != nil {
69
- log .Fatal ("Could connect to the Redis database" )
62
+ r .Close ()
63
+ return err
70
64
}
71
- dailyusername := fmt .Sprintf ("ZINCBY %v%v%v:statsusername 1 %v" , today .Year (), int (today .Month ()), today .Day (), md ["username" ])
72
- fmt .Println (dailyusername )
73
- _ , err = r .Do (dailyusername )
65
+ _ , err = redis .String (r .Do ("ZINCRBY" , fmt .Sprintf ("%v%v%v:statsusername" , parsedTime .Year (), int (parsedTime .Month ()), parsedTime .Day ()), 1 , md ["username" ]))
74
66
if err != nil {
75
- log .Fatal ("Could connect to the Redis database" )
67
+ r .Close ()
68
+ return err
76
69
}
77
- dailyhost := fmt .Sprintf ("ZINCBY %v%v%v:statshost 1 %v" , today .Year (), int (today .Month ()), today .Day (), md ["host" ])
78
- _ , err = r .Do (dailyhost )
70
+ _ , err = redis .String (r .Do ("ZINCRBY" , fmt .Sprintf ("%v%v%v:statshost" , parsedTime .Year (), int (parsedTime .Month ()), parsedTime .Day ()), 1 , md ["host" ]))
79
71
if err != nil {
80
- log .Fatal ("Could connect to the Redis database" )
72
+ r .Close ()
73
+ return err
81
74
}
82
75
83
76
return nil
84
77
}
85
-
86
- // Push pushed the parsed line into redis
87
- func (s * SshdParser ) Push () error {
88
- //TODO
89
- return nil
90
- }
91
-
92
- // Pop returns the list of attributes
93
- func (s * SshdParser ) Pop () map [string ]string {
94
- //TODO
95
- return nil
96
- }
0 commit comments