Mercurial > gemma
comparison pkg/controllers/user.go @ 1660:f32e8a973b48
Scheduler: Moved code to figure out the scheduled jobs per user from the database to a more suited place.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 21 Dec 2018 13:04:46 +0100 |
parents | 85386ad17d34 |
children | 7cf8a276a80c |
comparison
equal
deleted
inserted
replaced
1659:897e7cad7e77 | 1660:f32e8a973b48 |
---|---|
15 | 15 |
16 package controllers | 16 package controllers |
17 | 17 |
18 import ( | 18 import ( |
19 "bytes" | 19 "bytes" |
20 "context" | |
21 "database/sql" | 20 "database/sql" |
22 "fmt" | 21 "fmt" |
23 "log" | 22 "log" |
24 "net/http" | 23 "net/http" |
25 "text/template" | 24 "text/template" |
70 email_address, | 69 email_address, |
71 ST_XMin(map_extent), ST_YMin(map_extent), | 70 ST_XMin(map_extent), ST_YMin(map_extent), |
72 ST_XMax(map_extent), ST_YMax(map_extent) | 71 ST_XMax(map_extent), ST_YMax(map_extent) |
73 FROM users.list_users | 72 FROM users.list_users |
74 WHERE username = $1` | 73 WHERE username = $1` |
75 | |
76 scheduledIDsSQL = ` | |
77 SELECT id from waterway.import_configuration | |
78 WHERE username = $1` | |
79 ) | 74 ) |
80 | 75 |
81 var ( | 76 var ( |
82 testSysadminNotifyMailTmpl = template.Must( | 77 testSysadminNotifyMailTmpl = template.Must( |
83 template.New("sysadmin").Parse(`Dear {{ .User }}, | 78 template.New("sysadmin").Parse(`Dear {{ .User }}, |
99 When the status of an data import managed by you changes an automated mail will | 94 When the status of an data import managed by you changes an automated mail will |
100 be send to the address: {{ .Email }} with details on the new import status | 95 be send to the address: {{ .Email }} with details on the new import status |
101 (inkluding import errors) and details on the concerned import.`)) | 96 (inkluding import errors) and details on the concerned import.`)) |
102 ) | 97 ) |
103 | 98 |
104 func scheduledIDs( | |
105 ctx context.Context, | |
106 conn *sql.Conn, | |
107 user string, | |
108 ) (map[int64]struct{}, error) { | |
109 ids := map[int64]struct{}{} | |
110 rows, err := conn.QueryContext(ctx, scheduledIDsSQL, user) | |
111 if err != nil { | |
112 return nil, nil | |
113 } | |
114 defer rows.Close() | |
115 for rows.Next() { | |
116 var id int64 | |
117 if err := rows.Scan(&id); err != nil { | |
118 return nil, err | |
119 } | |
120 ids[id] = struct{}{} | |
121 } | |
122 if err := rows.Err(); err != nil { | |
123 return nil, err | |
124 } | |
125 return ids, nil | |
126 } | |
127 | |
128 func deleteUser( | 99 func deleteUser( |
129 _ interface{}, req *http.Request, | 100 _ interface{}, req *http.Request, |
130 db *sql.Conn, | 101 db *sql.Conn, |
131 ) (jr JSONResult, err error) { | 102 ) (jr JSONResult, err error) { |
132 | 103 |
140 if session.User == user { | 111 if session.User == user { |
141 err = JSONError{http.StatusBadRequest, "error: cannot delete yourself"} | 112 err = JSONError{http.StatusBadRequest, "error: cannot delete yourself"} |
142 return | 113 return |
143 } | 114 } |
144 | 115 |
116 ctx := req.Context() | |
117 | |
145 // Remove scheduled tasks. | 118 // Remove scheduled tasks. |
146 ids, err2 := scheduledIDs(req.Context(), db, user) | 119 ids, err2 := scheduler.ScheduledUserIDs(ctx, db, user) |
147 if err2 == nil { | 120 if err2 == nil { |
148 if len(ids) > 0 { | 121 if len(ids) > 0 { |
149 go func() { scheduler.UnbindByIDs(ids) }() | 122 go func() { scheduler.UnbindByIDs(ids) }() |
150 } | 123 } |
151 } else { | 124 } else { |
152 log.Printf("error: %v\n", err2) | 125 log.Printf("error: %v\n", err2) |
153 } | 126 } |
154 | 127 |
155 var res sql.Result | 128 var res sql.Result |
156 | 129 |
157 if res, err = db.ExecContext(req.Context(), deleteUserSQL, user); err != nil { | 130 if res, err = db.ExecContext(ctx, deleteUserSQL, user); err != nil { |
158 return | 131 return |
159 } | 132 } |
160 | 133 |
161 if n, err2 := res.RowsAffected(); err2 == nil && n == 0 { | 134 if n, err2 := res.RowsAffected(); err2 == nil && n == 0 { |
162 err = JSONError{ | 135 err = JSONError{ |