Mercurial > gemma
annotate pkg/imports/report.go @ 5560:f2204f91d286
Join the log lines of imports to the log exports to recover data from them.
Used in SR export to extract information that where in the meta json
but now are only found in the log.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 09 Feb 2022 18:34:40 +0100 |
parents | 5f47eeea988d |
children | ceecc205011c |
rev | line source |
---|---|
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 // without warranty, see README.md and license for details. |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 // |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 // |
5387
8e30b926b94d
Added an import to run update stats scripts.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5377
diff
changeset
|
7 // Copyright (C) 2021 by via donau |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 // Software engineering by Intevation GmbH |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 // |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 // Author(s): |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 package imports |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 import ( |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
17 "bytes" |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 "context" |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 "database/sql" |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 "errors" |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
21 "fmt" |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
22 "os" |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
23 "path/filepath" |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
24 "strings" |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
25 "text/template" |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
26 "time" |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 |
5376
e09e003948c7
Decouple and enforce roles in creating scheduled imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5375
diff
changeset
|
28 "gemma.intevation.de/gemma/pkg/auth" |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 "gemma.intevation.de/gemma/pkg/common" |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
30 "gemma.intevation.de/gemma/pkg/config" |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5478
diff
changeset
|
31 "gemma.intevation.de/gemma/pkg/log" |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
32 "gemma.intevation.de/gemma/pkg/misc" |
5329
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
33 "gemma.intevation.de/gemma/pkg/models" |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
34 "gemma.intevation.de/gemma/pkg/xlsx" |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
35 |
5478
699048c86848
Updated 3rd-party libs of the gemma server to the latest bug fix release.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5387
diff
changeset
|
36 "github.com/xuri/excelize/v2" |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 ) |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 type Report struct { |
5329
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
40 models.QueueConfigurationType |
5377
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
41 Name models.SafePath `json:"name"` |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 const ReportJobKind JobKind = "report" |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 type reportJobCreator struct{} |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
48 const ( |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
49 selectReportUsersSQL = ` |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
50 SELECT username, email_address |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
51 FROM users.list_users |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
52 WHERE report_reciever |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
53 ORDER BY country, username` |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
54 |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
55 selectCurrentUserSQL = ` |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
56 SELECT current_user, email_address |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
57 FROM users.list_users |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
58 WHERE username = current_user` |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
59 ) |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
60 |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
61 var reportMailTmpl = template.Must(template.New("report-mail"). |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
62 Parse(`Dear {{ .Receiver }} |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
63 |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
64 this is an automatically generated report from the Gemma system. |
5369
4d126cf58fbc
Re-phrased the text of the email send for reports a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5365
diff
changeset
|
65 You got this mail because you are listed as a report receiver. |
4d126cf58fbc
Re-phrased the text of the email send for reports a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5365
diff
changeset
|
66 If you received it without consent please |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
67 contact {{ .Admin }} under {{ .AdminEmail }}. |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
68 |
5369
4d126cf58fbc
Re-phrased the text of the email send for reports a bit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5365
diff
changeset
|
69 Find attached {{ .Attachment }} containing the {{ .Report }} report from {{ .When }}. |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
70 |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
71 Kind Regards`)) |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
72 |
5328
bc8c082487b2
Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5326
diff
changeset
|
73 func init() { RegisterJobCreator(ReportJobKind, reportJobCreator{}) } |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 func (reportJobCreator) Description() string { return "report" } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 func (reportJobCreator) AutoAccept() bool { return true } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 func (reportJobCreator) Create() Job { return new(Report) } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
81 func (reportJobCreator) Depends() [2][]string { return [2][]string{{}, {}} } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
82 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
83 func (reportJobCreator) StageDone(context.Context, *sql.Tx, int64, Feedback) error { |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
84 return nil |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
85 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
86 |
5376
e09e003948c7
Decouple and enforce roles in creating scheduled imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5375
diff
changeset
|
87 // RequiresRoles enforces to be a sys_admin to run this . |
e09e003948c7
Decouple and enforce roles in creating scheduled imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5375
diff
changeset
|
88 func (*Report) RequiresRoles() auth.Roles { return auth.Roles{"sys_admin"} } |
e09e003948c7
Decouple and enforce roles in creating scheduled imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5375
diff
changeset
|
89 |
5560
f2204f91d286
Join the log lines of imports to the log exports to recover data from them.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5490
diff
changeset
|
90 func (r *Report) Description([]string) (string, error) { return string(r.Name), nil } |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
91 |
5328
bc8c082487b2
Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5326
diff
changeset
|
92 func (*Report) CleanUp() error { return nil } |
bc8c082487b2
Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5326
diff
changeset
|
93 |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
94 func (r *Report) MarshalAttributes(attrs common.Attributes) error { |
5329
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
95 if err := r.QueueConfigurationType.MarshalAttributes(attrs); err != nil { |
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
96 return err |
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
97 } |
5377
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
98 attrs.Set("name", string(r.Name)) |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 return nil |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
100 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
101 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 func (r *Report) UnmarshalAttributes(attrs common.Attributes) error { |
5329
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
103 if err := r.QueueConfigurationType.UnmarshalAttributes(attrs); err != nil { |
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
104 return err |
795a0a0b5047
Embed scheduling type into report import to ensure persistence of schedule data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5328
diff
changeset
|
105 } |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
106 name, found := attrs.Get("name") |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
107 if !found { |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
108 return errors.New("missing 'name' attribute") |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
109 } |
5377
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
110 r.Name = models.SafePath(name) |
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
111 if !r.Name.Valid() { |
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
112 return fmt.Errorf("'%s' is not a safe path", name) |
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
113 } |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
114 return nil |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
115 } |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
116 |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
117 func (r *Report) loadTemplate() (*excelize.File, *xlsx.Action, error) { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
118 path := config.ReportPath() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
119 if path == "" { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
120 return nil, nil, errors.New("no report dir configured") |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
121 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
122 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
123 if stat, err := os.Stat(path); err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
124 if os.IsNotExist(err) { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
125 return nil, nil, fmt.Errorf("report dir '%s' does not exists", path) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
126 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
127 return nil, nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
128 } else if !stat.Mode().IsDir() { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
129 return nil, nil, fmt.Errorf("report dir '%s' is not a directory", path) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
130 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
131 |
5377
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
132 xlsxFilename := filepath.Join(path, string(r.Name)+".xlsx") |
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
133 yamlFilename := filepath.Join(path, string(r.Name)+".yaml") |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
134 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
135 for _, check := range []string{xlsxFilename, yamlFilename} { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
136 if _, err := os.Stat(check); err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
137 if os.IsNotExist(err) { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
138 return nil, nil, fmt.Errorf("'%s' does not exists", check) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
139 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
140 return nil, nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
141 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
142 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
143 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
144 template, err := excelize.OpenFile(xlsxFilename) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
145 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
146 return nil, nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
147 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
148 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
149 action, err := xlsx.ActionFromFile(yamlFilename) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
150 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
151 return nil, nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
152 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
153 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
154 return template, action, nil |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
155 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
156 |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
157 func (r *Report) Do( |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 ctx context.Context, |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
159 importID int64, |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
160 conn *sql.Conn, |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
161 feedback Feedback, |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
162 ) (interface{}, error) { |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
163 |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
164 start := time.Now() |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
165 |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
166 feedback.Info("Generating report %s.", r.Name) |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
167 |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
168 template, action, err := r.loadTemplate() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
169 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
170 return nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
171 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
172 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
173 tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
174 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
175 return nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
176 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
177 defer tx.Rollback() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
178 |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
179 // Fetch receivers |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
180 var users []misc.EmailReceiver |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
181 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
182 if err := func() error { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
183 rows, err := tx.QueryContext(ctx, selectReportUsersSQL) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
184 if err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
185 return err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
186 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
187 defer rows.Close() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
188 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
189 for rows.Next() { |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
190 var u misc.EmailReceiver |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
191 if err := rows.Scan(&u.Name, &u.Address); err != nil { |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
192 return err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
193 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
194 users = append(users, u) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
195 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
196 return rows.Err() |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
197 }(); err != nil { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
198 return nil, err |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
199 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
200 |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
201 if len(users) == 0 { |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
202 feedback.Warn("No users found to send reports to.") |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
203 return nil, nil |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
204 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
205 |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
206 // Fetch admin who is responsible for the report. |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
207 var admin misc.EmailReceiver |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
208 if err := tx.QueryRowContext( |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
209 ctx, selectCurrentUserSQL).Scan(&admin.Name, &admin.Address); err != nil { |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5478
diff
changeset
|
210 log.Errorf("cannot find sender: %v\n") |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
211 return nil, fmt.Errorf("cannot find sender: %v", err) |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
212 } |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
213 |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
214 // Generate the actual report. |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
215 if err := action.Execute(ctx, tx, template); err != nil { |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5478
diff
changeset
|
216 log.Errorf("%v\n", err) |
5334
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
217 return nil, fmt.Errorf("Generating report failed: %v", err) |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
218 } |
45805c454436
Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5329
diff
changeset
|
219 |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
220 var buf bytes.Buffer |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
221 if _, err := template.WriteTo(&buf); err != nil { |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5478
diff
changeset
|
222 log.Errorf("%v\n", err) |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
223 return nil, fmt.Errorf("generating report failed: %v", err) |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
224 } |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
225 |
5371
0de64b3017ac
Logging cosmetics for the report import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5369
diff
changeset
|
226 feedback.Info("Sending report to %d receiver(s).", len(users)) |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
227 |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
228 now := start.UTC().Format("2006-01-02") |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
229 |
5377
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
230 attached := string(r.Name) + "-" + now + ".xlsx" |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
231 |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
232 body := func(u misc.EmailReceiver) (string, error) { |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
233 fill := struct { |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
234 Receiver string |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
235 Attachment string |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
236 Report string |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
237 When string |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
238 Admin string |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
239 AdminEmail string |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
240 }{ |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
241 Receiver: u.Name, |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
242 Attachment: attached, |
5377
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
243 Report: string(r.Name), |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
244 When: now, |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
245 Admin: admin.Name, |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
246 AdminEmail: admin.Address, |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
247 } |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
248 var sb strings.Builder |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
249 if err := reportMailTmpl.Execute(&sb, &fill); err != nil { |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
250 return "", err |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
251 } |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
252 return sb.String(), nil |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
253 } |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
254 |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
255 errorHandler := func(r misc.EmailReceiver, err error) error { |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
256 // We do not terminate the sending of the emails if |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
257 // sending failed. We only log it. |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
258 feedback.Warn("Sending report to %s failed: %v", r.Name, err) |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
259 return nil |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
260 } |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
261 |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
262 if err := misc.SendMailToAll( |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
263 users, |
5377
d19fdf3d2099
Add a string type that allows only runes that are safe of directory traversal.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5376
diff
changeset
|
264 "Report "+string(r.Name)+" from "+now, |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
265 body, |
5336
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
266 []misc.EmailAttachment{{ |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
267 Name: attached, |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
268 Content: buf.Bytes(), |
2ec8a34ae683
Rephrased the email message of the report and write the reponsible admin and her/his email address into it.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5335
diff
changeset
|
269 }}, |
5335
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
270 errorHandler, |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
271 ); err != nil { |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
272 return nil, err |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
273 } |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
274 |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
275 feedback.Info("Generating and sending report took %v.", |
dcd5692a2889
Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5334
diff
changeset
|
276 time.Since(start)) |
5326
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
277 |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
278 return nil, nil |
96ceb150ea46
Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
279 } |