annotate pkg/imports/report.go @ 5376:e09e003948c7 extented-report

Decouple and enforce roles in creating scheduled imports.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 24 Jun 2021 19:24:21 +0200
parents 755ed195fdc3
children d19fdf3d2099
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 //
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2018 by via donau
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 "log"
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
23 "os"
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
24 "path/filepath"
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
25 "regexp"
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
26 "strings"
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
27 "text/template"
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
28 "time"
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
5376
e09e003948c7 Decouple and enforce roles in creating scheduled imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5375
diff changeset
30 "gemma.intevation.de/gemma/pkg/auth"
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 "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
32 "gemma.intevation.de/gemma/pkg/config"
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
33 "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
34 "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
35 "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
36
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
37 "github.com/360EntSecGroup-Skylar/excelize/v2"
5326
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
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 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
41 models.QueueConfigurationType
5365
74bae79de83e Fixed name spelling in report import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5336
diff changeset
42 Name string `json:"name"`
5326
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
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 const ReportJobKind JobKind = "report"
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 type reportJobCreator struct{}
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48
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
49 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
50 selectReportUsersSQL = `
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
51 SELECT username, email_address
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
52 FROM users.list_users
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
53 WHERE report_reciever
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
54 ORDER BY country, username`
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
55
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
56 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
57 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
58 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
59 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
60 )
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
61
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
62 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
63 Parse(`Dear {{ .Receiver }}
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
64
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
65 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
66 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
67 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
68 contact {{ .Admin }} under {{ .AdminEmail }}.
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
69
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
70 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
71
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
72 Kind Regards`))
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
73
5328
bc8c082487b2 Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5326
diff changeset
74 func init() { RegisterJobCreator(ReportJobKind, reportJobCreator{}) }
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 func (reportJobCreator) Description() string { return "report" }
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 func (reportJobCreator) AutoAccept() bool { return true }
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 func (reportJobCreator) Create() Job { return new(Report) }
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 func (reportJobCreator) Depends() [2][]string { return [2][]string{{}, {}} }
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 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
85 return nil
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 }
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87
5376
e09e003948c7 Decouple and enforce roles in creating scheduled imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5375
diff changeset
88 // 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
89 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
90
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 func (r *Report) Description() (string, error) { return r.Name, nil }
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92
5328
bc8c082487b2 Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5326
diff changeset
93 func (*Report) CleanUp() error { return nil }
bc8c082487b2 Fixed compile errors. :-/
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5326
diff changeset
94
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 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
96 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
97 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
98 }
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 attrs.Set("name", r.Name)
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 return nil
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
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 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
104 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
105 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
106 }
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 name, found := attrs.Get("name")
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 if !found {
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 return errors.New("missing 'name' attribute")
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 }
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111 r.Name = name
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 return nil
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 }
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114
5334
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
115 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
116 path := config.ReportPath()
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
117 if path == "" {
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
118 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
119 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
120
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
121 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
122 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
123 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
124 }
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, err
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
126 } 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
127 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
128 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
129
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
130 // TODO: Prevent this earlier.
5375
755ed195fdc3 Fix for 5486:dbae10503ee6
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5371
diff changeset
131 if match, _ := regexp.MatchString(`^[a-zA-Z0-9_-]+$`, r.Name); !match {
5334
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
132 return nil, nil, errors.New("invalid report name")
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
133 }
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 xlsxFilename := filepath.Join(path, r.Name+".xlsx")
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
136 yamlFilename := filepath.Join(path, r.Name+".yaml")
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
137
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
138 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
139 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
140 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
141 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
142 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
143 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
144 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
145 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
146
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
147 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
148 if err != nil {
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
149 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
150 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
151
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
152 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
153 if err != nil {
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
154 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
155 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
156
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
157 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
158 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
159
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160 func (r *Report) Do(
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161 ctx context.Context,
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
162 importID int64,
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
163 conn *sql.Conn,
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
164 feedback Feedback,
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
165 ) (interface{}, error) {
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
166
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
167 start := time.Now()
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
168
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
169 feedback.Info("Generating report %s.", r.Name)
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
170
5334
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
171 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
172 if err != nil {
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
173 return nil, err
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
174 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
175
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
176 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
177 if err != nil {
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
178 return nil, err
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
179 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
180 defer tx.Rollback()
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
181
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
182 // Fetch receivers
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
183 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
184
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
185 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
186 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
187 if err != nil {
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
188 return err
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
189 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
190 defer rows.Close()
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
191
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
192 for rows.Next() {
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
193 var u misc.EmailReceiver
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
194 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
195 return err
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
196 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
197 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
198 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
199 return rows.Err()
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
200 }(); err != nil {
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
201 return nil, err
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
202 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
203
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
204 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
205 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
206 return nil, nil
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
207 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
208
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
209 // 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
210 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
211 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
212 ctx, selectCurrentUserSQL).Scan(&admin.Name, &admin.Address); 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
213 log.Printf("error: Cannot find sender: %v\n")
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 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
215 }
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
216
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
217 // 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
218 if err := action.Execute(ctx, tx, template); err != nil {
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
219 log.Printf("error: %v\n", err)
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
220 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
221 }
45805c454436 Load users from database who should receive a report.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5329
diff changeset
222
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
223 var buf bytes.Buffer
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
224 if _, err := template.WriteTo(&buf); err != nil {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
225 log.Printf("error: %v\n", err)
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
226 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
227 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
228
5371
0de64b3017ac Logging cosmetics for the report import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5369
diff changeset
229 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
230
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
231 now := start.UTC().Format("2006-01-02")
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
232
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
233 attached := r.Name + "-" + now + ".xlsx"
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
234
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
235 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
236 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
237 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
238 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
239 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
240 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
241 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
242 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
243 }{
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 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
245 Attachment: 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
246 Report: r.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
247 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
248 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
249 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
250 }
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 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
252 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
253 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
254 }
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
255 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
256 }
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
257
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
258 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
259 // 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
260 // sending failed. We only log it.
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
261 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
262 return nil
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
263 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
264
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
265 if err := misc.SendMailToAll(
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
266 users,
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
267 "Report "+r.Name+" from "+now,
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
268 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
269 []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
270 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
271 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
272 }},
5335
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
273 errorHandler,
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
274 ); err != nil {
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
275 return nil, err
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
276 }
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
277
dcd5692a2889 Sending generated reports to receivers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5334
diff changeset
278 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
279 time.Since(start))
5326
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
280
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281 return nil, nil
96ceb150ea46 Added infrastructure for report 'import'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282 }