forked from entrepreneur-interet-general/opensignauxfaibles
/
event.go
93 lines (82 loc) · 2.7 KB
/
event.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package marshal
import (
"encoding/json"
"time"
"github.com/globalsign/mgo/bson"
)
// Priority test
type Priority string
// Code test
type Code string
// Events Event serialisable pour swaggo (TODO: fix this !)
// type Events []struct {
// ID bson.ObjectId `json:"-" bson:"_id"`
// Date time.Time `json:"date" bson:"date"`
// Comment interface{} `json:"event" bson:"event"`
// Priority Priority `json:"priority" bson:"priority"`
// Code Code `json:"code" bson:"code"`
// }
// Event est un objet de journal
// swagger:ignore
type Event struct {
ID bson.ObjectId `json:"-" bson:"_id"`
Date time.Time `json:"date" bson:"date"`
StartDate time.Time `json:"startDate" bson:"startDate"`
Comment interface{} `json:"event" bson:"event"`
Priority Priority `json:"priority" bson:"priority"`
Code Code `json:"parserCode" bson:"parserCode"`
ReportType string `json:"report_type" bson:"record_type"`
Channel chan Event `json:"-"`
}
// GetBSON retourne l'objet Event sous une forme sérialisable
func (event Event) GetBSON() (interface{}, error) {
var tmp struct {
ID bson.ObjectId `json:"id" bson:"_id"`
Date time.Time `json:"date" bson:"date"`
StartDate time.Time `json:"startDate" bson:"startDate"`
Comment interface{} `json:"event" bson:"event"`
Priority Priority `json:"priority" bson:"priority"`
Code Code `json:"parserCode" bson:"parserCode"`
ReportType string `json:"reportType" bson:"reportType"`
}
tmp.ID = event.ID
tmp.Date = event.Date
tmp.StartDate = event.StartDate
tmp.Comment = event.Comment
tmp.Priority = event.Priority
tmp.Code = event.Code
tmp.ReportType = event.ReportType
return tmp, nil
}
// CreateEvent initialise un évènement avec les valeurs par défaut.
func CreateEvent() (event Event) {
return Event{
ID: bson.NewObjectId(),
Date: time.Now(),
Priority: Priority("info"),
}
}
func (event Event) throw(comment interface{}, logLevel string) {
event.ID = bson.NewObjectId()
event.Date = time.Now()
event.Comment = comment
if event.Code == "" {
event.Code = Code("unknown")
}
event.Priority = Priority("info")
event.Channel <- event
}
// Info produit un évènement de niveau Info
func (event Event) Info(comment interface{}) {
event.throw(comment, "info")
}
// ParseReport permet d'accéder aux propriétés d'un rapport de parsing.
func (event Event) ParseReport() (map[string]interface{}, error) {
var jsonDocument map[string]interface{}
temporaryBytes, err := bson.MarshalJSON(event.Comment)
if err != nil {
return nil, err
}
err = json.Unmarshal(temporaryBytes, &jsonDocument)
return jsonDocument, err
}