@@ -14,40 +14,41 @@ import (
1414
1515// Database holds parser structure
1616type Database struct {
17- WaitingList chan query.Query
18- ServerMeta chan server.Server
17+ WaitingList chan query.Query
18+ ServerMeta chan server.Server
19+ stringInBrackets * regexp.Regexp
20+ srv server.Server
1921}
2022
21- func (p * Parser ) parseBlocs (rawBlocs chan []string ) {
23+ // New instance of parser
24+ func New (qc chan query.Query ) * Database {
25+ p := Database {
26+ WaitingList : qc ,
27+ stringInBrackets : regexp .MustCompile (`\[(.*?)\]` ),
28+ }
29+
30+ return & p
31+ }
32+
33+ func (db * Database ) ParseBlocs (rawBlocs chan []string ) {
2234 for {
2335 select {
2436 case bloc := <- rawBlocs :
25- var q Query
37+ var q query. Query
2638
2739 for _ , line := range bloc {
28- if strings . HasPrefix ( line , "#" ) {
29- q .parseMariaDBHeader (line )
40+ if line [ 0 ] == '#' {
41+ db .parseMariaDBHeader (line , & q )
3042 } else {
3143 q .Query = q .Query + line
3244 }
3345 }
34- p . wl <- q
46+ db . WaitingList <- q
3547 }
3648 }
3749}
3850
39- func (p * Parser ) GetNext () Query {
40- var q Query
41- select {
42- case q = <- p .wl :
43- return q
44- case <- time .After (2 * time .Second ):
45- close (p .wl )
46- }
47- return q
48- }
49-
50- func (q * Query ) parseMariaDBHeader (line string ) {
51+ func (db * Database ) parseMariaDBHeader (line string , q * query.Query ) {
5152 var err error
5253 parts := strings .Split (line , " " )
5354
@@ -109,7 +110,7 @@ func (q *Query) parseMariaDBHeader(line string) {
109110 }
110111
111112 } else if strings .Contains (part , "user@host:" ) {
112- items := stringInBrackets .FindAllString (line , - 1 )
113+ items := db . stringInBrackets .FindAllString (line , - 1 )
113114 // We remove first and last bytes of the strings because they are
114115 // square brackets
115116 q .User = items [0 ][1 : len (items [0 ])- 1 ]
@@ -139,7 +140,7 @@ func (q *Query) parseMariaDBHeader(line string) {
139140 }
140141}
141142
142- func (p * Parser ) parseServerMeta (lines chan []string ) {
143+ func (p * Database ) ParseServerMeta (lines chan []string ) {
143144 for {
144145 select {
145146 case header := <- lines :
@@ -151,25 +152,25 @@ func (p *Parser) parseServerMeta(lines chan []string) {
151152 matches := versionre .FindStringSubmatch (versions )
152153
153154 if len (matches ) != 5 {
154- srv .Binary = "unable to parse line"
155- srv .VersionShort = srv .Binary
156- srv .Version = srv .Binary
157- srv .VersionDescription = srv .Binary
158- srv .Port = 0
159- srv .Socket = srv .Binary
155+ p . srv .Binary = "unable to parse line"
156+ p . srv .VersionShort = p . srv .Binary
157+ p . srv .Version = p . srv .Binary
158+ p . srv .VersionDescription = p . srv .Binary
159+ p . srv .Port = 0
160+ p . srv .Socket = p . srv .Binary
160161 }
161162
162- srv .Binary = matches [1 ]
163- srv .VersionShort = matches [2 ]
164- srv .Version = srv .VersionShort + matches [3 ]
165- srv .VersionDescription = matches [4 ]
166- srv .Port , _ = strconv .Atoi (strings .Split (net , " " )[2 ])
167- srv .Socket = strings .TrimLeft (strings .Split (net , ":" )[2 ], " " )
163+ p . srv .Binary = matches [1 ]
164+ p . srv .VersionShort = matches [2 ]
165+ p . srv .Version = p . srv .VersionShort + matches [3 ]
166+ p . srv .VersionDescription = matches [4 ]
167+ p . srv .Port , _ = strconv .Atoi (strings .Split (net , " " )[2 ])
168+ p . srv .Socket = strings .TrimLeft (strings .Split (net , ":" )[2 ], " " )
168169 return
169170 }
170171 }
171172}
172173
173- func (p * Parser ) GetServerMeta () Server {
174- return srv
174+ func (d * Database ) GetServerMeta () server. Server {
175+ return d . srv
175176}
0 commit comments